Warping to a target window's center selects the wrong window when a smaller one covers that center: slurp keeps highlighting the coverer, so Tab could never leave it. Navigation now warps to the most central point that resolves back to the target, and skips windows that hovering could not reach either. Unbinding the picker's transient keys by name also took a same-key binding out of the user's own config with it; the bind handles are now kept and removed individually. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
115 lines
6.5 KiB
Lua
115 lines
6.5 KiB
Lua
o.bind("SUPER + SPACE", "Omarchy menu", "omarchy-menu toggle")
|
|
o.bind("SUPER + ALT + SPACE", "Apps menu", "omarchy-menu toggle apps")
|
|
o.bind("SUPER + CTRL + E", "Emojis", "omarchy-shell shell toggle omarchy.emojis")
|
|
o.bind("SUPER + CTRL + C", "Capture menu", "omarchy-menu toggle capture")
|
|
o.bind("SUPER + CTRL + O", "Toggle menu", "omarchy-menu toggle toggle")
|
|
o.bind("SUPER + CTRL + H", "Hardware menu", "omarchy-menu toggle hardware")
|
|
o.bind("SUPER + SHIFT + code:201", "Omarchy menu", "omarchy-menu toggle root")
|
|
o.bind("SUPER + ESCAPE", "System menu", "omarchy-menu toggle system")
|
|
o.bind("XF86PowerOff", "Power menu", "omarchy-menu toggle system", { locked = true })
|
|
o.bind("SUPER + K", "Show key bindings", "omarchy-menu-keybindings")
|
|
o.bind("SUPER + ALT + K", "Show Tmux key bindings", "omarchy-menu-tmux-keybindings")
|
|
o.bind("SUPER + CTRL + K", "Show Herdr key bindings", "omarchy-menu-herdr-keybindings")
|
|
o.bind("SUPER + CTRL + Q", "Calculator", "omacalc")
|
|
o.bind("XF86Calculator", "Calculator", "omacalc")
|
|
|
|
o.bind_toggle("SUPER + SHIFT + SPACE", "Toggle top bar", "bar")
|
|
o.bind("SUPER + CTRL + SPACE", "Background switcher", "omarchy-menu toggle background")
|
|
o.bind("SUPER + SHIFT + CTRL + SPACE", "Theme menu", "omarchy-menu toggle theme")
|
|
o.bind("SUPER + BACKSPACE", "Toggle window transparency", "omarchy-hyprland-window-transparency-toggle")
|
|
o.bind("SUPER + SHIFT + BACKSPACE", "Toggle window gaps", "omarchy-hyprland-window-gaps-toggle")
|
|
o.bind("SUPER + CTRL + BACKSPACE", "Toggle single-window square aspect", "omarchy-hyprland-window-single-square-aspect-toggle")
|
|
|
|
-- xkbcommon names the comma keysym "comma"; the upper-case "COMMA" does not match.
|
|
o.bind("SUPER + comma", "Dismiss last notification", "omarchy-shell notifications dismissOne")
|
|
o.bind("SUPER + SHIFT + comma", "Dismiss all notifications", "omarchy-shell notifications dismissAll")
|
|
o.bind_toggle("SUPER + CTRL + comma", "Toggle silencing notifications", "notification-silencing")
|
|
o.bind("SUPER + ALT + comma", "Invoke last notification", "omarchy-shell notifications invokeLast")
|
|
o.bind("SUPER + SHIFT + ALT + comma", "Open notification history", "omarchy-shell notifications showHistory")
|
|
|
|
o.bind_toggle("SUPER + CTRL + I", "Toggle locking on idle", "idle")
|
|
o.bind_toggle("SUPER + CTRL + N", "Toggle nightlight", "nightlight")
|
|
o.bind("SUPER + CTRL + Delete", "Toggle laptop display", "omarchy-hyprland-monitor-internal toggle")
|
|
o.bind("SUPER + CTRL + ALT + Delete", "Toggle laptop display mirroring", "omarchy-hyprland-monitor-internal-mirror toggle")
|
|
o.bind("switch:on:Lid Switch", nil, "omarchy-system-lid-close", { locked = true })
|
|
o.bind("switch:off:Lid Switch", nil, "omarchy-hyprland-monitor-clamshell", { locked = true })
|
|
|
|
o.bind("PRINT", "Screenshot", "omarchy-capture-screenshot")
|
|
o.bind("ALT + PRINT", "Screenrecording", "omarchy-capture-screenrecording --stop-recording || omarchy-menu toggle trigger.capture.screenrecord")
|
|
o.bind("SUPER + ALT + code:34", "Make webcam overlay smaller", "omarchy-capture-webcam-resize smaller")
|
|
o.bind("SUPER + ALT + code:35", "Make webcam overlay larger", "omarchy-capture-webcam-resize larger")
|
|
o.bind("SUPER + PRINT", "Color picker", "pkill hyprpicker || hyprpicker -a")
|
|
o.bind("SUPER + CTRL + PRINT", "Extract text (OCR) from screenshot", "omarchy-capture-text")
|
|
|
|
-- Keyboard control for the slurp region picker (see omarchy-capture-region).
|
|
-- The binds live exactly as long as a selection layer is on screen (slurp
|
|
-- opens one per monitor), so they cannot leak or get stuck.
|
|
-- Unbinding by key would take a same-key binding out of the user's own config
|
|
-- with it, so each handle is kept and removed individually.
|
|
local selection_layers = 0
|
|
local selection_binds = {}
|
|
|
|
hl.on("layer.opened", function(layer)
|
|
if layer.namespace == "selection" then
|
|
selection_layers = selection_layers + 1
|
|
if selection_layers == 1 then
|
|
selection_binds = {
|
|
hl.bind("RETURN", hl.dsp.exec_cmd("omarchy-capture-region --take-window"), { description = "Capture highlighted window" }),
|
|
hl.bind("CTRL + RETURN", hl.dsp.exec_cmd("omarchy-capture-region --take-fullscreen"), { description = "Capture entire screen" }),
|
|
hl.bind("TAB", hl.dsp.exec_cmd("omarchy-capture-region --select-window next"), { description = "Select next window to capture" }),
|
|
hl.bind("CTRL + TAB", hl.dsp.exec_cmd("omarchy-capture-region --select-window prev"), { description = "Select previous window to capture" }),
|
|
}
|
|
for _, direction in ipairs({ "left", "right", "up", "down" }) do
|
|
table.insert(
|
|
selection_binds,
|
|
hl.bind(direction:upper(), hl.dsp.exec_cmd("omarchy-capture-region --select-window " .. direction), { description = "Select window to capture" })
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
hl.on("layer.closed", function(layer)
|
|
if layer.namespace == "selection" and selection_layers > 0 then
|
|
selection_layers = selection_layers - 1
|
|
if selection_layers == 0 then
|
|
for _, keybind in ipairs(selection_binds) do
|
|
keybind:unbind()
|
|
end
|
|
selection_binds = {}
|
|
end
|
|
end
|
|
end)
|
|
|
|
o.bind("SUPER + CTRL + S", "Share", "omarchy-menu toggle share")
|
|
|
|
o.bind("SUPER + CTRL + PERIOD", "Transcode", "omarchy-transcode")
|
|
|
|
o.bind("SUPER + CTRL + R", "Set reminder", "omarchy-menu toggle reminder-set")
|
|
o.bind("SUPER + CTRL + ALT + R", "Show reminders", "omarchy-reminder show")
|
|
o.bind("SUPER + SHIFT + CTRL + R", "Clear reminders", "omarchy-reminder clear")
|
|
|
|
o.bind("SUPER + CTRL + ALT + T", "Show time", "omarchy-notification-time")
|
|
o.bind("SUPER + CTRL + ALT + B", "Show battery remaining", "omarchy-notification-battery")
|
|
o.bind("SUPER + CTRL + ALT + W", "Toggle weather", "omarchy-notification-weather")
|
|
|
|
o.bind("SUPER + SHIFT + CTRL + A", "Agent", "omarchy-launch-agent")
|
|
o.bind("SUPER + CTRL + A", "Audio", "omarchy-shell shell toggle omarchy.audio")
|
|
o.bind("SUPER + CTRL + B", "Bluetooth", "omarchy-shell shell toggle omarchy.bluetooth")
|
|
o.bind("SUPER + CTRL + D", "Display", "omarchy-shell shell toggle omarchy.monitor")
|
|
o.bind("SUPER + CTRL + ALT + D", "Calendar", "omarchy-shell shell toggle omarchy.clock")
|
|
o.bind("SUPER + CTRL + W", "Network", "omarchy-shell shell toggle omarchy.network")
|
|
o.bind("SUPER + CTRL + P", "Power", "omarchy-shell shell toggle omarchy.power")
|
|
o.bind("SUPER + CTRL + T", "Activity", { tui = "btop" })
|
|
|
|
o.bind("SUPER + CTRL + Z", "Zoom in", function()
|
|
local zoom = hl.get_config("cursor.zoom_factor") or 1
|
|
hl.config({ cursor = { zoom_factor = zoom + 1 } })
|
|
end)
|
|
|
|
o.bind("SUPER + CTRL + ALT + Z", "Reset zoom", function()
|
|
hl.config({ cursor = { zoom_factor = 1 } })
|
|
end)
|
|
|
|
o.bind("SUPER + CTRL + L", "Lock system", "omarchy-system-lock")
|