···374374 - `i18n.extraLocales` should now be the preferred way to install additional locales.
375375 - `i18n.supportedLocales` is now considered an implementation detail and will be hidden from the documentation. But the option will still continue to work.
376376 - `i18n.supportedLocales` will now trigger a warning when it omits any locale set in `i18n.defaultLocale`, `i18n.extraLocales` or `i18n.extraLocaleSettings`.
377377+ - 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.
377378378379- `titaniumenv`, `titanium`, and `titanium-alloy` have been removed due to lack of maintenance in Nixpkgs []{#sec-nixpkgs-release-25.05-incompatibilities-titanium-removed}.
379380
+2
nixos/doc/manual/release-notes/rl-2511.section.md
···18181919- The `services.polipo` module has been removed as `polipo` is unmaintained and archived upstream.
20202121+- `renovate` was updated to v40. See the [upstream release notes](https://github.com/renovatebot/renovate/releases/tag/40.0.0) for breaking changes.
2222+2123## Other Notable Changes {#sec-release-25.11-notable-changes}
22242325<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
+42-15
nixos/modules/config/i18n.nix
···55 ...
66}:
77let
88+ sanitizeUTF8Capitalization =
99+ lang: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] lang);
810 aggregatedLocales =
99- (builtins.map
1010- (l: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8")
1111- (
1212- [ config.i18n.defaultLocale ]
1313- ++ (lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales)
1414- ++ (lib.attrValues (lib.filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
1515- )
1616- )
1111+ [
1212+ "${config.i18n.defaultLocale}/${config.i18n.defaultCharset}"
1313+ ]
1414+ ++ lib.pipe config.i18n.extraLocaleSettings [
1515+ (lib.mapAttrs (n: v: (sanitizeUTF8Capitalization v)))
1616+ (lib.mapAttrsToList (LCRole: lang: lang + "/" + (config.i18n.localeCharsets.${LCRole} or "UTF-8")))
1717+ ]
1818+ ++ (builtins.map sanitizeUTF8Capitalization (
1919+ lib.optionals (builtins.isList config.i18n.extraLocales) config.i18n.extraLocales
2020+ ))
1721 ++ (lib.optional (builtins.isString config.i18n.extraLocales) config.i18n.extraLocales);
1822in
1923{
···4852 default = "en_US.UTF-8";
4953 example = "nl_NL.UTF-8";
5054 description = ''
5151- The default locale. It determines the language for program
5252- messages, the format for dates and times, sort order, and so on.
5353- It also determines the character set, such as UTF-8.
5555+ The default locale. It determines the language for program messages,
5656+ the format for dates and times, sort order, and so on. Setting the
5757+ default character set is done via {option}`i18n.defaultCharset`.
5858+ '';
5959+ };
6060+ defaultCharset = lib.mkOption {
6161+ type = lib.types.str;
6262+ default = "UTF-8";
6363+ example = "ISO-8859-8";
6464+ description = ''
6565+ The default locale character set.
5466 '';
5567 };
56685769 extraLocales = lib.mkOption {
5870 type = lib.types.either (lib.types.listOf lib.types.str) (lib.types.enum [ "all" ]);
5971 default = [ ];
6060- example = [ "nl_NL.UTF-8" ];
7272+ example = [ "nl_NL.UTF-8/UTF-8" ];
6173 description = ''
6274 Additional locales that the system should support, besides the ones
6375 configured with {option}`i18n.defaultLocale` and
···7486 LC_TIME = "de_DE.UTF-8";
7587 };
7688 description = ''
7777- A set of additional system-wide locale settings other than
7878- `LANG` which can be configured with
7979- {option}`i18n.defaultLocale`.
8989+ A set of additional system-wide locale settings other than `LANG`
9090+ which can be configured with {option}`i18n.defaultLocale`. Note that
9191+ the `/UTF-8` suffix used in {option}`i18n.extraLocales` indicates a
9292+ character set, and it must not be added manually here. To use a
9393+ non-`UTF-8` character set such as ISO-XXXX-8, the
9494+ {option}`i18n.localeCharsets` can be used.
9595+ '';
9696+ };
9797+ localeCharsets = lib.mkOption {
9898+ type = lib.types.attrsOf lib.types.str;
9999+ default = { };
100100+ example = {
101101+ LC_MESSAGES = "ISO-8859-15";
102102+ LC_TIME = "ISO-8859-1";
103103+ };
104104+ description = ''
105105+ Per each {option}`i18n.extraLocaleSettings`, choose the character set
106106+ to use for it. Essentially defaults to UTF-8 for all of them.
80107 '';
81108 };
82109
···991991 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
992992 libchop = throw "libchop has been removed due to failing to build and being unmaintained upstream"; # Added 2025-05-02
993993 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
994994+ libfpx = throw "libfpx has been removed as it was unmaintained in Nixpkgs and had known vulnerabilities"; # Added 2025-05-20
994995 libgadu = throw "'libgadu' has been removed as upstream is unmaintained and has no dependents or maintainers in Nixpkgs"; # Added 2025-05-17
995996 libgcrypt_1_8 = throw "'libgcrypt_1_8' is end-of-life. Consider using 'libgcrypt' instead"; # Added 2025-01-05
996997 libgda = lib.warnOnInstantiate "‘libgda’ has been renamed to ‘libgda5’" libgda5; # Added 2025-01-21