Created
October 15, 2019 16:56
-
-
Save TomSmeets/26eb902aaff621e22eecb13d2302793f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/default.nix b/lib/default.nix | |
index f293a1defb1..786df12b3f0 100644 | |
--- a/lib/default.nix | |
+++ b/lib/default.nix | |
@@ -105,7 +105,7 @@ let | |
mergeModules' mergeOptionDecls evalOptionValue mergeDefinitions | |
pushDownProperties dischargeProperties filterOverrides | |
sortProperties fixupOptionType mkIf mkAssert mkMerge mkOverride | |
- mkOptionDefault mkDefault mkForce mkVMOverride mkStrict | |
+ mkOptionDefault mkDefault mkForce mkVMOverride mkApply mkStrict | |
mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions | |
mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule | |
mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule | |
diff --git a/lib/modules.nix b/lib/modules.nix | |
index 71672c7d112..c65c9a07f84 100644 | |
--- a/lib/modules.nix | |
+++ b/lib/modules.nix | |
@@ -358,8 +358,16 @@ rec { | |
if any (def: def.value._type or "" == "order") defs''.values | |
then sortProperties defs''.values | |
else defs''.values; | |
+ | |
+ # Spilt into values and post processing with mkApply | |
+ defs4 = let | |
+ split = builtins.partition (def: def.value._type or "" == "apply") defs'''; | |
+ in { | |
+ apply = x: foldl (a: f: f.value.content a) x split.right; | |
+ values = split.wrong; | |
+ }; | |
in { | |
- values = defs'''; | |
+ values = defs4; | |
inherit (defs'') highestPrio; | |
}; | |
defsFinal = defsFinal'.values; | |
@@ -368,7 +376,7 @@ rec { | |
mergedValue = foldl' (res: def: | |
if type.check def.value then res | |
else throw "The option value `${showOption loc}' in `${def.file}' is not of type `${type.description}'.") | |
- (type.merge loc defsFinal) defsFinal; | |
+ (defsFinal.apply (type.merge loc defsFinal.values)) defsFinal.values; | |
isDefined = defsFinal != []; | |
@@ -520,6 +528,12 @@ rec { | |
mkForce = mkOverride 50; | |
mkVMOverride = mkOverride 10; # used by ‘nixos-rebuild build-vm’ | |
+ # Apply a function to the merged value | |
+ mkApply = f: { | |
+ _type = "apply"; | |
+ content = f; | |
+ }; | |
+ | |
mkStrict = builtins.trace "`mkStrict' is obsolete; use `mkOverride 0' instead." (mkOverride 0); | |
mkFixStrictness = id; # obsolete, no-op |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment