Only lead with us when the layout can't type Latin letters

Prepending us whenever the layout wasn't already us would have demoted
every Latin layout — de, fr, dk — to a secondary group, so those users
would have booted into a US layout they never asked for. Latin layouts
resolve the default keysym bindings fine, so only the layouts that can't
type Latin letters need us in front. That list already exists for the
initramfs hook, and a test keeps the two copies in sync.

Also match on the first layout rather than looking for us anywhere in
the list: Hyprland resolves bindings against the leading entry, so
"il,us" needed the fix just as much as "il" did.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
David Heinemeier Hansson
2026-07-26 18:22:16 -07:00
co-authored by Claude Opus 5
parent b018719338
commit e232c99ffd
2 changed files with 102 additions and 9 deletions
+17 -9
View File
@@ -21,24 +21,32 @@ local function read_vconsole()
return values
end
-- Layouts that can't type Latin letters. Keep in sync with the list in
-- etc/mkinitcpio.conf.d/omarchy_hooks.conf.
local non_latin_layouts =
" af am ara bd bg by et ge gr il in iq ir kg kh kz la lk mk mm mn mv np rs ru sy th tj ua "
local vconsole = read_vconsole()
local layout = vconsole.XKBLAYOUT or "us"
local variant = vconsole.XKBVARIANT or ""
local kb_layout = vconsole.XKBLAYOUT or "us"
local kb_variant = vconsole.XKBVARIANT or ""
local kb_options = "compose:caps,shift:both_capslock"
-- Prepend 'us' so Omarchy's Latin-keysym bindings resolve — Hyprland matches
-- bindings against the first layout in kb_layout, not the currently active one.
if not (","..layout..","):find(",us,", 1, true) then
layout = "us," .. layout
variant = "," .. variant
-- Hyprland resolves keybindings against the first entry in kb_layout, not the
-- layout that's currently active, so Omarchy's Latin-keysym bindings (SUPER + W
-- and friends) only fire when a Latin layout leads. Installing with a non-Latin
-- one would otherwise leave the desktop unusable.
if non_latin_layouts:find(" " .. kb_layout:match("^[^,]*") .. " ", 1, true) then
kb_layout = "us," .. kb_layout
kb_variant = "," .. kb_variant
-- Reach the original layout with Left Alt + Right Alt.
kb_options = kb_options .. ",grp:alts_toggle"
end
hl.config({
input = {
kb_layout = layout,
kb_variant = variant,
kb_layout = kb_layout,
kb_variant = kb_variant,
kb_model = "",
kb_options = kb_options,
kb_rules = "",