summary refs log tree commit diff
path: root/pkgs/lib/types.nix
diff options
context:
space:
mode:
authorNicolas Pierron <nicolas.b.pierron@gmail.com>2009-10-09 23:03:24 +0000
committerNicolas Pierron <nicolas.b.pierron@gmail.com>2009-10-09 23:03:24 +0000
commit926f20a1eecab8e40e669018819c43503ff4e4c0 (patch)
tree8e66904f467ddece46d414c80ef372acdaf96df7 /pkgs/lib/types.nix
parent037a777b7d29d7c748b3cb3746ad67f31763e339 (diff)
downloadnixpkgs-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.nix14
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;
     };
 
   };