diff options
author | Nicolas Pierron <nicolas.b.pierron@gmail.com> | 2009-10-09 23:03:24 +0000 |
---|---|---|
committer | Nicolas Pierron <nicolas.b.pierron@gmail.com> | 2009-10-09 23:03:24 +0000 |
commit | 926f20a1eecab8e40e669018819c43503ff4e4c0 (patch) | |
tree | 8e66904f467ddece46d414c80ef372acdaf96df7 /pkgs/lib/types.nix | |
parent | 037a777b7d29d7c748b3cb3746ad67f31763e339 (diff) | |
download | nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar.gz nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar.bz2 nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar.lz nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar.xz nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.tar.zst nixpkgs-926f20a1eecab8e40e669018819c43503ff4e4c0.zip |
Revert "* Revert the last two commits ..." (rev 17738) & Fix.
svn path=/nixpkgs/trunk/; revision=17740
Diffstat (limited to 'pkgs/lib/types.nix')
-rw-r--r-- | pkgs/lib/types.nix | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/pkgs/lib/types.nix b/pkgs/lib/types.nix index 5e0393e9604..723dd22e2f0 100644 --- a/pkgs/lib/types.nix +++ b/pkgs/lib/types.nix @@ -19,7 +19,8 @@ rec { # iter (iterate on all elements contained in this type) # fold (fold all elements contained in this type) # hasOptions (boolean: whatever this option contains an option set) - # path (path contatenated to the option name contained contained in the option set) + # delayProperties (boolean: should properties go through the evaluation of this option) + # docPath (path concatenated to the option name contained in the option set) isOptionType = attrs: typeOf attrs == "option-type"; mkOptionType = { name @@ -31,10 +32,11 @@ rec { , docPath ? lib.id # If the type can contains option sets. , hasOptions ? false + , delayProperties ? false }: { _type = "option-type"; - inherit name check merge iter fold docPath hasOptions; + inherit name check merge iter fold docPath hasOptions delayProperties; }; @@ -73,6 +75,7 @@ rec { check = lib.traceValIfNot isDerivation; }; + listOf = types.list; list = elemType: mkOptionType { name = "list of ${elemType.name}s"; check = value: lib.traceValIfNot isList value && all elemType.check value; @@ -81,6 +84,10 @@ rec { fold = op: nul: list: lib.fold (e: l: elemType.fold op l e) nul list; docPath = path: elemType.docPath (path + ".*"); inherit (elemType) hasOptions; + + # You cannot define multiple configurations of one entity, therefore + # no reason justify to delay properties inside list elements. + delayProperties = false; }; attrsOf = elemType: mkOptionType { @@ -91,7 +98,7 @@ rec { iter = f: path: set: lib.mapAttrs (name: elemType.iter f (path + "." + name)) set; fold = op: nul: set: fold (e: l: elemType.fold op l e) nul (lib.attrValues set); docPath = path: elemType.docPath (path + ".<name>"); - inherit (elemType) hasOptions; + inherit (elemType) hasOptions delayProperties; }; uniq = elemType: mkOptionType { @@ -118,6 +125,7 @@ rec { merge = lib.id; check = x: lib.traceValIfNot builtins.isAttrs x; hasOptions = true; + delayProperties = true; }; }; |