about summary refs log tree commit diff
path: root/lib/types.nix
diff options
context:
space:
mode:
authorSilvan Mosberger <silvan.mosberger@tweag.io>2023-12-07 22:08:00 +0100
committerSilvan Mosberger <silvan.mosberger@tweag.io>2023-12-08 21:50:29 +0100
commit8d3978c149352de6b7e8b72946b58a16427eda2c (patch)
tree42ab5a871dcfc8a995afb3d9bcf8fd9323c1b3ff /lib/types.nix
parent6cb8f045bf95959cde8845ac3bd24a9ef21b3333 (diff)
lib.types.boolByOr: init
This type is necessary to have correct merging behavior for
`allowUnfreePredicate` and `allowInsecurePredicate`

Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
Diffstat (limited to 'lib/types.nix')
-rw-r--r--lib/types.nix16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/types.nix b/lib/types.nix
index 5ffbecda5db39..51e58eaa8ab51 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -275,6 +275,22 @@ rec {
       merge = mergeEqualOption;
     };
 
+    boolByOr = mkOptionType {
+      name = "boolByOr";
+      description = "boolean (merged using or)";
+      descriptionClass = "noun";
+      check = isBool;
+      merge = loc: defs:
+        foldl'
+          (result: def:
+            # Under the assumption that .check always runs before merge, we can assume that all defs.*.value
+            # have been forced, and therefore we assume we don't introduce order-dependent strictness here
+            result || def.value
+          )
+          false
+          defs;
+    };
+
     int = mkOptionType {
       name = "int";
       description = "signed integer";