diff --git a/flake.nix b/flake.nix index cf07142..0eebf34 100644 --- a/flake.nix +++ b/flake.nix @@ -105,28 +105,20 @@ mkDeployments = hosts: overrides: lib.genAttrs hosts (host: mkDeploy host // (overrides.${host} or {}) ); - depot = forSystems (system: import ./packages { - inherit inputs system; - pkgs = nixpkgsFor system; - }); - effects = inputs.hercules-ci-effects.lib.withPkgs (nixpkgsFor "x86_64-linux"); - in { - nixosModules = aspect.modules; + in flake-parts.lib.mkFlake { inherit self; } { + inherit systems; + flake = { + nixosModules = aspect.modules; - nixosConfigurations = lib.genAttrs nixosHosts mkNixOS; + nixosConfigurations = lib.genAttrs nixosHosts mkNixOS; - deploy.nodes = mkDeployments deployableNixosHosts {}; + deploy.nodes = mkDeployments deployableNixosHosts {}; - apps = forSystems (system: { - }); - - packages = forSystems (system: depot.${system}.packages); - - checks = forSystems (system: depot.${system}.checks); - - devShells = forSystems (system: depot.${system}.devShells); - - effects = { branch, ... }: mkDeployEffects branch deployableNixosHosts; + effects = { branch, ... }: mkDeployEffects branch deployableNixosHosts; + }; + imports = [ + ./packages/part.nix + ]; }; } diff --git a/packages/default.nix b/packages/default.nix deleted file mode 100644 index 52a7b07..0000000 --- a/packages/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs, inputs, system }@args: -let - patched-derivations = import ./patched-derivations.nix (pkgs // { flakePackages = all; }); - patched-inputs = import ./patched-inputs.nix args; - projects = import ./projects.nix args; - all = patched-derivations - // patched-inputs - // projects.packages; - filters = import ./system-filter.nix; - doFilter = filterSet: pkgSet: pkgs.lib.filterAttrs (name: _: - filterSet ? "${name}" -> builtins.elem system filterSet."${name}" - ) pkgSet; -in { - packages = doFilter filters.packages all; - - checks = doFilter filters.checks projects.checks; - - inherit (projects) devShells; -} diff --git a/packages/lib/devshell.nix b/packages/lib/devshell.nix index 6a3b6f9..654c44a 100644 --- a/packages/lib/devshell.nix +++ b/packages/lib/devshell.nix @@ -1,8 +1,6 @@ -{ inputs, pkgs, ... }: +{ inputs', pkgs, ... }: let - inherit (pkgs) system; - - inherit (inputs.devshell.legacyPackages.${system}) mkShell; + inherit (inputs'.devshell.legacyPackages) mkShell; wrapInAttrs = value: if builtins.isAttrs value then value else { inherit value; }; diff --git a/packages/part.nix b/packages/part.nix new file mode 100644 index 0000000..8f8acad --- /dev/null +++ b/packages/part.nix @@ -0,0 +1,18 @@ +{ inputs, lib, ... }: +let + filters = import ./system-filter.nix; + doFilter' = system: filterSet: pkgSet: lib.filterAttrs (name: _: + filterSet ? "${name}" -> builtins.elem system filterSet."${name}" + ) pkgSet; +in { + imports = [ + ./projects.nix + ./patched-inputs.nix + ]; + perSystem = { pkgs, self', system, ... }: let + patched-derivations = import ./patched-derivations.nix (pkgs // { flakePackages = self'.packages; }); + in { + _module.args.filters = filters // { doFilter = doFilter' system; }; + packages = doFilter' system filters.packages patched-derivations; + }; +} diff --git a/packages/patched-inputs.nix b/packages/patched-inputs.nix index 1b524e8..09f7237 100644 --- a/packages/patched-inputs.nix +++ b/packages/patched-inputs.nix @@ -1,16 +1,22 @@ -{ inputs, pkgs, system, ... }: -let - tools = import ./lib/tools.nix; - packages = builtins.mapAttrs (_: v: v.packages.${system}) inputs; -in with tools; -rec { - inherit (packages.deploy-rs) deploy-rs; +{ + perSystem = { filters, inputs', ... }: - nix-super = packages.nix-super.nix; + let + tools = import ./lib/tools.nix; + packages = builtins.mapAttrs (_: v: v.packages) inputs'; + in with tools; - agenix = packages.agenix.agenix.override { nix = nix-super; }; + { + packages = filters.doFilter filters.packages rec { + inherit (packages.deploy-rs) deploy-rs; - hercules-ci-agent = packages.hercules-ci-agent.hercules-ci-agent; + nix-super = packages.nix-super.nix; - hci = packages.hercules-ci-agent.hercules-ci-cli; -} + agenix = packages.agenix.agenix.override { nix = nix-super; }; + + hercules-ci-agent = packages.hercules-ci-agent.hercules-ci-agent; + + hci = packages.hercules-ci-agent.hercules-ci-cli; + }; + }; +} \ No newline at end of file diff --git a/packages/projects.nix b/packages/projects.nix index f33223c..aee5d8c 100644 --- a/packages/projects.nix +++ b/packages/projects.nix @@ -1,109 +1,115 @@ -{ pkgs, inputs, system, ... }@args: -let - inherit (pkgs) lib; - inherit (inputs) unstable; - inherit (inputs.self.packages.${system}) nix-super; +{ inputs, self, ... }: - pins = import ./sources; - - dream2nix = inputs.dream2nix.lib2.init { - inherit pkgs; - config = { - projectRoot = ./.; - overridesDirs = [ ./dream2nix-overrides ]; - }; - }; - poetry2nix = pkgs.poetry2nix.overrideScope' (final: prev: { - defaultPoetryOverrides = prev.defaultPoetryOverrides.extend (import ./poetry2nix-overrides); - }); - - mkShell = import lib/devshell.nix args; - -in { - packages = rec { - ghost = let - version = "4.41.3"; - dream = dream2nix.makeOutputs { - source = pkgs.fetchzip { - url = "https://github.com/TryGhost/Ghost/releases/download/v${version}/Ghost-${version}.zip"; - sha256 = "sha256-mqN43LSkd9MHoIHyGS1VsPvpqWqX4Bx5KHcp3KOHw5A="; - stripRoot = false; + perSystem = { filters, inputs', pkgs, self', system, ... }: + let + inherit (pkgs) lib; + inherit (self'.packages) nix-super; + + pins = import ./sources; + + dream2nix = inputs.dream2nix.lib2.init { + inherit pkgs; + config = { + projectRoot = ./.; + overridesDirs = [ ./dream2nix-overrides ]; + }; + }; + poetry2nix = pkgs.poetry2nix.overrideScope' (final: prev: { + defaultPoetryOverrides = prev.defaultPoetryOverrides.extend (import ./poetry2nix-overrides); + }); + + mkShell = import lib/devshell.nix { + inherit inputs' pkgs; + }; + + in + { + imports = [ + ./tests + ]; + packages = filters.doFilter filters.packages rec { + ghost = let + version = "4.41.3"; + dream = dream2nix.makeOutputs { + source = pkgs.fetchzip { + url = "https://github.com/TryGhost/Ghost/releases/download/v${version}/Ghost-${version}.zip"; + sha256 = "sha256-mqN43LSkd9MHoIHyGS1VsPvpqWqX4Bx5KHcp3KOHw5A="; + stripRoot = false; + }; + }; + inherit (dream.packages) ghost; + in + ghost; + + uptime-kuma = let + dream = dream2nix.makeOutputs { + source = pins.uptime-kuma; + }; + inherit (dream.packages) uptime-kuma; + in + uptime-kuma; + + grafana = pkgs.callPackage ./monitoring/grafana { }; + + hyprspace = pkgs.callPackage ./networking/hyprspace { iproute2mac = null; }; + + ipfs = pkgs.callPackage ./networking/ipfs { }; + + npins = pkgs.callPackage ./tools/npins { + nix = nix-super; + nix-prefetch-git = pkgs.nix-prefetch-git.override { + nix = nix-super; }; }; - inherit (dream.packages) ghost; - in - ghost; - uptime-kuma = let - dream = dream2nix.makeOutputs { - source = pins.uptime-kuma; - }; - inherit (dream.packages) uptime-kuma; - in - uptime-kuma; + opentelemetry-java-agent-bin = pkgs.callPackage ./monitoring/opentelemetry-java-agent-bin { }; - grafana = pkgs.callPackage ./monitoring/grafana { }; - - hyprspace = pkgs.callPackage ./networking/hyprspace { iproute2mac = null; }; - - ipfs = pkgs.callPackage ./networking/ipfs { }; - - npins = pkgs.callPackage ./tools/npins { - nix = nix-super; - nix-prefetch-git = pkgs.nix-prefetch-git.override { + pin = pkgs.callPackage ./tools/pin { + inherit npins; nix = nix-super; }; + + privatevoid-smart-card-ca-bundle = pkgs.callPackage ./data/privatevoid-smart-card-certificate-authority-bundle.nix { }; + + reflex-cache = poetry2nix.mkPoetryApplication { + projectDir = ./servers/reflex-cache; + meta.mainProgram = "reflex"; + }; + + searxng = pkgs.callPackage ./web-apps/searxng { inherit pins; }; + + sips = pkgs.callPackage ./servers/sips { }; + + stevenblack-hosts = pkgs.callPackage ./data/stevenblack { inherit pins; }; }; - opentelemetry-java-agent-bin = pkgs.callPackage ./monitoring/opentelemetry-java-agent-bin { }; + devShells = { + default = let + flakePkgs = self'.packages; + in mkShell { + tools = with flakePkgs; [ + agenix + deploy-rs + npins + pin + ]; - pin = pkgs.callPackage ./tools/pin { - inherit npins; - nix = nix-super; - }; - - privatevoid-smart-card-ca-bundle = pkgs.callPackage ./data/privatevoid-smart-card-certificate-authority-bundle.nix { }; - - reflex-cache = poetry2nix.mkPoetryApplication { - projectDir = ./servers/reflex-cache; - meta.mainProgram = "reflex"; - }; - - searxng = pkgs.callPackage ./web-apps/searxng { inherit pins; }; - - sips = pkgs.callPackage ./servers/sips { }; - - stevenblack-hosts = pkgs.callPackage ./data/stevenblack { inherit pins; }; - }; - - checks = import ./tests { inherit inputs pkgs system; }; - - devShells = { - default = let - flakePkgs = inputs.self.packages.${system}; - in mkShell { - tools = with flakePkgs; [ - agenix - deploy-rs - npins - pin - ]; - - env.NPINS_DIRECTORY.eval = "$REPO_ROOT/packages/sources"; - }; - reflex-cache = let - inherit (inputs.self.packages.${system}) reflex-cache; - in mkShell { - packages = [ - reflex-cache.dependencyEnv - ]; + env.NPINS_DIRECTORY.eval = "$REPO_ROOT/packages/sources"; + }; + reflex-cache = let + inherit (self'.packages) reflex-cache; + in mkShell { + packages = [ + reflex-cache.dependencyEnv + ]; - tools = [ - pkgs.poetry - ]; + tools = [ + pkgs.poetry + ]; - env.PYTHON = reflex-cache.dependencyEnv.interpreter; + env.PYTHON = reflex-cache.dependencyEnv.interpreter; + }; }; }; -} +} \ No newline at end of file diff --git a/packages/tests/default.nix b/packages/tests/default.nix index 720c21a..5955710 100644 --- a/packages/tests/default.nix +++ b/packages/tests/default.nix @@ -1,23 +1,25 @@ -{ inputs, pkgs, system }: +{ filters, inputs', pkgs, self', ... }: let inherit (pkgs) nixosTest; in { - keycloak = nixosTest { - name = "keycloak"; - nodes.machine.services.keycloak = { - enable = true; - package = pkgs.keycloak.override { jre = inputs.self.packages.${system}.jre17_standard; }; - database.passwordFile = builtins.toFile "keycloak-test-password" "kcnixostest1234"; - settings = { - proxy = "edge"; - hostname = "keycloak.local"; + checks = filters.doFilter filters.checks { + keycloak = nixosTest { + name = "keycloak"; + nodes.machine.services.keycloak = { + enable = true; + package = pkgs.keycloak.override { jre = self'.packages.jre17_standard; }; + database.passwordFile = builtins.toFile "keycloak-test-password" "kcnixostest1234"; + settings = { + proxy = "edge"; + hostname = "keycloak.local"; + }; }; + testScript = '' + machine.wait_for_unit("keycloak.service") + machine.wait_for_open_port("80") + machine.succeed("curl --fail http://127.0.0.1:80") + ''; }; - testScript = '' - machine.wait_for_unit("keycloak.service") - machine.wait_for_open_port("80") - machine.succeed("curl --fail http://127.0.0.1:80") - ''; }; }