2014-04-14 16:26:48 +02:00
|
|
|
|
{ config, lib, pkgs, ... }:
|
2012-07-24 19:53:17 +02:00
|
|
|
|
|
2014-04-14 16:26:48 +02:00
|
|
|
|
with lib;
|
2009-03-06 13:25:38 +01:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
{
|
|
|
|
|
###### interface
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
options = {
|
2013-09-04 13:05:09 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
i18n = {
|
2017-02-02 07:58:32 +01:00
|
|
|
|
glibcLocales = mkOption {
|
|
|
|
|
type = types.path;
|
2022-08-26 11:26:24 +02:00
|
|
|
|
default = pkgs.glibcLocales.override {
|
2017-02-02 07:58:32 +01:00
|
|
|
|
allLocales = any (x: x == "all") config.i18n.supportedLocales;
|
|
|
|
|
locales = config.i18n.supportedLocales;
|
|
|
|
|
};
|
2021-11-26 01:16:05 +01:00
|
|
|
|
defaultText = literalExpression ''
|
2022-08-26 11:26:24 +02:00
|
|
|
|
pkgs.glibcLocales.override {
|
2021-11-26 01:16:05 +01:00
|
|
|
|
allLocales = any (x: x == "all") config.i18n.supportedLocales;
|
|
|
|
|
locales = config.i18n.supportedLocales;
|
|
|
|
|
}
|
|
|
|
|
'';
|
2021-10-03 18:06:03 +02:00
|
|
|
|
example = literalExpression "pkgs.glibcLocales";
|
2022-07-28 23:19:15 +02:00
|
|
|
|
description = lib.mdDoc ''
|
2017-02-02 07:58:32 +01:00
|
|
|
|
Customized pkg.glibcLocales package.
|
|
|
|
|
|
|
|
|
|
Changing this option can disable handling of i18n.defaultLocale
|
|
|
|
|
and supportedLocale.
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
defaultLocale = mkOption {
|
2013-10-30 17:37:45 +01:00
|
|
|
|
type = types.str;
|
2009-03-06 13:25:38 +01:00
|
|
|
|
default = "en_US.UTF-8";
|
|
|
|
|
example = "nl_NL.UTF-8";
|
2022-07-28 23:19:15 +02:00
|
|
|
|
description = lib.mdDoc ''
|
2009-03-06 13:25:38 +01:00
|
|
|
|
The default locale. It determines the language for program
|
|
|
|
|
messages, the format for dates and times, sort order, and so on.
|
|
|
|
|
It also determines the character set, such as UTF-8.
|
2013-10-30 17:37:45 +01:00
|
|
|
|
'';
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
|
|
|
|
|
2018-03-07 15:30:29 +01:00
|
|
|
|
extraLocaleSettings = mkOption {
|
|
|
|
|
type = types.attrsOf types.str;
|
|
|
|
|
default = {};
|
|
|
|
|
example = { LC_MESSAGES = "en_US.UTF-8"; LC_TIME = "de_DE.UTF-8"; };
|
2022-07-28 23:19:15 +02:00
|
|
|
|
description = lib.mdDoc ''
|
2018-03-07 15:30:29 +01:00
|
|
|
|
A set of additional system-wide locale settings other than
|
2022-07-28 23:19:15 +02:00
|
|
|
|
`LANG` which can be configured with
|
|
|
|
|
{option}`i18n.defaultLocale`.
|
2018-03-07 15:30:29 +01:00
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
2009-06-05 19:19:30 +02:00
|
|
|
|
supportedLocales = mkOption {
|
2013-10-30 17:37:45 +01:00
|
|
|
|
type = types.listOf types.str;
|
2022-07-06 18:33:21 +02:00
|
|
|
|
default = unique
|
|
|
|
|
(builtins.map (l: (replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8") (
|
2022-07-07 14:25:13 +02:00
|
|
|
|
[
|
|
|
|
|
"C.UTF-8"
|
2022-07-26 14:50:02 +02:00
|
|
|
|
"en_US.UTF-8"
|
2022-07-07 14:25:13 +02:00
|
|
|
|
config.i18n.defaultLocale
|
|
|
|
|
] ++ (attrValues (filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
|
2022-06-26 16:24:31 +02:00
|
|
|
|
));
|
|
|
|
|
defaultText = literalExpression ''
|
2022-07-06 18:33:21 +02:00
|
|
|
|
unique
|
|
|
|
|
(builtins.map (l: (replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8") (
|
2022-07-07 14:25:13 +02:00
|
|
|
|
[
|
|
|
|
|
"C.UTF-8"
|
|
|
|
|
config.i18n.defaultLocale
|
|
|
|
|
] ++ (attrValues (filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
|
2022-06-26 16:24:31 +02:00
|
|
|
|
))
|
|
|
|
|
'';
|
2009-06-05 19:19:30 +02:00
|
|
|
|
example = ["en_US.UTF-8/UTF-8" "nl_NL.UTF-8/UTF-8" "nl_NL/ISO-8859-1"];
|
2022-08-03 22:46:41 +02:00
|
|
|
|
description = lib.mdDoc ''
|
2009-06-05 19:19:30 +02:00
|
|
|
|
List of locales that the system should support. The value
|
2022-08-03 22:46:41 +02:00
|
|
|
|
`"all"` means that all locales supported by
|
2009-06-05 19:19:30 +02:00
|
|
|
|
Glibc will be installed. A full list of supported locales
|
2022-08-03 22:46:41 +02:00
|
|
|
|
can be found at <https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/SUPPORTED>.
|
2009-06-05 19:19:30 +02:00
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
2012-10-18 17:54:07 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
};
|
2012-10-18 17:54:07 +02:00
|
|
|
|
|
2009-03-06 13:25:38 +01:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
###### implementation
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
config = {
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2015-04-19 22:45:08 +02:00
|
|
|
|
environment.systemPackages =
|
2020-06-11 10:22:20 +02:00
|
|
|
|
# We increase the priority a little, so that plain glibc in systemPackages can't win.
|
|
|
|
|
optional (config.i18n.supportedLocales != []) (lib.setPrio (-1) config.i18n.glibcLocales);
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2014-06-13 17:56:46 +02:00
|
|
|
|
environment.sessionVariables =
|
2014-04-18 19:03:50 +02:00
|
|
|
|
{ LANG = config.i18n.defaultLocale;
|
|
|
|
|
LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
|
2018-03-07 15:30:29 +01:00
|
|
|
|
} // config.i18n.extraLocaleSettings;
|
2014-04-18 19:03:50 +02:00
|
|
|
|
|
2015-04-19 22:45:08 +02:00
|
|
|
|
systemd.globalEnvironment = mkIf (config.i18n.supportedLocales != []) {
|
2017-02-02 07:58:32 +01:00
|
|
|
|
LOCALE_ARCHIVE = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
2015-04-19 22:45:08 +02:00
|
|
|
|
};
|
2009-06-05 19:19:30 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
# ‘/etc/locale.conf’ is used by systemd.
|
2019-09-14 19:51:29 +02:00
|
|
|
|
environment.etc."locale.conf".source = pkgs.writeText "locale.conf"
|
|
|
|
|
''
|
|
|
|
|
LANG=${config.i18n.defaultLocale}
|
2021-01-24 10:19:10 +01:00
|
|
|
|
${concatStringsSep "\n" (mapAttrsToList (n: v: "${n}=${v}") config.i18n.extraLocaleSettings)}
|
2019-09-14 19:51:29 +02:00
|
|
|
|
'';
|
2012-07-24 19:53:17 +02:00
|
|
|
|
|
2013-09-04 13:05:09 +02:00
|
|
|
|
};
|
2009-03-06 13:25:38 +01:00
|
|
|
|
}
|