diff options
author | Shea Levy <shea@shealevy.com> | 2014-02-13 12:07:43 -0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2014-02-13 12:10:50 -0500 |
commit | 220654e2052774ec7d3d834547119db105686715 (patch) | |
tree | a76ded963a34d1c72937ed259d757f1cf058b129 /lib/types.nix | |
parent | 5857e5c4f8f0c8185ff616d2f5ec7e5530bc160f (diff) |
Revert "Add heterogeneousAttrsOf option type"
Moving recent types work to a separate branch for now
This reverts commit 3f70dabad320b115d586a59db8cca05c7f3b7c75.
Diffstat (limited to 'lib/types.nix')
-rw-r--r-- | lib/types.nix | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/types.nix b/lib/types.nix index e9302688d5c3..77957a7763ba 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -124,17 +124,6 @@ rec { getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]); }; - heterogeneousAttrsOf = elemTypeFn: mkOptionType { - name = "attribute set of values of many types, including ${(elemTypeFn "<name>").name}"; - check = x: isAttrs x && all (name: (elemTypeFn name).check (getAttr name x)) (attrNames x); - merge = loc: defs: - zipAttrsWith (name: (elemTypeFn name).merge (loc ++ [name])) - # Push down position info. - (map (def: listToAttrs (mapAttrsToList (n: def': - { name = n; value = { inherit (def) file; value = def'; }; }) def.value)) defs); - getSubOptions = prefix: (elemTypeFn "<name>").getSubOptions (prefix ++ ["<name>"]); - }; - # List or attribute set of ... loaOf = elemType: let @@ -209,6 +198,25 @@ rec { submodule = submoduleWithExtraArgs {}; + nixosSubmodule = nixos: args: mkOptionType rec { + name = "submodule containing a NixOS config"; + check = x: isAttrs x || isFunction x; + merge = loc: defs: + let + coerce = def: if isFunction def then def else { config = def; }; + in (import (nixos + "/lib/eval-config.nix") (args // { + modules = (args.modules or []) ++ + map (def: { _file = def.file; imports = [(coerce def.value)]; }) defs; + + prefix = loc; + })).config; + getSubOptions = prefix: (import (nixos + "/lib/eval-config.nix") (args // { + modules = (args.modules or []); + + inherit prefix; + })).options; + }; + # Obsolete alternative to configOf. It takes its option # declarations from the ‘options’ attribute of containing option # declaration. |