From 8baea8b82cc80c6a2843045d5b554f7f65acbc4f Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 28 Feb 2022 22:57:03 +0100 Subject: lib.modules: Make option injection work when shorthandOnlyDefinesConfig --- lib/modules.nix | 1 + lib/tests/modules.sh | 1 + lib/tests/modules/declare-bare-submodule-nested-option.nix | 3 ++- lib/tests/modules/declare-bare-submodule.nix | 8 +++++++- lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix | 1 + lib/types.nix | 6 +++++- 6 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix diff --git a/lib/modules.nix b/lib/modules.nix index 7d9c55f9a15..cc045391fcb 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -496,6 +496,7 @@ rec { options = mkOption { type = types.submoduleWith { modules = [ { options = decl.options; } ]; + shorthandOnlyDefinesConfig = null; }; }; }; diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index e903714a720..3950d83f584 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -66,6 +66,7 @@ checkConfigOutput '^1$' config.bare-submodule.nested ./declare-bare-submodule.ni checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix checkConfigOutput '^42$' config.bare-submodule.nested ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix checkConfigOutput '^420$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-nested-option.nix ./declare-bare-submodule-deep-option.nix ./define-bare-submodule-values.nix +checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./define-shorthandOnlyDefinesConfig-true.nix # Check integer types. # unsigned diff --git a/lib/tests/modules/declare-bare-submodule-nested-option.nix b/lib/tests/modules/declare-bare-submodule-nested-option.nix index 009dd4d6cb3..da125c84b25 100644 --- a/lib/tests/modules/declare-bare-submodule-nested-option.nix +++ b/lib/tests/modules/declare-bare-submodule-nested-option.nix @@ -1,10 +1,11 @@ -{ lib, ... }: +{ config, lib, ... }: let inherit (lib) mkOption types; in { options.bare-submodule = mkOption { type = types.submoduleWith { + shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig; modules = [ { options.nested = mkOption { diff --git a/lib/tests/modules/declare-bare-submodule.nix b/lib/tests/modules/declare-bare-submodule.nix index 298c71e3ca0..5402f4ff5a5 100644 --- a/lib/tests/modules/declare-bare-submodule.nix +++ b/lib/tests/modules/declare-bare-submodule.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ config, lib, ... }: let inherit (lib) mkOption types; in @@ -6,7 +6,13 @@ in options.bare-submodule = mkOption { type = types.submoduleWith { modules = [ ]; + shorthandOnlyDefinesConfig = config.shorthandOnlyDefinesConfig; }; default = {}; }; + + # config-dependent options: won't recommend, but useful for making this test parameterized + options.shorthandOnlyDefinesConfig = mkOption { + default = false; + }; } diff --git a/lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix b/lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix new file mode 100644 index 00000000000..bd3a73dce34 --- /dev/null +++ b/lib/tests/modules/define-shorthandOnlyDefinesConfig-true.nix @@ -0,0 +1 @@ +{ shorthandOnlyDefinesConfig = true; } diff --git a/lib/types.nix b/lib/types.nix index 3fcac9c31b3..bd4062d555a 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -637,7 +637,11 @@ rec { then lhs.specialArgs // rhs.specialArgs else throw "A submoduleWith option is declared multiple times with the same specialArgs \"${toString (attrNames intersecting)}\""; shorthandOnlyDefinesConfig = - if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig + if lhs.shorthandOnlyDefinesConfig == null + then rhs.shorthandOnlyDefinesConfig + else if rhs.shorthandOnlyDefinesConfig == null + then lhs.shorthandOnlyDefinesConfig + else if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig then lhs.shorthandOnlyDefinesConfig else throw "A submoduleWith option is declared multiple times with conflicting shorthandOnlyDefinesConfig values"; }; -- cgit 1.4.1