Document and rename internal option of modules.
This commit is contained in:
parent
ed91474e9b
commit
05e8a48fb4
7 changed files with 23 additions and 24 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ lib, pkgs, config, ... }:
|
||||
|
||||
{
|
||||
__internal.args = {
|
||||
_module.args = {
|
||||
modulesPath = ../.;
|
||||
|
||||
pkgs_i686 = import ../../lib/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;
|
||||
|
|
|
@ -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" ]
|
||||
|
|
|
@ -18,7 +18,7 @@ let
|
|||
|
||||
eval = evalModules {
|
||||
modules = [ versionModule ] ++ baseModules;
|
||||
args = (config.__internal.args) // { modules = [ ]; };
|
||||
args = (config._module.args) // { modules = [ ]; };
|
||||
};
|
||||
|
||||
manual = import ../../../doc/manual {
|
||||
|
|
Loading…
Reference in a new issue