diff --git a/meta.nix b/meta.nix index 20c1e37f..23e06295 100644 --- a/meta.nix +++ b/meta.nix @@ -17,9 +17,13 @@ nixfiles = tree.impure; eval = let + inherit (config.network.nixos) builder; + mapNixosNodes = lib.mapAttrs (name: args: builder ({ + inherit name; + } // args)); nixosNodes = [ { - network.nodes = { + network.nodes = mapNixosNodes { tewi = { imports = [ ./systems/tewi/nixos.nix diff --git a/modules/meta/network.nix b/modules/meta/network.nix index 2887c234..bdb3e01c 100644 --- a/modules/meta/network.nix +++ b/modules/meta/network.nix @@ -5,14 +5,15 @@ meta, config, ... -}: +}@metaArgs: let /* This module: * Makes hosts nixosModules. * Manages module imports and specialArgs. * Builds network.nodes. */ -with lib; { + enableNixosBuilder = false; +in with lib; { options.network = { nixos = { extraModules = mkOption { @@ -27,6 +28,9 @@ with lib; { type = types.path; default = toString (pkgs.path + "/nixos/modules"); }; + builder = mkOption { + type = types.unspecified; + }; }; nodes = let nixosModule = { @@ -79,7 +83,9 @@ with lib; { }; in mkOption { - type = types.attrsOf nixosType; + type = types.lazyAttrsOf ( + if enableNixosBuilder then types.unspecified else nixosType + ); default = {}; }; }; @@ -92,6 +98,35 @@ with lib; { inherit (config.network) nodes; inherit inputs meta pkgs; }; + builder = mkOptionDefault ({ + pkgs ? metaArgs.pkgs, + system ? pkgs.system, + lib ? if args ? pkgs then pkgs.lib else metaArgs.lib, + nixosSystem ? import (pkgs.path + "/nixos/lib/eval-config.nix"), + baseModules ? import (modulesPath + "/module-list.nix"), + modulesPath ? toString (pkgs.path + "/nixos/modules"), + specialArgs ? config.network.nixos.specialArgs, + extraModules ? config.network.nixos.extraModules, + imports ? [ ], + name, + ... + }@args: let + args' = builtins.removeAttrs args [ + "extraModules" "specialArgs" "modulesPath" "baseModules" "lib" "pkgs" "system" "imports" "name" + ]; + c = nixosSystem ({ + inherit lib baseModules extraModules pkgs system; + modules = imports; + specialArgs = + { + inherit baseModules name; + inherit (config.network.nixos) modulesPath; + } + // config.network.nixos.specialArgs; + } // args'); + in if enableNixosBuilder then c.config else { + inherit imports; + }); }; }; }