{ self, unstable, colmena, ... } @ args: { mkSystem = { name, nixpkgs ? unstable, system ? "x86_64-linux", overlays ? null, extraModules ? null }: nixpkgs.lib.nixosSystem ( let configFolder = "${self}/nixos"; entryPoint = "${configFolder}/${name}/configuration.nix"; hardware = "${configFolder}/${name}/hardware-configuration.nix"; in { system = system; specialArgs = args; modules = [ { networking.hostName = name; nix.flakes.enable = true; system.configurationRevision = self.rev or self.dirtyRev; documentation.man = { enable = true; generateCaches = true; }; } entryPoint hardware ] ++ self.lib.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 = [ colmena.nixosModules.deploymentOptions ]; } ); mkColmenaFromNixOSConfigurations = conf: { meta = { # Colmena requirement. Will be overridden in nodeNixpkgs. nixpkgs = import 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: unstable.lib.mapAttrs' (name: value: { name = "nixos-${name}"; value = value.config.system.build.toplevel; }) conf; }