···374 - `i18n.extraLocales` should now be the preferred way to install additional locales.
375 - `i18n.supportedLocales` is now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.
376 - `i18n.supportedLocales` will now trigger a warning when it omits any locale set in `i18n.defaultLocale`, `i18n.extraLocales` or `i18n.extraLocaleSettings`.
0377378- `titaniumenv`, `titanium`, and `titanium-alloy` have been removed due to lack of maintenance in Nixpkgs []{#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}.
379
···374 - `i18n.extraLocales` should now be the preferred way to install additional locales.
375 - `i18n.supportedLocales` is now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.
376 - `i18n.supportedLocales` will now trigger a warning when it omits any locale set in `i18n.defaultLocale`, `i18n.extraLocales` or `i18n.extraLocaleSettings`.
377+ - The options `i18n.defaultCharset` & `i18n.localeCharsets` were added, and they complement `i18n.defaultLocale` & `i18n.extraLocaleSettings` respectively - allowing to control the character set used per locale setting.
378379- `titaniumenv`, `titanium`, and `titanium-alloy` have been removed due to lack of maintenance in Nixpkgs []{#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}.
380
+2
nixos/doc/manual/release-notes/rl-2511.section.md
···1819- The `services.polipo` module has been removed as `polipo` is unmaintained and archived upstream.
200021## Other Notable Changes {#sec-release-25.11-notable-changes}
2223<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···1819- The `services.polipo` module has been removed as `polipo` is unmaintained and archived upstream.
2021+- `renovate` was updated to v40. See the [upstream release notes](https://github.com/renovatebot/renovate/releases/tag/40.0.0) for breaking changes.
22+23## Other Notable Changes {#sec-release-25.11-notable-changes}
2425<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
+42-15
nixos/modules/config/i18n.nix
···5 ...
6}:
7let
008 aggregatedLocales =
9- (builtins.map
10- (l: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8")
11- (
12- [ config.i18n.defaultLocale ]
13- ++ (lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales)
14- ++ (lib.attrValues (lib.filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
15- )
16- )
0017 ++ (lib.optional (builtins.isString config.i18n.extraLocales) config.i18n.extraLocales);
18in
19{
···48 default = "en_US.UTF-8";
49 example = "nl_NL.UTF-8";
50 description = ''
51- The default locale. It determines the language for program
52- messages, the format for dates and times, sort order, and so on.
53- It also determines the character set, such as UTF-8.
0000000054 '';
55 };
5657 extraLocales = lib.mkOption {
58 type = lib.types.either (lib.types.listOf lib.types.str) (lib.types.enum [ "all" ]);
59 default = [ ];
60- example = [ "nl_NL.UTF-8" ];
61 description = ''
62 Additional locales that the system should support, besides the ones
63 configured with {option}`i18n.defaultLocale` and
···74 LC_TIME = "de_DE.UTF-8";
75 };
76 description = ''
77- A set of additional system-wide locale settings other than
78- `LANG` which can be configured with
79- {option}`i18n.defaultLocale`.
00000000000000080 '';
81 };
82
···5 ...
6}:
7let
8+ sanitizeUTF8Capitalization =
9+ lang: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] lang);
10 aggregatedLocales =
11+ [
12+ "${config.i18n.defaultLocale}/${config.i18n.defaultCharset}"
13+ ]
14+ ++ lib.pipe config.i18n.extraLocaleSettings [
15+ (lib.mapAttrs (n: v: (sanitizeUTF8Capitalization v)))
16+ (lib.mapAttrsToList (LCRole: lang: lang + "/" + (config.i18n.localeCharsets.${LCRole} or "UTF-8")))
17+ ]
18+ ++ (builtins.map sanitizeUTF8Capitalization (
19+ lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales
20+ ))
21 ++ (lib.optional (builtins.isString config.i18n.extraLocales) config.i18n.extraLocales);
22in
23{
···52 default = "en_US.UTF-8";
53 example = "nl_NL.UTF-8";
54 description = ''
55+ The default locale. It determines the language for program messages,
56+ the format for dates and times, sort order, and so on. Setting the
57+ default character set is done via {option}`i18n.defaultCharset`.
58+ '';
59+ };
60+ defaultCharset = lib.mkOption {
61+ type = lib.types.str;
62+ default = "UTF-8";
63+ example = "ISO-8859-8";
64+ description = ''
65+ The default locale character set.
66 '';
67 };
6869 extraLocales = lib.mkOption {
70 type = lib.types.either (lib.types.listOf lib.types.str) (lib.types.enum [ "all" ]);
71 default = [ ];
72+ example = [ "nl_NL.UTF-8/UTF-8" ];
73 description = ''
74 Additional locales that the system should support, besides the ones
75 configured with {option}`i18n.defaultLocale` and
···86 LC_TIME = "de_DE.UTF-8";
87 };
88 description = ''
89+ A set of additional system-wide locale settings other than `LANG`
90+ which can be configured with {option}`i18n.defaultLocale`. Note that
91+ the `/UTF-8` suffix used in {option}`i18n.extraLocales` indicates a
92+ character set, and it must not be added manually here. To use a
93+ non-`UTF-8` character set such as ISO-XXXX-8, the
94+ {option}`i18n.localeCharsets` can be used.
95+ '';
96+ };
97+ localeCharsets = lib.mkOption {
98+ type = lib.types.attrsOf lib.types.str;
99+ default = { };
100+ example = {
101+ LC_MESSAGES = "ISO-8859-15";
102+ LC_TIME = "ISO-8859-1";
103+ };
104+ description = ''
105+ Per each {option}`i18n.extraLocaleSettings`, choose the character set
106+ to use for it. Essentially defaults to UTF-8 for all of them.
107 '';
108 };
109
···991 libbitcoin-protocol = throw "libbitcoin-protocol has been removed as it required an obsolete version of Boost and had no maintainer in Nixpkgs"; # Added 2024-11-24
992 libchop = throw "libchop has been removed due to failing to build and being unmaintained upstream"; # Added 2025-05-02
993 libdwg = throw "libdwg has been removed as upstream is unmaintained, the code doesn't build without significant patches, and the package had no reverse dependencies"; # Added 2024-12-28
0994 libgadu = throw "'libgadu' has been removed as upstream is unmaintained and has no dependents or maintainers in Nixpkgs"; # Added 2025-05-17
995 libgcrypt_1_8 = throw "'libgcrypt_1_8' is end-of-life. Consider using 'libgcrypt' instead"; # Added 2025-01-05
996 libgda = lib.warnOnInstantiate "‘libgda’ has been renamed to ‘libgda5’" libgda5; # Added 2025-01-21
···991 libbitcoin-protocol = throw "libbitcoin-protocol has been removed as it required an obsolete version of Boost and had no maintainer in Nixpkgs"; # Added 2024-11-24
992 libchop = throw "libchop has been removed due to failing to build and being unmaintained upstream"; # Added 2025-05-02
993 libdwg = throw "libdwg has been removed as upstream is unmaintained, the code doesn't build without significant patches, and the package had no reverse dependencies"; # Added 2024-12-28
994+ libfpx = throw "libfpx has been removed as it was unmaintained in Nixpkgs and had known vulnerabilities"; # Added 2025-05-20
995 libgadu = throw "'libgadu' has been removed as upstream is unmaintained and has no dependents or maintainers in Nixpkgs"; # Added 2025-05-17
996 libgcrypt_1_8 = throw "'libgcrypt_1_8' is end-of-life. Consider using 'libgcrypt' instead"; # Added 2025-01-05
997 libgda = lib.warnOnInstantiate "‘libgda’ has been renamed to ‘libgda5’" libgda5; # Added 2025-01-21