diff --git a/lib/modules.nix b/lib/modules.nix index a3c3fe7fc1ae..dcede0c46c63 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -17,51 +17,51 @@ rec { evalModules) and the less declarative the module set is. */ evalModules = { modules , prefix ? [] - , # !!! This can be specified modularly now, can we remove it? + , # This would be remove in the future, Prefer _module.args option instead. args ? {} - , # !!! This can be specified modularly now, can we remove it? + , # This would be remove in the future, Prefer _module.check option instead. check ? true }: let + # This internal module declare internal options under the `_module' + # attribute. These options are fragile, as they are used by the + # module system to change the interpretation of modules. internalModule = rec { _file = ./modules.nix; key = _file; options = { - __internal.args = mkOption { - description = "Arguments passed to each module."; - - # !!! Should this be types.uniq types.unspecified? + _module.args = mkOption { type = types.attrsOf types.unspecified; - internal = true; + description = "Arguments passed to each module."; }; - __internal.check = mkOption { - description = "Whether to check whether all option definitions have matching declarations."; - + _module.check = mkOption { type = types.uniq types.bool; - internal = true; - default = check; + description = "Whether to check whether all option definitions have matching declarations."; }; }; config = { - __internal.args = args; + _module.args = args; }; }; + closed = closeModules (modules ++ [ internalModule ]) { inherit config options; lib = import ./.; }; + # Note: the list of modules is reversed to maintain backward # compatibility with the old module system. Not sure if this is # the most sensible policy. options = mergeModules prefix (reverseList closed); + # Traverse options and extract the option values into the final # config set. At the same time, check whether all option # definitions have matching declarations. - # !!! __internal.check's value can't depend on any other config values + # !!! _module.check's value can't depend on any other config values # without an infinite recursion. One way around this is to make the # 'config' passed around to the modules be unconditionally unchecked, # and only do the check in 'result'. @@ -71,7 +71,7 @@ rec { if isOption v then v.value else yieldConfig (prefix ++ [n]) v) set) ["_definedNames"]; in - if options.__internal.check.value && set ? _definedNames then + if options._module.check.value && set ? _definedNames then fold (m: res: fold (name: res: if set ? ${name} then res else throw "The option `${showOption (prefix ++ [name])}' defined in `${m.file}' does not exist.") @@ -122,7 +122,7 @@ rec { let # Module arguments are resolved in a strict manner when attribute set # deconstruction is used. As the arguments are now defined with the - # config.__interanl.args option, the strictness used on the attribute + # config._module.args option, the strictness used on the attribute # set argument would cause an infinite loop, if the result of the # option is given as argument. # @@ -135,7 +135,7 @@ rec { requiredArgs = builtins.attrNames (builtins.functionArgs f); extraArgs = builtins.listToAttrs (map (name: { inherit name; - value = config.__internal.args.${name}; + value = config._module.args.${name}; }) requiredArgs); in f (extraArgs // arg) else diff --git a/lib/types.nix b/lib/types.nix index f836b07e335f..f22c76616345 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -200,7 +200,6 @@ rec { modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs; in (evalModules { inherit modules; - # !!! See comment about args in lib/modules.nix args.name = last loc; prefix = loc; }).config; diff --git a/nixos/lib/eval-config.nix b/nixos/lib/eval-config.nix index a157ffd56951..adacbd0863e3 100644 --- a/nixos/lib/eval-config.nix +++ b/nixos/lib/eval-config.nix @@ -35,7 +35,7 @@ let key = _file; config = { nixpkgs.system = lib.mkDefault system_; - __internal.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_); + _module.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_); }; }; @@ -60,5 +60,5 @@ in rec { inherit modules baseModules; }; - inherit (config.__internal.args) pkgs; + inherit (config._module.args) pkgs; } diff --git a/nixos/modules/misc/extra-arguments.nix b/nixos/modules/misc/extra-arguments.nix index 9943a6192a69..c2c8903546d5 100644 --- a/nixos/modules/misc/extra-arguments.nix +++ b/nixos/modules/misc/extra-arguments.nix @@ -1,7 +1,7 @@ { lib, pkgs, config, ... }: { - __internal.args = { + _module.args = { modulesPath = ../.; pkgs_i686 = import ../../lib/nixpkgs.nix { diff --git a/nixos/modules/misc/nixpkgs.nix b/nixos/modules/misc/nixpkgs.nix index 2b648c1fa4ed..395ba82f2d16 100644 --- a/nixos/modules/misc/nixpkgs.nix +++ b/nixos/modules/misc/nixpkgs.nix @@ -72,7 +72,7 @@ in }; config = { - __internal.args.pkgs = import ../../lib/nixpkgs.nix { + _module.args.pkgs = import ../../lib/nixpkgs.nix { system = config.nixpkgs.system; inherit (config.nixpkgs) config; diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index b898dc23522d..087b903b8f49 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -136,7 +136,7 @@ in zipModules ([] ++ obsolete [ "services" "mysql55" ] [ "services" "mysql" ] -++ obsolete [ "environment" "checkConfigurationOptions" ] [ "__internal" "check" ] +++ obsolete [ "environment" "checkConfigurationOptions" ] [ "_module" "check" ] # Options that are obsolete and have no replacement. ++ obsolete' [ "boot" "loader" "grub" "bootDevice" ] diff --git a/nixos/modules/services/misc/nixos-manual.nix b/nixos/modules/services/misc/nixos-manual.nix index 72923f2b56a0..f73c4102cfe5 100644 --- a/nixos/modules/services/misc/nixos-manual.nix +++ b/nixos/modules/services/misc/nixos-manual.nix @@ -18,7 +18,7 @@ let eval = evalModules { modules = [ versionModule ] ++ baseModules; - args = (config.__internal.args) // { modules = [ ]; }; + args = (config._module.args) // { modules = [ ]; }; }; manual = import ../../../doc/manual {