vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / config / i18n.nix
blob515805ef5b1be2018cfef29106993a6748c8f181
1 { config, lib, pkgs, ... }:
3   ###### interface
5   options = {
7     i18n = {
8       glibcLocales = lib.mkOption {
9         type = lib.types.path;
10         default = pkgs.glibcLocales.override {
11           allLocales = lib.any (x: x == "all") config.i18n.supportedLocales;
12           locales = config.i18n.supportedLocales;
13         };
14         defaultText = lib.literalExpression ''
15           pkgs.glibcLocales.override {
16             allLocales = lib.any (x: x == "all") config.i18n.supportedLocales;
17             locales = config.i18n.supportedLocales;
18           }
19         '';
20         example = lib.literalExpression "pkgs.glibcLocales";
21         description = ''
22           Customized pkg.glibcLocales package.
24           Changing this option can disable handling of i18n.defaultLocale
25           and supportedLocale.
26         '';
27       };
29       defaultLocale = lib.mkOption {
30         type = lib.types.str;
31         default = "en_US.UTF-8";
32         example = "nl_NL.UTF-8";
33         description = ''
34           The default locale.  It determines the language for program
35           messages, the format for dates and times, sort order, and so on.
36           It also determines the character set, such as UTF-8.
37         '';
38       };
40       extraLocaleSettings = lib.mkOption {
41         type = lib.types.attrsOf lib.types.str;
42         default = {};
43         example = { LC_MESSAGES = "en_US.UTF-8"; LC_TIME = "de_DE.UTF-8"; };
44         description = ''
45           A set of additional system-wide locale settings other than
46           `LANG` which can be configured with
47           {option}`i18n.defaultLocale`.
48         '';
49       };
51       supportedLocales = lib.mkOption {
52         type = lib.types.listOf lib.types.str;
53         default = lib.unique
54           (builtins.map (l: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8") (
55             [
56               "C.UTF-8"
57               "en_US.UTF-8"
58               config.i18n.defaultLocale
59             ] ++ (lib.attrValues (lib.filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
60           ));
61         defaultText = lib.literalExpression ''
62           lib.unique
63             (builtins.map (l: (lib.replaceStrings [ "utf8" "utf-8" "UTF8" ] [ "UTF-8" "UTF-8" "UTF-8" ] l) + "/UTF-8") (
64               [
65                 "C.UTF-8"
66                 "en_US.UTF-8"
67                 config.i18n.defaultLocale
68               ] ++ (lib.attrValues (lib.filterAttrs (n: v: n != "LANGUAGE") config.i18n.extraLocaleSettings))
69             ))
70         '';
71         example = ["en_US.UTF-8/UTF-8" "nl_NL.UTF-8/UTF-8" "nl_NL/ISO-8859-1"];
72         description = ''
73           List of locales that the system should support.  The value
74           `"all"` means that all locales supported by
75           Glibc will be installed.  A full list of supported locales
76           can be found at <https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/SUPPORTED>.
77         '';
78       };
80     };
82   };
85   ###### implementation
87   config = {
89     environment.systemPackages =
90       # We increase the priority a little, so that plain glibc in systemPackages can't win.
91       lib.optional (config.i18n.supportedLocales != []) (lib.setPrio (-1) config.i18n.glibcLocales);
93     environment.sessionVariables =
94       { LANG = config.i18n.defaultLocale;
95         LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
96       } // config.i18n.extraLocaleSettings;
98     systemd.globalEnvironment = lib.mkIf (config.i18n.supportedLocales != []) {
99       LOCALE_ARCHIVE = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
100     };
102     # ‘/etc/locale.conf’ is used by systemd.
103     environment.etc."locale.conf".source = pkgs.writeText "locale.conf"
104       ''
105         LANG=${config.i18n.defaultLocale}
106         ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "${n}=${v}") config.i18n.extraLocaleSettings)}
107       '';
109   };