fix(sway): use the us(dvorak) variant, not a "dvorak" layout
Dvorak is a variant of the "us" XKB layout, not a layout of its own: there is no symbols/dvorak file, so "dvorak" fails to compile. In the greetd/cage greeter the keymap comes solely from XKB_DEFAULT_*, so the failure left the greeter with no keymap and therefore no keyboard input at all (mouse unaffected). Split it into XKB_DEFAULT_LAYOUT=us + XKB_DEFAULT_VARIANT=dvorak. The same mistake in the Sway session (home/sway.nix) was masked: the default us keymap compiled and the failing override was silently dropped, so the session ran QWERTY despite the dvorak setting. Use xkb_variant there too so it is actually Dvorak. console.keyMap = "dvorak" (workstation.nix) is unaffected -- that is a kbd console map, a separate subsystem where "dvorak" is valid. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -52,13 +52,17 @@ in
|
||||
# features.swayDesktop (e.g. EDaaS) keep plain TTY login.
|
||||
programs.regreet.enable = true;
|
||||
# cage reads the XKB_* environment at startup, so force the greeter onto the
|
||||
# same Dvorak layout as the console (workstation.nix) and the Sway session
|
||||
# (home/sway.nix) -- otherwise the password field would be QWERTY. This
|
||||
# overrides the greetd command regreet sets with mkDefault.
|
||||
# same Dvorak layout as the Sway session (home/sway.nix) -- otherwise the
|
||||
# password field would be QWERTY. Dvorak is the "us" layout's variant, NOT a
|
||||
# layout of its own: "dvorak" alone has no symbols/ file, so the keymap
|
||||
# fails to compile and the greeter ends up with no keyboard at all (the
|
||||
# greeter has no fallback, unlike a running Sway session). This overrides the
|
||||
# greetd command regreet sets with mkDefault.
|
||||
services.greetd.settings.default_session.command =
|
||||
let
|
||||
greeter = pkgs.writeShellScript "regreet-cage" ''
|
||||
export XKB_DEFAULT_LAYOUT=dvorak
|
||||
export XKB_DEFAULT_LAYOUT=us
|
||||
export XKB_DEFAULT_VARIANT=dvorak
|
||||
exec ${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.cage} -s -- ${lib.getExe config.programs.regreet.package}
|
||||
'';
|
||||
in
|
||||
|
||||
Reference in New Issue
Block a user