Four things a Hyprland desktop can do that this one was not. Searching from the launcher needed no launcher work at all: Vicinae already models it, so this is a script command with one percent-encoded argument. Make it the fallback command and anything typed that matches nothing else offers to search it. Bangs come free -- they are a property of where the query is sent, not of the launcher -- so !yt reaches YouTube without a line of bang parsing. Suggestions could not be a script command. They need a view that reacts as you type, which is an extension: TypeScript, compiled, querying the same endpoint Firefox's address bar uses. It debounces, and aborts the request in flight on every keystroke -- typing is faster than the network, and an older answer landing after a newer one leaves the list describing a query that is no longer on screen. A bang skips suggestions entirely, because Google has no useful guesses about "!yt". The engine is now written down twice, once in each. The contract pins that they agree, since searching from the fallback and searching from the suggestions reaching different places is the kind of wrong that looks fine. Gestures mirror GNOME: three fingers sideways for workspaces, up for the overview, down to dismiss it. Open and close rather than toggle both ways -- toggling means swiping up from an open overview closes it, which is not what the fingers meant. Hyprland reads gesture registrations at startup so they cannot be a setting, but distance and direction can be, and are. Window swallowing is off by default and a preference like every other misc setting here. A terminal that vanishes when you did not ask for it is confusing rather than broken, which is worse. Claude-Session: https://claude.ai/code/session_01Q84axqUE5inJhf5Jz9CFy1
72 lines
3.6 KiB
Lua
72 lines
3.6 KiB
Lua
-- ─────────────────────────────────────────────────────────────────────────────
|
|
-- Input
|
|
--
|
|
-- Deliberately GNOME-like: click-to-focus, no focus-follows-mouse, no mouse
|
|
-- acceleration changes. The goal is that muscle memory transfers untouched.
|
|
-- ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
local prefs = require("prefs")
|
|
|
|
hl.config({
|
|
input = {
|
|
kb_layout = prefs.get("keyboardLayout", "us"),
|
|
kb_variant = prefs.get("keyboardVariant", ""),
|
|
kb_model = "",
|
|
kb_options = prefs.get("keyboardOptions", "caps:escape_shifted_capslock"),
|
|
kb_rules = "",
|
|
|
|
numlock_by_default = prefs.get("numlockByDefault", true),
|
|
|
|
-- GNOME's defaults are 500ms delay / 33Hz repeat.
|
|
repeat_delay = prefs.get("keyRepeatDelay", 500),
|
|
repeat_rate = prefs.get("keyRepeatRate", 33),
|
|
|
|
-- 1 = FOLLOW. The window under the pointer takes focus. This comment
|
|
-- previously claimed 1 was "click to focus, GNOME's behavior", which
|
|
-- is the opposite of what Hyprland does -- `hyprctl descriptions` gives
|
|
-- map: [{"separate":3},{"detached":2},{"follow":1},{"disabled":0}],
|
|
-- so click-to-focus is 0. Changing the shipped value is a behavior
|
|
-- decision rather than a correction, so the value is left alone and
|
|
-- only the description is fixed; Settings exposes all four.
|
|
follow_mouse = prefs.getInt("followMouse", 1),
|
|
|
|
-- Softens follow_mouse: with this off, focus changes only when the
|
|
-- pointer crosses a window boundary, not on every movement inside one.
|
|
-- Still focus-follows-pointer, just less twitchy.
|
|
mouse_refocus = false,
|
|
|
|
-- Flat pointer response, no acceleration. Matters for gaming.
|
|
sensitivity = prefs.get("pointerSensitivity", 0),
|
|
accel_profile = "flat",
|
|
|
|
-- Clicking a floating window raises and focuses it.
|
|
float_switch_override_focus = 2,
|
|
},
|
|
})
|
|
|
|
-- ── Touchpad gestures ───────────────────────────────────────────────────────
|
|
--
|
|
-- GNOME's gestures, reproduced: three fingers sideways moves between
|
|
-- workspaces, three fingers up opens the overview, three fingers down closes
|
|
-- it. That is the same muscle memory the keybinds were built to preserve.
|
|
--
|
|
-- Registered unconditionally rather than behind a preference. Hyprland 0.56
|
|
-- dropped `gestures:workspace_swipe` in favour of this `gesture` keyword, and a
|
|
-- registration is read at config time -- so a toggle would need a reload to
|
|
-- take effect, which is worse than the nothing these cost on a machine with no
|
|
-- touchpad. What IS tunable at runtime lives in Settings: how far a swipe has
|
|
-- to travel, and which way round it goes.
|
|
--
|
|
-- open and close rather than toggle twice: with a toggle on both directions,
|
|
-- swiping up from an already-open overview would close it, and swiping down
|
|
-- would reopen it. GNOME does not do that, and neither does this.
|
|
local overview = function(fn)
|
|
return function() hl.exec_cmd("qs ipc call overview " .. fn) end
|
|
end
|
|
|
|
hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
|
hl.gesture({ fingers = 3, direction = "up", action = overview("open") })
|
|
hl.gesture({ fingers = 3, direction = "down", action = overview("close") })
|
|
|
|
return true
|