diff --git a/lib/types.nix b/lib/types.nix index dd1e8ab9d0165..4ddd36c97520e 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -475,9 +475,10 @@ rec { check = isString; merge = loc: defs: concatStringsSep sep (getValues defs); functor = (defaultFunctor name) // { - payload = sep; - binOp = sepLhs: sepRhs: - if sepLhs == sepRhs then sepLhs + payload = { inherit sep; }; + type = payload: types.separatedString payload.sep; + binOp = lhs: rhs: + if lhs.sep == rhs.sep then { inherit (lhs) sep; } else null; }; }; @@ -1014,7 +1015,11 @@ rec { else "conjunction"; check = flip elem values; merge = mergeEqualOption; - functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); }; + functor = (defaultFunctor name) // { + payload = { inherit values; }; + type = payload: types.enum payload.values; + binOp = a: b: { values = unique (a.values ++ b.values); }; + }; }; # Either value of type `t1` or `t2`. diff --git a/nixos/doc/manual/redirects.json b/nixos/doc/manual/redirects.json index 5f7bf93db21ed..6f897ce7a9917 100644 --- a/nixos/doc/manual/redirects.json +++ b/nixos/doc/manual/redirects.json @@ -1844,6 +1844,12 @@ "sec-release-25.05-notable-changes": [ "release-notes.html#sec-release-25.05-notable-changes" ], + "sec-release-25.05-lib": [ + "release-notes.html#sec-release-25.05-lib" + ], + "sec-release-25.05-lib-breaking": [ + "release-notes.html#sec-release-25.05-lib-breaking" + ], "sec-release-24.11": [ "release-notes.html#sec-release-24.11" ], diff --git a/nixos/doc/manual/release-notes/rl-2505.section.md b/nixos/doc/manual/release-notes/rl-2505.section.md index f173d0d93b1d3..f3a58367e055f 100644 --- a/nixos/doc/manual/release-notes/rl-2505.section.md +++ b/nixos/doc/manual/release-notes/rl-2505.section.md @@ -118,3 +118,11 @@ - `bind.cacheNetworks` now only controls access for recursive queries, where it previously controlled access for all queries. + +## Nixpkgs Library {#sec-release-25.05-lib} + +### Breaking changes {#sec-release-25.05-lib-breaking} + +- Structure of the `functor` of some types has changed. `functor` is an implementation detail and should not be relied upon. If you did rely on it let us know in this [PR](https://github.com/NixOS/nixpkgs/pull/363565). + - [`lib.types.enum`](https://nixos.org/manual/nixos/unstable/#sec-option-types-basic): Previously the `functor.payload` was the list of enum values directly. Now it is an attribute set containing the values in the `values` attribute. + - [`lib.types.separatedString`](https://nixos.org/manual/nixos/unstable/#sec-option-types-string): Previously the `functor.payload` was the seperator directly. Now it is an attribute set containing the seperator in the `sep` attribute.