diff --git a/lib/attrsets.nix b/lib/attrsets.nix index 40bc1667b85..7c93d8698de 100644 --- a/lib/attrsets.nix +++ b/lib/attrsets.nix @@ -29,9 +29,8 @@ rec { ["x" "y"] applied with some value v returns `x.y = v;' */ setAttrByPath = attrPath: value: if attrPath == [] then value - else listToAttrs [( - nameValuePair (head attrPath) (setAttrByPath (tail attrPath) value) - )]; + else listToAttrs + [ { name = head attrPath; value = setAttrByPath (tail attrPath) value; } ]; getAttrFromPath = attrPath: set: @@ -133,7 +132,7 @@ rec { => { x = "x-foo"; y = "y-bar"; } */ mapAttrs = f: set: - listToAttrs (map (attr: nameValuePair attr (f attr (getAttr attr set))) (attrNames set)); + listToAttrs (map (attr: { name = attr; value = f attr (getAttr attr set); }) (attrNames set)); /* Like `mapAttrs', but allows the name of each attribute to be diff --git a/lib/modules.nix b/lib/modules.nix index 3bb5023cb99..d1fcfbc8fe8 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -75,20 +75,23 @@ rec { loc' = loc ++ [name]; # Get all submodules that declare ‘name’. decls = concatLists (map (m: - optional (hasAttr name m.options) - { inherit (m) file; options = getAttr name m.options; } + if hasAttr name m.options + then [ { inherit (m) file; options = getAttr name m.options; } ] + else [] ) options); # Get all submodules that define ‘name’. defns = concatLists (map (m: - optionals (hasAttr name m.config) - (map (config: { inherit (m) file; inherit config; }) - (pushDownProperties (getAttr name m.config))) + if hasAttr name m.config + then map (config: { inherit (m) file; inherit config; }) + (pushDownProperties (getAttr name m.config)) + else [] ) configs); nrOptions = count (m: isOption m.options) decls; # Process mkMerge and mkIf properties. defns' = concatMap (m: - optionals (hasAttr name m.config) - (map (m': { inherit (m) file; value = m'; }) (dischargeProperties (getAttr name m.config))) + if hasAttr name m.config + then map (m': { inherit (m) file; value = m'; }) (dischargeProperties (getAttr name m.config)) + else [] ) configs; in if nrOptions == length decls then @@ -123,7 +126,7 @@ rec { else opt.options // res // { declarations = [opt.file] ++ res.declarations; - options = optionals (opt.options ? options) (toList opt.options.options ++ res.options); + options = if opt.options ? options then [(toList opt.options.options ++ res.options)] else []; } ) { declarations = []; options = []; } opts; @@ -133,7 +136,8 @@ rec { let # Process mkOverride properties, adding in the default # value specified in the option declaration (if any). - defsFinal = filterOverrides (optional (opt ? default) ({ file = head opt.declarations; value = mkOptionDefault opt.default; }) ++ defs); + defsFinal = filterOverrides + ((if opt ? default then [{ file = head opt.declarations; value = mkOptionDefault opt.default; }] else []) ++ defs); # Type-check the remaining definitions, and merge them if # possible. merged = diff --git a/lib/types.nix b/lib/types.nix index aa8a371d953..7cfd8e606d7 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -116,7 +116,7 @@ rec { if isList def then listToAttrs ( flip imap def (elemIdx: elem: - nameValuePair "unnamed-${toString defIdx}.${toString elemIdx}" elem)) + { name = "unnamed-${toString defIdx}.${toString elemIdx}"; value = elem; })) else def; listOnly = listOf elemType;