From b42b9e061b7adb3de93a44ed53b4a7aa83304073 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 17 Mar 2025 16:17:54 +0000 Subject: [PATCH] lib.modules: init lib.mkDefinition Free-floating definitions including file location. --- lib/default.nix | 1 + lib/modules.nix | 22 ++++++++++++++++++---- 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