diff options
author | Shea Levy <shea@shealevy.com> | 2014-05-01 18:13:06 -0400 |
---|---|---|
committer | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2015-03-12 23:42:57 +0100 |
commit | 8737d1783f8a8e0c219ec00dd995e8851fd65b3b (patch) | |
tree | 01069e3c745d2eec4fa125f6659e0d32c1f2185e /lib/types.nix | |
parent | e4bc2592f3c5fa2f05484e7258f99ebb0507d304 (diff) |
types.attrsOf: Use mergeDefinitions to handle each element
This simplifes typechecking and allows properties to be used inside of the attribute sets. This fixes the empty synergy-client and synergy-server services previously generated on systems with synergy disabled.
Diffstat (limited to 'lib/types.nix')
-rw-r--r-- | lib/types.nix | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/types.nix b/lib/types.nix index 58fb05b9f0e50..a5b9d59e30ffa 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -126,12 +126,16 @@ in rec { attrsOf = elemType: mkOptionType { name = "attribute set of ${elemType.name}s"; - check = x: isAttrs x && all elemType.check (attrValues x); + check = isAttrs; merge = loc: defs: - zipAttrsWith (name: elemType.merge (loc ++ [name])) + mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs: + let + inherit (mergeDefinitions (loc ++ [name]) elemType defs) + defsFinal mergedValue; + in if defsFinal == [] then {} else { value = mergedValue; }) # Push down position info. (map (def: listToAttrs (mapAttrsToList (n: def': - { name = n; value = { inherit (def) file; value = def'; }; }) def.value)) defs); + { name = n; value = { inherit (def) file; value = def'; }; }) def.value)) defs))); getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]); getSubModules = elemType.getSubModules; substSubModules = m: attrsOf (elemType.substSubModules m); |