NixOS: Как детально настроить параметры локали? - PullRequest
1 голос
/ 03 октября 2019

На моем домашнем ноутбуке под управлением NixOS 19.03 в /etc/nixos/configuration.nix я использую настройки локали по умолчанию:

  i18n = {
    consoleFont = "Lat2-Terminus16";
    consoleKeyMap = "us";
    defaultLocale = "en_US.UTF-8";
  };

Это единственный известный мне способ управления настройками локали в NixOS, и он слишком широк. Я хочу более детальный контроль, чтобы я мог использовать смесь американского английского и колумбийского испанского. (Это следствие моей работы, а не личного выбора.) В частности, мне нужны эти настройки:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=es_CO.UTF-8
LC_TIME=es_CO.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=es_CO.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=es_CO.UTF-8
LC_NAME=es_CO.UTF-8
LC_ADDRESS=es_CO.UTF-8
LC_TELEPHONE=es_CO.UTF-8
LC_MEASUREMENT=es_CO.UTF-8
LC_IDENTIFICATION=es_CO.UTF-8
LC_ALL=

На рабочем столе (под управлением Ubuntu 18.04), если я оцениваю locale в bash, эточто я вижу. В моей домашней системе NixOS каждая из этих переменных либо установлена ​​на американский английский, либо ничего:

[jeff@jbb-dell:~/nix-jbb]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Я подумал, что, возможно, мне следует отредактировать /etc/locale.conf, скопировав в него настройки из моей рабочей системы. Но когда (в системе NixOS) я печатаю этот файл на экране, он не включает ни одну из перечисленных выше переменных, кроме LANG:

[jeff@jbb-dell:~/nix-jbb]$ cat /etc/locale.conf
LANG=en_US.UTF-8

[jeff@jbb-dell:~/nix-jbb]$

Поэтому другие переменные, такие как LC_NUMERIC, должныбыть настроенным где-то еще. Я беспокоюсь, что если я отредактирую /etc/locale.conf, я сломаю свою систему. Является ли редактирование этого файла правильным способом установки детальной информации о локали в NixOS? А если нет, то что?

1 Ответ

0 голосов
/ 03 октября 2019

Я никогда не видел настройки NixOS для этого, но я думаю, вы можете обойти это с помощью:

  services.xserver.displayManager = {
    sessionCommands = ''
      export LC_NUMERIC=es_CO.UTF-8
      export LC_TIME=es_CO.UTF-8
      export LC_MONETARY=es_CO.UTF-8
      export LC_PAPER=es_CO.UTF-8
      export LC_NAME=es_CO.UTF-8
      export LC_ADDRESS=es_CO.UTF-8
      export LC_TELEPHONE=es_CO.UTF-8
      export LC_MEASUREMENT=es_CO.UTF-8
      export LC_IDENTIFICATION=es_CO.UTF-8
    '';
  };

Это должно работать для всех ваших локальных (графических) сеансов. Если вы получаете доступ к этому компьютеру также с помощью ssh, вы можете добавить те же экспорты также к ~/.bashrc

Если вы не хотите, чтобы настройка была для всех пользователей, вы также можете добавить экспорт к ~/.xession вместо /etc/nixos/configuration.nix, как показано выше.

...