summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/types.nix10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/types.nix b/lib/types.nix
index ee891f8231b..0810a43ed0e 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -453,6 +453,16 @@ rec {
       functor = (defaultFunctor name) // { wrapped = elemType; };
     };
 
+    functionTo = elemType: mkOptionType {
+      name = "function that evaluates to a(n) ${elemType.name}";
+      check = isFunction;
+      merge = loc: defs:
+        fnArgs: elemType.merge loc (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs);
+      getSubOptions = elemType.getSubOptions;
+      getSubModules = elemType.getSubModules;
+      substSubModules = m: functionTo (elemType.substSubModules m);
+    };
+
     # A submodule (like typed attribute set). See NixOS manual.
     submodule = modules: submoduleWith {
       shorthandOnlyDefinesConfig = true;