diff options
author | Weijia Wang <9713184+wegank@users.noreply.github.com> | 2022-08-02 20:39:08 +0200 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2023-06-05 20:43:17 +0000 |
commit | d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b (patch) | |
tree | 45b059b372d608742f2c0353ef283c4e35c99a9b /nixpkgs/nixos | |
parent | bf3aadfdd39aa197e18bade671fab6726349ffa4 (diff) | |
download | nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar.gz nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar.bz2 nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar.lz nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar.xz nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.tar.zst nixlib-d0d82595bf91d4b6d86a0e82e8fb2c490d3a069b.zip |
nixos/console: detect unicode properly
Diffstat (limited to 'nixpkgs/nixos')
-rw-r--r-- | nixpkgs/nixos/modules/config/console.nix | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/nixpkgs/nixos/modules/config/console.nix b/nixpkgs/nixos/modules/config/console.nix index 7bcbf54cedd6..493411d61836 100644 --- a/nixpkgs/nixos/modules/config/console.nix +++ b/nixpkgs/nixos/modules/config/console.nix @@ -8,14 +8,23 @@ let makeColor = i: concatMapStringsSep "," (x: "0x" + substring (2*i) 2 x); - isUnicode = hasSuffix "UTF-8" (toUpper config.i18n.defaultLocale); + isUnicode = '' \ + LOCALE_ARCHIVE=${config.i18n.glibcLocales}/lib/locale/locale-archive \ + LANG=${config.i18n.defaultLocale} \ + LC_IDENTIFICATION=${config.i18n.defaultLocale} \ + locale -k identification-codeset | grep -i UTF-8 \ + ''; optimizedKeymap = pkgs.runCommand "keymap" { - nativeBuildInputs = [ pkgs.buildPackages.kbd ]; + nativeBuildInputs = with pkgs.buildPackages; [ kbd locale ]; LOADKEYS_KEYMAP_PATH = "${consoleEnv pkgs.kbd}/share/keymaps/**"; preferLocalBuild = true; } '' - loadkeys -b ${optionalString isUnicode "-u"} "${cfg.keyMap}" > $out + if ${isUnicode} ; then + loadkeys -b -u "${cfg.keyMap}" > $out + else + loadkeys -b "${cfg.keyMap}" > $out + fi ''; # Sadly, systemd-vconsole-setup doesn't support binary keymaps. @@ -130,7 +139,7 @@ in }) (mkIf setVconsole (mkMerge [ - { environment.systemPackages = [ pkgs.kbd ]; + { environment.systemPackages = with pkgs; [ kbd locale ]; # Let systemd-vconsole-setup.service do the work of setting up the # virtual consoles. @@ -139,8 +148,13 @@ in environment.etc.kbd.source = "${consoleEnv pkgs.kbd}/share"; boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (mkBefore '' - kbd_mode ${if isUnicode then "-u" else "-a"} -C /dev/console - printf "\033%%${if isUnicode then "G" else "@"}" >> /dev/console + if ${isUnicode} ; then + kbd_mode -u -C /dev/console + printf "\033%%G" >> /dev/console + else + kbd_mode -a -C /dev/console + printf "\033%%@" >> /dev/console + fi loadkmap < ${optimizedKeymap} ${optionalString cfg.earlySetup '' |