diff --git a/doctrine/default.nix b/doctrine/default.nix new file mode 100644 index 0000000..b4c72b8 --- /dev/null +++ b/doctrine/default.nix @@ -0,0 +1,12 @@ +{ + pkgs, + namespace, +}: let + doctrine = { + lib = import ./lib {inherit lib pkgs doctrine;}; + prefix = "trivium"; + inherit namespace; + }; + inherit (pkgs) lib; +in + doctrine diff --git a/doctrine/lib/default.nix b/doctrine/lib/default.nix new file mode 100644 index 0000000..1b03fe1 --- /dev/null +++ b/doctrine/lib/default.nix @@ -0,0 +1,10 @@ +{ + lib, + doctrine, + pkgs, +}: let + close = f: args: f (args // {inherit lib pkgs doctrine;}); +in { + importAll = pkgs.callPackage ./importAll.nix {}; + mkModule = close (import ./mk-module.nix); +} diff --git a/pkgs/lib/importAll.nix b/doctrine/lib/importAll.nix similarity index 100% rename from pkgs/lib/importAll.nix rename to doctrine/lib/importAll.nix diff --git a/doctrine/lib/mk-module.nix b/doctrine/lib/mk-module.nix new file mode 100644 index 0000000..79c24c5 --- /dev/null +++ b/doctrine/lib/mk-module.nix @@ -0,0 +1,38 @@ +{ + name, + hm ? null, + sys ? null, + options ? null, + lib, + config, + pkgs, + doctrine, +}: let + optionsSet = import options { + inherit config lib pkgs cfg name doctrine; + }; + + configSet = import configFiles.${doctrine.namespace} { + inherit config lib pkgs doctrine cfg; + }; + + configFiles = lib.filterAttrs (k: v: v != null) { + inherit sys hm; + }; + + cfg = config.${doctrine.prefix}.${name}; +in { + config = + lib.optionalAttrs (configFiles ? ${doctrine.namespace}) + (lib.mkIf cfg.enable configSet); + + options = lib.optionalAttrs (options + != null + && optionsSet ? ${doctrine.namespace}) { + ${doctrine.prefix}.${name} = + optionsSet.${doctrine.namespace} + // { + enable = lib.mkEnableOption name; + }; + }; +} diff --git a/flake.nix b/flake.nix index 173766d..1a20e9e 100644 --- a/flake.nix +++ b/flake.nix @@ -45,8 +45,8 @@ trivium = overlay; }; - homeManagerModules.default = ./hm; - nixosModules.default = ./nixos; + homeManagerModules.default = ./modules; + nixosModules.default = ./modules; lib = { mkSystemFlake = { diff --git a/hm/default.nix b/hm/default.nix deleted file mode 100644 index 0967ef4..0000000 --- a/hm/default.nix +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..70dec76 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,3 @@ +{ + imports = []; +} diff --git a/nixos/default.nix b/nixos/default.nix deleted file mode 100644 index 5ce655e..0000000 --- a/nixos/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - imports = []; -} diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix deleted file mode 100644 index e3ab56e..0000000 --- a/pkgs/lib/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{callPackage}: { - importAll = callPackage ./importAll.nix {}; -} diff --git a/pkgs/spliit/default.nix b/pkgs/spliit/default.nix index 5a917ce..280e820 100644 --- a/pkgs/spliit/default.nix +++ b/pkgs/spliit/default.nix @@ -4,74 +4,73 @@ nodePackages, lib, writeShellScriptBin, - pkgs -}: -let + pkgs, +}: let schemaEngine = "${pkgs.prisma-engines}/bin/schema-engine"; queryEngineBin = "${pkgs.prisma-engines}/bin/query-engine"; queryEngineLib = "${pkgs.prisma-engines}/lib/libquery_engine.node"; - buildFlags = [ "--ignore-scripts" ]; + buildFlags = ["--ignore-scripts"]; in -buildNpmPackage { - pname = "spliit2"; - version = "master-20250420"; + buildNpmPackage { + pname = "spliit2"; + version = "master-20250420"; - src = fetchFromGitHub { - repo = "spliit"; - owner = "spliit-app"; + src = fetchFromGitHub { + repo = "spliit"; + owner = "spliit-app"; - rev = "a11efc79c13298c0d282e47496d132538752405f"; - hash = "sha256-v4gaPzLzBbbqw/LDYxe1fiyficcrqcGOop23YPiTrdc="; - }; + rev = "a11efc79c13298c0d282e47496d132538752405f"; + hash = "sha256-v4gaPzLzBbbqw/LDYxe1fiyficcrqcGOop23YPiTrdc="; + }; - npmDepsHash = "sha256-sd0/7ruNUFxUKTeTwx/v8Vc/G3llkXP6RSDE78h3qVU="; + npmDepsHash = "sha256-sd0/7ruNUFxUKTeTwx/v8Vc/G3llkXP6RSDE78h3qVU="; - nativeBuildInputs = [ pkgs.openssl ]; + nativeBuildInputs = [pkgs.openssl]; - npmRebuildFlags = buildFlags; + npmRebuildFlags = buildFlags; - PRISMA_SCHEMA_ENGINE_BINARY = schemaEngine; - PRISMA_QUERY_ENGINE_BINARY = queryEngineBin; - PRISMA_QUERY_ENGINE_LIBRARY = queryEngineLib; + PRISMA_SCHEMA_ENGINE_BINARY = schemaEngine; + PRISMA_QUERY_ENGINE_BINARY = queryEngineBin; + PRISMA_QUERY_ENGINE_LIBRARY = queryEngineLib; - preBuild = '' - cp -v scripts/build.env .env + preBuild = '' + cp -v scripts/build.env .env - npx prisma generate - ''; + npx prisma generate + ''; - npmBuildFlags = buildFlags; + npmBuildFlags = buildFlags; - postInstall = '' - cp -r .next public package.json next.config.mjs $out/lib/node_modules/spliit2 + postInstall = '' + cp -r .next public package.json next.config.mjs $out/lib/node_modules/spliit2 - install -Dvm755 -t $out/bin ${lib.getExe (writeShellScriptBin "spliit2" '' - set -euxo pipefail + install -Dvm755 -t $out/bin ${lib.getExe (writeShellScriptBin "spliit2" '' + set -euxo pipefail - cd @out@/lib/node_modules/spliit2 + cd @out@/lib/node_modules/spliit2 - export PATH="$PWD/node_modules/.bin:$PATH" - export NEXT_TELEMETRY_DISABLED=1 + export PATH="$PWD/node_modules/.bin:$PATH" + export NEXT_TELEMETRY_DISABLED=1 - export PRISMA_SCHEMA_ENGINE_BINARY="${schemaEngine}" - export PRISMA_QUERY_ENGINE_BINARY="${queryEngineBin}" - export PRISMA_QUERY_ENGINE_LIBRARY="${queryEngineLib}" + export PRISMA_SCHEMA_ENGINE_BINARY="${schemaEngine}" + export PRISMA_QUERY_ENGINE_BINARY="${queryEngineBin}" + export PRISMA_QUERY_ENGINE_LIBRARY="${queryEngineLib}" - prisma migrate deploy - next start - '')} + prisma migrate deploy + next start + '')} - substituteInPlace $out/bin/spliit2 \ - --replace @out@ $out + substituteInPlace $out/bin/spliit2 \ + --replace @out@ $out - wrapProgram $out/bin/spliit2 \ - --prefix PATH : ${lib.makeBinPath [ pkgs.openssl ]} - ''; + wrapProgram $out/bin/spliit2 \ + --prefix PATH : ${lib.makeBinPath [pkgs.openssl]} + ''; - meta = { - description = "Free and Open Source Alternative to Splitwise. Share expenses with your friends and family."; - homepage = "https://spliit.app"; - license = lib.licenses.mit; - maintainers = with lib.maintainers; []; - }; -} + meta = { + description = "Free and Open Source Alternative to Splitwise. Share expenses with your friends and family."; + homepage = "https://spliit.app"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; []; + }; + }