{ self, unstable, ... } @ 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 "dirty"; documentation.man = { enable = true; generateCaches = true; }; } entryPoint hardware # TODO: import all modules (use mapModules?) ../modules/flakes.nix ../modules/nix.nix ../modules/nixpkgs.nix ] ++ nixpkgs.lib.optional (overlays != null) { nixpkgs.overlays = overlays; } ++ nixpkgs.lib.optionals (extraModules != null) extraModules; } ); 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; }