diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index dd3c1e573abd..beb191aed0c1 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -190,6 +190,9 @@ checkConfigOutput '^420$' config.bare-submodule.deep ./declare-bare-submodule.ni checkConfigOutput '^2$' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./define-shorthandOnlyDefinesConfig-true.nix checkConfigError 'The option .bare-submodule.deep. in .*/declare-bare-submodule-deep-option.nix. is already declared in .*/declare-bare-submodule-deep-option-duplicate.nix' config.bare-submodule.deep ./declare-bare-submodule.nix ./declare-bare-submodule-deep-option.nix ./declare-bare-submodule-deep-option-duplicate.nix +# Check that strMatching can be merged +checkConfigOutput '^"strMatching.*"$' options.sm.type.name ./strMatching-merge.nix + # Check integer types. # unsigned checkConfigOutput '^42$' config.value ./declare-int-unsigned-value.nix ./define-value-int-positive.nix diff --git a/lib/tests/modules/strMatching-merge.nix b/lib/tests/modules/strMatching-merge.nix new file mode 100644 index 000000000000..2e043a5f9723 --- /dev/null +++ b/lib/tests/modules/strMatching-merge.nix @@ -0,0 +1,15 @@ +{ lib, ... }: +{ + imports = [ + { + options.sm = lib.mkOption { + type = lib.types.strMatching "\(.*\)"; + }; + } + { + options.sm = lib.mkOption { + type = lib.types.strMatching "\(.*\)"; + }; + } + ]; +} diff --git a/lib/types.nix b/lib/types.nix index 8eaded915297..43ace4a3f6a5 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -461,6 +461,11 @@ rec { descriptionClass = "noun"; check = x: str.check x && builtins.match pattern x != null; inherit (str) merge; + functor = defaultFunctor "strMatching" // { + type = payload: strMatching payload.pattern; + payload = { inherit pattern; }; + binOp = lhs: rhs: if lhs == rhs then lhs else null; + }; }; # Merge multiple definitions by concatenating them (with the given