about summary refs log tree commit diff
path: root/nixpkgs/nixos
diff options
context:
space:
mode:
authorWeijia Wang <9713184+wegank@users.noreply.github.com>2022-08-02 20:39:08 +0200
committerAlyssa Ross <hi@alyssa.is>2023-06-05 20:43:17 +0000
commitd0d82595bf91d4b6d86a0e82e8fb2c490d3a069b (patch)
tree45b059b372d608742f2c0353ef283c4e35c99a9b /nixpkgs/nixos
parentbf3aadfdd39aa197e18bade671fab6726349ffa4 (diff)
downloadnixlib-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.nix26
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 ''