nixos/graphical-desktop: avoid writing empty Option values to 00-keyboard.conf (#540934)

This commit is contained in:
Eman Resu
2026-07-15 13:08:39 +00:00
committed by GitHub
3 changed files with 41 additions and 11 deletions
@@ -22,17 +22,23 @@ in
config = lib.mkIf cfg.enable {
environment = {
# localectl looks into 00-keyboard.conf
etc."X11/xorg.conf.d/00-keyboard.conf".text = ''
Section "InputClass"
Identifier "Keyboard catchall"
MatchIsKeyboard "on"
Option "XkbModel" "${xcfg.xkb.model}"
Option "XkbLayout" "${xcfg.xkb.layout}"
Option "XkbOptions" "${xcfg.xkb.options}"
Option "XkbVariant" "${xcfg.xkb.variant}"
EndSection
'';
# systemd-localed looks into 00-keyboard.conf
# systemd-localed does not like if Option values are ""
etc."X11/xorg.conf.d/00-keyboard.conf".text =
let
optionLine =
name: value: lib.optionalString (value != null && value != "") ''Option "${name}" "${value}"'';
in
''
Section "InputClass"
Identifier "Keyboard catchall"
MatchIsKeyboard "on"
${optionLine "XkbModel" xcfg.xkb.model}
${optionLine "XkbLayout" xcfg.xkb.layout}
${optionLine "XkbOptions" xcfg.xkb.options}
${optionLine "XkbVariant" xcfg.xkb.variant}
EndSection
'';
systemPackages = with pkgs; [
nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
xdg-utils
+1
View File
@@ -1684,6 +1684,7 @@ in
systemd-journal = runTest ./systemd-journal.nix;
systemd-journal-gateway = runTest ./systemd-journal-gateway.nix;
systemd-journal-upload = runTest ./systemd-journal-upload.nix;
systemd-localed = runTest ./systemd-localed.nix;
systemd-lock-handler = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./systemd-lock-handler.nix;
systemd-machinectl = runTest ./systemd-machinectl.nix;
systemd-misc = runTest ./systemd-misc.nix;
+23
View File
@@ -0,0 +1,23 @@
{ lib, ... }:
{
name = "systemd-localed";
meta.maintainers = [ lib.maintainers.haansn08 ];
nodes.machine = { ... }: {
# we don't use services.xserver.enable because some window managers like
# niri rely on systemd-localed for the keyboard layout:
# https://niri-wm.github.io/niri/Configuration%3A-Input.html#layout
services.graphical-desktop.enable = true;
services.xserver.xkb.layout = "jp";
};
testScript = ''
machine.start()
machine.wait_for_unit("default.target")
machine.wait_for_unit("dbus.socket")
status, stdout = machine.execute("localectl")
t.assertIn("X11 Layout: jp", stdout)
'';
}