{ description = "Nix Flake to use LibreOffice Base with an SQLite database"; inputs = { nixpkgs.url = "flake:nixpkgs"; }; outputs = inputs: let lib = inputs.nixpkgs.lib; forAllSystems = f: lib.genAttrs lib.systems.flakeExposed (system: f rec { inherit system; pkgs = inputs.nixpkgs.legacyPackages.${system}; }); in { devShells = forAllSystems ({ pkgs, system, ... }: { default = let sqliteDB = "les4roux"; in let sqliteDriverPath = "${pkgs.lib.getLib pkgs.unixODBCDrivers.sqlite}/lib/libsqlite3odbc.so"; in pkgs.mkShell { JAVA_HOME = pkgs.libreoffice.unwrapped.jdk; ODBCSYSINI = let odbcsysini = pkgs.writeTextDir "odbcinst.ini" '' [ODBC Drivers] SQLite3=Installed [SQLite3] Description = SQLite ODBC Driver Driver = ${sqliteDriverPath} Setup = ${sqliteDriverPath} Threading = 2 UsageCount=1 FileUsage= 1 CPTimeout= CPReuse= FKSupport=Yes SyncPragma= # Sadly does not work: https://github.com/sqitchers/docker-sqitch/pull/16/. [Default] Driver=SQLite3 ''; odbcini = pkgs.writeTextDir "odbc.ini" '' [${sqliteDB}] Description=${sqliteDB} database Driver=SQLite3 NoCreat=No LongNames=Yes Database=${sqliteDB}.sqlite TraceFile=/tmp/${sqliteDB}.log # DescriptionNote: optional lock timeout in milliseconds; default 100000 #Timeout=2000 ''; in pkgs.symlinkJoin { name = "ODBCSYSINI"; paths = [ odbcsysini odbcini ]; }; buildInputs = [ pkgs.bat pkgs.libreoffice pkgs.sqlite pkgs.sqlitebrowser pkgs.unixODBC ]; shellHook = '' bat $ODBCSYSINI/odbcinst.ini bat $ODBCSYSINI/odbc.ini export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath [pkgs.unixODBC]}:$LD_LIBRARY_PATH set -x odbcinst -j odbcinst -q -d -n SQLite3 odbcinst -q -s -h odbcinst -q -s -n ${sqliteDB} set +x '' # + checks.${system}.git-hooks-check.shellHook ; }; }); }; }