diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nix | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/lib/system.nix b/lib/system.nix index 8fc4dce..e1709e3 100644 --- a/lib/system.nix +++ b/lib/system.nix @@ -1,22 +1,47 @@ -{ self, inputs, lib, pkgs, ... }: +{ self, inputs, lib, pkgs, ... } @ args: with lib; with lib.my; { - mkSystem = path: attrs @ { ... }: { - imports = [ + mkSystem = { hostPath, nixpkgs ? inputs.unstable, system ? "x86_64-linux", overlays ? null, extraModules ? null }: + nixpkgs.lib.nixosSystem ( { - networking.hostName = mkDefault - (removeSuffix ".nix" (baseNameOf path)); - system.configurationRevision = self.rev or "dirty"; + system = system; + + specialArgs = args; + + modules = [ + { + networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf hostPath)); + nix.flakes.enable = true; + system.configurationRevision = self.rev or "dirty"; + documentation.man = { enable = true; generateCaches = true; }; + } + (import hostPath) + ] ++ mapModulesRec' ../modules import + ++ nixpkgs.lib.optional (overlays != null) { nixpkgs.overlays = overlays; } + ++ nixpkgs.lib.optionals (extraModules != null) extraModules; + + # let deployment options to be set without breaking eval on nixosConfigurations + extraModules = [ inputs.colmena.nixosModules.deploymentOptions ]; } - ../. # /default.nix - (import path) - ]; - }; + ); mapSystems = dir: attrs @ { system ? system, ... }: mapModules dir - (hostPath: mkSystem hostPath attrs); + (hostPath: mkSystem { inherit hostPath; }); + + mkColmenaFromNixOSConfigurations = conf: + { + meta = { + # Colmena requirement. Will be overridden in nodeNixpkgs. + nixpkgs = import inputs.unstable { system = "x86_64-linux"; }; + nodeNixpkgs = builtins.mapAttrs (_: value: value.pkgs) conf; + nodeSpecialArgs = builtins.mapAttrs (_: value: value._module.specialArgs) conf; + }; + } // builtins.mapAttrs (_: value: { imports = value._module.args.modules; }) conf; + + mkHydraFromNixOSConfigurations = conf: + mapAttrs' (name: value: { name = "nixos-${name}"; value = value.config.system.build.toplevel; }) conf; } |