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>
76 lines
2.1 KiB
Lua
76 lines
2.1 KiB
Lua
-- https://wiki.hypr.land/Configuring/Basics/Variables/#input
|
|
|
|
local function read_vconsole()
|
|
local values = {}
|
|
local file = io.open("/etc/vconsole.conf", "r")
|
|
if not file then
|
|
return values
|
|
end
|
|
|
|
for line in file:lines() do
|
|
local key, value = line:match("^%s*([%w_]+)%s*=%s*(.-)%s*$")
|
|
if key and value then
|
|
value = value:gsub("%s+#.*$", "")
|
|
value = value:gsub('^"(.*)"$', "%1")
|
|
value = value:gsub("^'(.*)'$", "%1")
|
|
values[key] = value
|
|
end
|
|
end
|
|
|
|
file:close()
|
|
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 kb_layout = vconsole.XKBLAYOUT or "us"
|
|
local kb_variant = vconsole.XKBVARIANT or ""
|
|
local kb_options = "compose:caps,shift:both_capslock"
|
|
|
|
-- 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 = kb_layout,
|
|
kb_variant = kb_variant,
|
|
kb_model = "",
|
|
kb_options = kb_options,
|
|
kb_rules = "",
|
|
follow_mouse = 1,
|
|
sensitivity = 0,
|
|
|
|
repeat_rate = 40,
|
|
repeat_delay = 250,
|
|
numlock_by_default = true,
|
|
|
|
touchpad = {
|
|
natural_scroll = false,
|
|
clickfinger_behavior = true,
|
|
scroll_factor = 0.4,
|
|
},
|
|
},
|
|
|
|
misc = {
|
|
key_press_enables_dpms = true,
|
|
mouse_move_enables_dpms = true,
|
|
},
|
|
})
|
|
|
|
-- Scroll nicely in the terminal.
|
|
o.window("(Alacritty|kitty|foot)", { scroll_touchpad = 1.5 })
|
|
o.window("com.mitchellh.ghostty", { scroll_touchpad = 0.2 })
|