diff --git a/deployment/check/common/deployerNode.nix b/deployment/check/common/deployerNode.nix index f8caba87..5802793c 100644 --- a/deployment/check/common/deployerNode.nix +++ b/deployment/check/common/deployerNode.nix @@ -54,11 +54,11 @@ in system.extraDependencies = [ - inputs.flake-parts - inputs.flake-parts.inputs.nixpkgs-lib inputs.nixops4 inputs.nixops4-nixos inputs.nixpkgs + + sources.flake-parts sources.flake-inputs pkgs.stdenv diff --git a/deployment/check/common/nixosTest.nix b/deployment/check/common/nixosTest.nix index 3b43719a..d15203cb 100644 --- a/deployment/check/common/nixosTest.nix +++ b/deployment/check/common/nixosTest.nix @@ -138,7 +138,6 @@ in deployer.succeed(""" nix flake lock --extra-experimental-features 'flakes nix-command' \ --offline -v \ - --override-input flake-parts ${inputs.flake-parts} \ --override-input nixops4 ${inputs.nixops4.packages.${system}.flake-in-a-bottle} \ \ --override-input nixops4-nixos ${inputs.nixops4-nixos} \ @@ -151,7 +150,6 @@ in } \ --override-input nixops4-nixos/git-hooks-nix ${emptyFlake} \ \ - --override-input nixpkgs ${inputs.nixpkgs} \ --override-input git-hooks ${inputs.git-hooks} \ ; """) diff --git a/flake.lock b/flake.lock index baf0a2bc..c98744f9 100644 --- a/flake.lock +++ b/flake.lock @@ -143,24 +143,6 @@ } }, "flake-parts_3": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_3" - }, - "locked": { - "lastModified": 1738453229, - "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "nixops4-nixos", @@ -342,7 +324,7 @@ "nix": { "inputs": { "flake-compat": "flake-compat_3", - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_3", "git-hooks-nix": "git-hooks-nix_2", "nixfmt": "nixfmt", "nixpkgs": [ @@ -416,7 +398,7 @@ }, "nixops4": { "inputs": { - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "nix": "nix", "nix-cargo-integration": "nix-cargo-integration", "nixpkgs": "nixpkgs_3", @@ -438,7 +420,7 @@ }, "nixops4-nixos": { "inputs": { - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "git-hooks-nix": "git-hooks-nix", "nixops4": "nixops4", "nixops4-nixos": [ @@ -520,18 +502,6 @@ "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz" } }, - "nixpkgs-lib_3": { - "locked": { - "lastModified": 1738452942, - "narHash": "sha256-vJzFZGaCpnmo7I6i416HaBLpC+hvcURh/BQwROcGIp8=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz" - } - }, "nixpkgs-old": { "locked": { "lastModified": 1735563628, @@ -664,7 +634,6 @@ }, "root": { "inputs": { - "flake-parts": "flake-parts", "git-hooks": "git-hooks", "nixops4": [ "nixops4-nixos", diff --git a/flake.nix b/flake.nix index 24e098bb..75c0ba95 100644 --- a/flake.nix +++ b/flake.nix @@ -1,83 +1,48 @@ { inputs = { - flake-parts.url = "github:hercules-ci/flake-parts"; git-hooks.url = "github:cachix/git-hooks.nix"; nixops4.follows = "nixops4-nixos/nixops4"; nixops4-nixos.url = "github:nixops4/nixops4-nixos"; }; outputs = - inputs@{ self, flake-parts, ... }: - let - sources = import ./npins; - inherit (import sources.flake-inputs) import-flake; - inherit (sources) git-hooks; - # XXX(@fricklerhandwerk): this atrocity is required to splice in a foreign Nixpkgs via flake-parts - # XXX - this is just importing a flake - nixpkgs = import-flake { src = sources.nixpkgs; }; - # XXX - this overrides the inputs attached to `self` - inputs' = self.inputs // { - nixpkgs = nixpkgs; - }; - self' = self // { - inputs = inputs'; - }; - in - # XXX - finally we override the overall set of `inputs` -- we need both: - # `flake-parts obtains `nixpkgs` from `self.inputs` and not from `inputs`. - flake-parts.lib.mkFlake + inputs: + import ./mkFlake.nix inputs ( + { inputs, ... }: { - inputs = inputs // { - inherit nixpkgs; - }; - self = self'; - specialArgs = { - inherit sources; - }; + imports = [ + "${inputs.git-hooks}/flake-module.nix" + inputs.nixops4.modules.flake.default + + ./deployment/flake-part.nix + ./infra/flake-part.nix + ./keys/flake-part.nix + ./secrets/flake-part.nix + ]; + + perSystem = + { + pkgs, + lib, + ... + }: + { + formatter = pkgs.nixfmt-rfc-style; + + pre-commit.settings.hooks = + let + ## Add a directory here if pre-commit hooks shouldn't apply to it. + optout = [ "npins" ]; + excludes = map (dir: "^${dir}/") optout; + addExcludes = lib.mapAttrs (_: c: c // { inherit excludes; }); + in + addExcludes { + nixfmt-rfc-style.enable = true; + deadnix.enable = true; + trim-trailing-whitespace.enable = true; + shellcheck.enable = true; + }; + }; } - ( - { inputs, ... }: - { - systems = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - - imports = [ - "${git-hooks}/flake-module.nix" - inputs.nixops4.modules.flake.default - - ./deployment/flake-part.nix - ./infra/flake-part.nix - ./keys/flake-part.nix - ./secrets/flake-part.nix - ]; - - perSystem = - { - pkgs, - lib, - ... - }: - { - formatter = pkgs.nixfmt-rfc-style; - - pre-commit.settings.hooks = - let - ## Add a directory here if pre-commit hooks shouldn't apply to it. - optout = [ "npins" ]; - excludes = map (dir: "^${dir}/") optout; - addExcludes = lib.mapAttrs (_: c: c // { inherit excludes; }); - in - addExcludes { - nixfmt-rfc-style.enable = true; - deadnix.enable = true; - trim-trailing-whitespace.enable = true; - shellcheck.enable = true; - }; - }; - } - ); + ); } diff --git a/mkFlake.nix b/mkFlake.nix new file mode 100644 index 00000000..c8dc35aa --- /dev/null +++ b/mkFlake.nix @@ -0,0 +1,47 @@ +## This file contains a tweak of flake-parts's `mkFlake` function to splice in +## sources taken from npins. + +inputs@{ self, ... }: + +let + sources = import ./npins; + inherit (import sources.flake-inputs) import-flake; + + # XXX(@fricklerhandwerk): this atrocity is required to splice in a foreign Nixpkgs via flake-parts + # XXX - this is just importing a flake + nixpkgs = import-flake { src = sources.nixpkgs; }; + + # XXX - this overrides the inputs attached to `self` + inputs' = self.inputs // { + nixpkgs = nixpkgs; + }; + self' = self // { + inputs = inputs'; + }; + + flake-parts-lib = import "${sources.flake-parts}/lib.nix" { inherit (nixpkgs) lib; }; +in + +flakeModule: + +flake-parts-lib.mkFlake + { + # XXX - finally we override the overall set of `inputs` -- we need both: + # `flake-parts obtains `nixpkgs` from `self.inputs` and not from `inputs`. + inputs = inputs // { + inherit nixpkgs; + }; + self = self'; + specialArgs = { + inherit sources; + }; + } + { + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + imports = [ flakeModule ]; + }