Add comments about the module system interface

Ideally the module system could be configured pretty much completely by
the contents of the modules themselves, so add comments about avoiding
complicating it further and possibly removing now-redundant
configurability from the existing interface.
This commit is contained in:
Shea Levy
2014-05-05 16:30:51 -04:00
committed by Nicolas B. Pierron
parent e3eff53037
commit 0a0a29fd0b
3 changed files with 37 additions and 8 deletions

View File

@@ -9,8 +9,19 @@ rec {
/* Evaluate a set of modules. The result is a set of two
attributes: options: the nested set of all option declarations,
and config: the nested set of all option values. */
evalModules = { modules, prefix ? [], args ? {}, check ? true }:
and config: the nested set of all option values.
!!! Please think twice before adding to this argument list! The more
that is specified here instead of in the modules themselves the harder
it is to transparently move a set of modules to be a submodule of another
config (as the proper arguments need to be replicated at each call to
evalModules) and the less declarative the module set is. */
evalModules = { modules
, prefix ? []
, # !!! This can be specified modularly now, can we remove it?
args ? {}
, # !!! This can be specified modularly now, can we remove it?
check ? true
}:
let
internalModule = rec {
_file = ./modules.nix;
@@ -21,6 +32,7 @@ rec {
__internal.args = mkOption {
description = "Arguments passed to each module.";
# !!! Should this be types.uniq types.unspecified?
type = types.attrsOf types.unspecified;
internal = true;

View File

@@ -200,7 +200,12 @@ in rec {
let
coerce = def: if isFunction def then def else { config = def; };
modules = opts' ++ map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs;
in (evalModules { inherit modules; args.name = last loc; prefix = loc; }).config;
in (evalModules {
inherit modules;
# !!! See comment about args in lib/modules.nix
args.name = last loc;
prefix = loc;
}).config;
getSubOptions = prefix: (evalModules
{ modules = opts'; inherit prefix;
# FIXME: hack to get shit to evaluate.