From f86529c063a2135809c5e68788e670538508e285 Mon Sep 17 00:00:00 2001 From: chlorospingus Date: Wed, 13 May 2026 16:57:04 -0700 Subject: [PATCH] Make all hyprland binds submap universal --- hypr/hyprland/binds.lua | 172 +++++++++++++++++++++------------------- hypr/hyprland/rules.lua | 15 ++++ 2 files changed, 105 insertions(+), 82 deletions(-) diff --git a/hypr/hyprland/binds.lua b/hypr/hyprland/binds.lua index c0a9871..eea870f 100644 --- a/hypr/hyprland/binds.lua +++ b/hypr/hyprland/binds.lua @@ -1,8 +1,16 @@ --- Window management -hl.bind("SUPER + Q", hl.dsp.window.close()) +local function bind(keys, dispatcher, flags) + if flags == nil then + flags = {} + end + flags.submap_universal = true + hl.bind(keys, dispatcher, flags) +end -hl.bind("SUPER + M", hl.dsp.window.float()) -hl.bind("SUPER + M", function () +-- Window management +bind("SUPER + Q", hl.dsp.window.close()) + +bind("SUPER + M", hl.dsp.window.float()) +bind("SUPER + M", function () local monitor = hl.get_active_monitor() local window = hl.get_active_window() if (monitor == nil or window == nil) then return end @@ -13,30 +21,30 @@ hl.bind("SUPER + M", function () })) hl.dispatch(hl.dsp.window.center()) end) -hl.bind("SUPER + F", hl.dsp.window.fullscreen()) -hl.bind("SUPER + X", hl.dsp.layout("swapsplit")) -hl.bind("SUPER + B", hl.dsp.layout("togglesplit")) +bind("SUPER + F", hl.dsp.window.fullscreen()) +bind("SUPER + X", hl.dsp.layout("swapsplit")) +bind("SUPER + B", hl.dsp.layout("togglesplit")) -hl.bind("SUPER + SPACE", hl.dsp.global("quickshell:peek_bar")) -hl.bind("SUPER + SPACE", hl.dsp.global("quickshell:peek_bar"), {release = true}) -hl.bind("SUPER + SUPER_L", hl.dsp.exec_cmd("quickshell ipc call topbar toggle")) +bind("SUPER + SPACE", hl.dsp.global("quickshell:peek_bar")) +bind("SUPER + SPACE", hl.dsp.global("quickshell:peek_bar"), {release = true}) +bind("SUPER + SUPER_L", hl.dsp.exec_cmd("quickshell ipc call topbar toggle")) -- Move/resize windows -hl.bind("SUPER + H", hl.dsp.window.move({direction = "l"})) -hl.bind("SUPER + T", hl.dsp.window.move({direction = "u"})) -hl.bind("SUPER + N", hl.dsp.window.move({direction = "d"})) -hl.bind("SUPER + S", hl.dsp.window.move({direction = "r"})) -hl.bind("SUPER + ALT + H", hl.dsp.window.resize({x = -50, y = 0, relative = true}), +bind("SUPER + H", hl.dsp.window.move({direction = "l"})) +bind("SUPER + T", hl.dsp.window.move({direction = "u"})) +bind("SUPER + N", hl.dsp.window.move({direction = "d"})) +bind("SUPER + S", hl.dsp.window.move({direction = "r"})) +bind("SUPER + ALT + H", hl.dsp.window.resize({x = -50, y = 0, relative = true}), {repeating = true}) -hl.bind("SUPER + ALT + T", hl.dsp.window.resize({x = 0, y = -50, relative = true}), +bind("SUPER + ALT + T", hl.dsp.window.resize({x = 0, y = -50, relative = true}), {repeating = true}) -hl.bind("SUPER + ALT + N", hl.dsp.window.resize({x = 0, y = 50, relative = true}), +bind("SUPER + ALT + N", hl.dsp.window.resize({x = 0, y = 50, relative = true}), {repeating = true}) -hl.bind("SUPER + ALT + S", hl.dsp.window.resize({x = 50, y = 0, relative = true}), +bind("SUPER + ALT + S", hl.dsp.window.resize({x = 50, y = 0, relative = true}), {repeating = true}) -hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), ({mouse = true})) -hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), ({mouse = true})) +bind("SUPER + mouse:272", hl.dsp.window.drag(), ({mouse = true})) +bind("SUPER + mouse:273", hl.dsp.window.resize(), ({mouse = true})) -- Select windows ordered top to bottom, left to right local function select_window(n) @@ -72,59 +80,59 @@ local function swap_window(n) end end -hl.bind("SUPER + A", function() focus_window(1) end) -hl.bind("SUPER + O", function() focus_window(2) end) -hl.bind("SUPER + E", function() focus_window(3) end) -hl.bind("SUPER + U", function() focus_window(4) end) -hl.bind("SUPER + SHIFT + A", function() focus_window(5) end) -hl.bind("SUPER + SHIFT + O", function() focus_window(6) end) -hl.bind("SUPER + SHIFT + E", function() focus_window(7) end) -hl.bind("SUPER + SHIFT + U", function() focus_window(8) end) +bind("SUPER + A", function() focus_window(1) end) +bind("SUPER + O", function() focus_window(2) end) +bind("SUPER + E", function() focus_window(3) end) +bind("SUPER + U", function() focus_window(4) end) +bind("SUPER + SHIFT + A", function() focus_window(5) end) +bind("SUPER + SHIFT + O", function() focus_window(6) end) +bind("SUPER + SHIFT + E", function() focus_window(7) end) +bind("SUPER + SHIFT + U", function() focus_window(8) end) -hl.bind("SUPER + ALT + A", function() swap_window(1) end) -hl.bind("SUPER + ALT + O", function() swap_window(2) end) -hl.bind("SUPER + ALT + E", function() swap_window(3) end) -hl.bind("SUPER + ALT + U", function() swap_window(4) end) -hl.bind("SUPER + ALT + SHIFT + A", function() swap_window(5) end) -hl.bind("SUPER + ALT + SHIFT + O", function() swap_window(6) end) -hl.bind("SUPER + ALT + SHIFT + E", function() swap_window(7) end) -hl.bind("SUPER + ALT + SHIFT + U", function() swap_window(8) end) +bind("SUPER + ALT + A", function() swap_window(1) end) +bind("SUPER + ALT + O", function() swap_window(2) end) +bind("SUPER + ALT + E", function() swap_window(3) end) +bind("SUPER + ALT + U", function() swap_window(4) end) +bind("SUPER + ALT + SHIFT + A", function() swap_window(5) end) +bind("SUPER + ALT + SHIFT + O", function() swap_window(6) end) +bind("SUPER + ALT + SHIFT + E", function() swap_window(7) end) +bind("SUPER + ALT + SHIFT + U", function() swap_window(8) end) -- Workspaces -hl.bind("SUPER + 1", hl.dsp.focus({workspace = 1})) -hl.bind("SUPER + 2", hl.dsp.focus({workspace = 2})) -hl.bind("SUPER + 3", hl.dsp.focus({workspace = 3})) -hl.bind("SUPER + 4", hl.dsp.focus({workspace = 4})) -hl.bind("SUPER + 5", hl.dsp.focus({workspace = 5})) -hl.bind("SUPER + 6", hl.dsp.focus({workspace = 6})) -hl.bind("SUPER + 7", hl.dsp.focus({workspace = 7})) -hl.bind("SUPER + 8", hl.dsp.focus({workspace = 8})) -hl.bind("SUPER + 9", hl.dsp.focus({workspace = 9})) +bind("SUPER + 1", hl.dsp.focus({workspace = 1})) +bind("SUPER + 2", hl.dsp.focus({workspace = 2})) +bind("SUPER + 3", hl.dsp.focus({workspace = 3})) +bind("SUPER + 4", hl.dsp.focus({workspace = 4})) +bind("SUPER + 5", hl.dsp.focus({workspace = 5})) +bind("SUPER + 6", hl.dsp.focus({workspace = 6})) +bind("SUPER + 7", hl.dsp.focus({workspace = 7})) +bind("SUPER + 8", hl.dsp.focus({workspace = 8})) +bind("SUPER + 9", hl.dsp.focus({workspace = 9})) -hl.bind("SUPER + SHIFT + 1", hl.dsp.window.move({workspace = 1, follow = true})) -hl.bind("SUPER + SHIFT + 2", hl.dsp.window.move({workspace = 2, follow = true})) -hl.bind("SUPER + SHIFT + 3", hl.dsp.window.move({workspace = 3, follow = true})) -hl.bind("SUPER + SHIFT + 4", hl.dsp.window.move({workspace = 4, follow = true})) -hl.bind("SUPER + SHIFT + 5", hl.dsp.window.move({workspace = 5, follow = true})) -hl.bind("SUPER + SHIFT + 6", hl.dsp.window.move({workspace = 6, follow = true})) -hl.bind("SUPER + SHIFT + 7", hl.dsp.window.move({workspace = 7, follow = true})) -hl.bind("SUPER + SHIFT + 8", hl.dsp.window.move({workspace = 8, follow = true})) -hl.bind("SUPER + SHIFT + 9", hl.dsp.window.move({workspace = 9, follow = true})) +bind("SUPER + SHIFT + 1", hl.dsp.window.move({workspace = 1, follow = true})) +bind("SUPER + SHIFT + 2", hl.dsp.window.move({workspace = 2, follow = true})) +bind("SUPER + SHIFT + 3", hl.dsp.window.move({workspace = 3, follow = true})) +bind("SUPER + SHIFT + 4", hl.dsp.window.move({workspace = 4, follow = true})) +bind("SUPER + SHIFT + 5", hl.dsp.window.move({workspace = 5, follow = true})) +bind("SUPER + SHIFT + 6", hl.dsp.window.move({workspace = 6, follow = true})) +bind("SUPER + SHIFT + 7", hl.dsp.window.move({workspace = 7, follow = true})) +bind("SUPER + SHIFT + 8", hl.dsp.window.move({workspace = 8, follow = true})) +bind("SUPER + SHIFT + 9", hl.dsp.window.move({workspace = 9, follow = true})) -- Multi-monitor -hl.bind("SUPER + PERIOD", hl.dsp.focus({monitor = -1})) -hl.bind("SUPER + P", hl.dsp.workspace.move({monitor = -1})) +bind("SUPER + PERIOD", hl.dsp.focus({monitor = -1})) +bind("SUPER + P", hl.dsp.workspace.move({monitor = -1})) -- Screen locking -hl.bind("SUPER + ESCAPE", hl.dsp.exec_cmd("~/.config/scripts/lock.sh"), {locked = true}) -hl.bind("XF86Go", hl.dsp.exec_cmd("~/.config/scripts/idle-toggle.sh")) -hl.bind("switch:on:Lid Switch", hl.dsp.exec_cmd( +bind("SUPER + ESCAPE", hl.dsp.exec_cmd("~/.config/scripts/lock.sh"), {locked = true}) +bind("XF86Go", hl.dsp.exec_cmd("~/.config/scripts/idle-toggle.sh")) +bind("switch:on:Lid Switch", hl.dsp.exec_cmd( "quickshell ipc call lock instalock; sleep 0.5; systemctl suspend" )) -- Special workspace -hl.bind("SUPER + V", hl.dsp.workspace.toggle_special()) -hl.bind("SUPER + W", function () +bind("SUPER + V", hl.dsp.workspace.toggle_special()) +bind("SUPER + W", function () if hl.get_active_special_workspace() == nil then hl.dispatch(hl.dsp.window.move({workspace = "special"})) else @@ -133,46 +141,46 @@ hl.bind("SUPER + W", function () end) -- Adjust brightness -hl.bind( +bind( "XF86MonBrightnessUp", hl.dsp.global("quickshell:increase_brightness"), {locked = true, repeating = true} ) -hl.bind( +bind( "XF86MonBrightnessDown", hl.dsp.global("quickshell:decrease_brightness"), {locked = true, repeating = true} ) -hl.bind( +bind( "SHIFT + XF86MonBrightnessDown", hl.dsp.exec_cmd("brillo -S 0% -q -u 1000000"), {locked = true, repeating = true} ) -- Adjust volume and media -hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd( +bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd( "pactl set-sink-volume @DEFAULT_SINK@ +1%" )) -hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd( +bind("XF86AudioLowerVolume", hl.dsp.exec_cmd( "pactl set-sink-volume @DEFAULT_SINK@ -1%" )) -hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("quickshell ipc call osd open")) -hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("quickshell ipc call osd open")) -hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("playerctl next")) -hl.bind("XF86AudioMute", hl.dsp.exec_cmd("playerctl play-pause")) +bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("quickshell ipc call osd open")) +bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("quickshell ipc call osd open")) +bind("XF86AudioMicMute", hl.dsp.exec_cmd("playerctl next")) +bind("XF86AudioMute", hl.dsp.exec_cmd("playerctl play-pause")) -- Screen capturing -hl.bind("SUPER + COMMA", hl.dsp.exec_cmd( +bind("SUPER + COMMA", hl.dsp.exec_cmd( "pgrep slurp || hyprshot -o ~/Pictures/Screenshots -z -s -m region" )) -hl.bind("SUPER + ALT + COMMA", hl.dsp.exec_cmd( +bind("SUPER + ALT + COMMA", hl.dsp.exec_cmd( "pgrep slurp || hyprshot -o ~/Pictures/Screenshots -z -s -m window" )) -hl.bind("SUPER + SHIFT + COMMA", hl.dsp.exec_cmd( +bind("SUPER + SHIFT + COMMA", hl.dsp.exec_cmd( "pgrep slurp || hyprshot -o ~/Pictures/Screenshots -z -s -m active -m output" )) local zoom = false -hl.bind("SUPER + SEMICOLON", function () +bind("SUPER + SEMICOLON", function () if zoom then hl.config({cursor = {zoom_factor = 1.0}}) zoom = false @@ -181,13 +189,13 @@ hl.bind("SUPER + SEMICOLON", function () zoom = true end end) -hl.bind("SHIFT + XF86Display", hl.dsp.exec_cmd("~/.config/scripts/vnc-toggle.sh")) -hl.bind("XF86Display", hl.dsp.exec_cmd("pkill -x quickshell; quickshell")) -hl.bind("SUPER + D", hl.dsp.exec_cmd("wayscriber --active")) -hl.bind("SUPER + SHIFT + D", hl.dsp.exec_cmd("wl-paste | satty -f -")) +bind("SHIFT + XF86Display", hl.dsp.exec_cmd("~/.config/scripts/vnc-toggle.sh")) +bind("XF86Display", hl.dsp.exec_cmd("pkill -x quickshell; quickshell")) +bind("SUPER + D", hl.dsp.exec_cmd("wayscriber --active")) +bind("SUPER + SHIFT + D", hl.dsp.exec_cmd("wl-paste | satty -f -")) -- Open favourites -hl.bind("SUPER + G", hl.dsp.exec_cmd("zen-browser")) -hl.bind("SUPER + C", hl.dsp.exec_cmd("vesktop")) -hl.bind("SUPER + R", hl.dsp.exec_cmd("keepassxc")) -hl.bind("SUPER + L", hl.dsp.exec_cmd("kitty")) +bind("SUPER + G", hl.dsp.exec_cmd("zen-browser")) +bind("SUPER + C", hl.dsp.exec_cmd("vesktop")) +bind("SUPER + R", hl.dsp.exec_cmd("keepassxc")) +bind("SUPER + L", hl.dsp.exec_cmd("kitty")) diff --git a/hypr/hyprland/rules.lua b/hypr/hyprland/rules.lua index 6d71cad..f61470a 100644 --- a/hypr/hyprland/rules.lua +++ b/hypr/hyprland/rules.lua @@ -55,3 +55,18 @@ hl.window_rule({ float = true, size = { "monitor_w*0.95", "monitor_h*0.95"} }) + +hl.on("window.active", function(window, active) + if window ~= nil and window.class ~= nil and window.class:find("zen") == 1 then + hl.dispatch(hl.dsp.submap("zen")) + else + hl.dispatch(hl.dsp.submap("reset")) + end +end) + +hl.define_submap("zen", function() + hl.bind("ALT + ALT_L", hl.dsp.send_key_state({mods = "ALT", key = "F12", state = "down"}), {release = true}) + -- hl.bind("ALT + ALT_L", hl.dsp.send_shortcut({mods = "ALT", key = "SPACE", state = "down"}), {release = true}) + hl.bind("ALT + N", hl.dsp.send_shortcut({mods = "CTRL", key = "TAB"})) + hl.bind("ALT + T", hl.dsp.send_shortcut({mods = "CTRL + SHIFT", key = "TAB"})) +end)