diff options
author | Shea Levy <shea@shealevy.com> | 2014-02-11 14:59:24 -0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2014-02-11 14:59:24 -0500 |
commit | 3f70dabad320b115d586a59db8cca05c7f3b7c75 (patch) | |
tree | fd1481aa01185ee013cb9f45a94873ee7a788a36 /lib | |
parent | 8764758044b0425de54228d87cc68a4ed6d4d414 (diff) | |
download | nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar.gz nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar.bz2 nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar.lz nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar.xz nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.tar.zst nixlib-3f70dabad320b115d586a59db8cca05c7f3b7c75.zip |
Add heterogeneousAttrsOf option type
It is parameterized by a function that takes a name and evaluates to the option type for the attribute of that name. Together with submoduleWithExtraArgs, this subsumes nixosSubmodule.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/types.nix | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/lib/types.nix b/lib/types.nix index 77957a7763ba..e9302688d5c3 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -124,6 +124,17 @@ 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 @@ -198,25 +209,6 @@ 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. |