summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/default.nix1
-rw-r--r--lib/modules.nix22
2 files changed, 19 insertions, 4 deletions
diff --git a/lib/default.nix b/lib/default.nix
index e671fcf9546d..19316addb8cb 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -446,6 +446,7 @@ let
fixupOptionType
mkIf
mkAssert
+ mkDefinition
mkMerge
mkOverride
mkOptionDefault
diff --git a/lib/modules.nix b/lib/modules.nix
index a9ddaf7bda02..3d57c3dd062d 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -1097,10 +1097,16 @@ let
# Process mkMerge and mkIf properties.
defs' = concatMap (
m:
- map (value: {
- inherit (m) file;
- inherit value;
- }) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
+ map (
+ value:
+ if value._type or null == "definition" then
+ value
+ else
+ {
+ inherit (m) file;
+ inherit value;
+ }
+ ) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
) defs;
# Process mkOverride properties.
@@ -1171,6 +1177,8 @@ let
map (mapAttrs (n: v: mkIf cfg.condition v)) (pushDownProperties cfg.content)
else if cfg._type or "" == "override" then
map (mapAttrs (n: v: mkOverride cfg.priority v)) (pushDownProperties cfg.content)
+ # else if cfg._type or "" == "definition" then
+ # map (mapAttrs (n: v: mkDefinition v)) (pushDownProperties cfg.content)
# FIXME: handle mkOrder?
else
[ cfg ];
@@ -1365,6 +1373,11 @@ let
inherit contents;
};
+ /**
+ Return a definition with file location information.
+ */
+ mkDefinition = args@{ file, value, ... }: args // { _type = "definition"; };
+
mkOverride = priority: content: {
_type = "override";
inherit priority content;
@@ -2095,6 +2108,7 @@ private
mkBefore
mkChangedOptionModule
mkDefault
+ mkDefinition
mkDerivedConfig
mkFixStrictness
mkForce