Document and rename internal option of modules.

This commit is contained in:
Nicolas B. Pierron 2015-03-12 23:19:23 +01:00
parent ed91474e9b
commit 05e8a48fb4
7 changed files with 23 additions and 24 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;
}

View file

@ -1,7 +1,7 @@
{ lib, pkgs, config, ... }:
{
__internal.args = {
_module.args = {
modulesPath = ../.;
pkgs_i686 = import ../../lib/nixpkgs.nix {

View file

@ -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;

View file

@ -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" ]

View file

@ -18,7 +18,7 @@ let
eval = evalModules {
modules = [ versionModule ] ++ baseModules;
args = (config.__internal.args) // { modules = [ ]; };
args = (config._module.args) // { modules = [ ]; };
};
manual = import ../../../doc/manual {