-- Was: configs/binds.conf -- -- Translation notes (hyprlang -> Lua): -- bind = MOD, KEY, dispatcher, arg -> hl.bind("MOD + KEY", hl.dsp....) -- bindm -> { mouse = true } -- bindl -> { locked = true } -- binde -> { repeating = true } -- bindle -> { locked = true, repeating = true } -- killactive -> hl.dsp.window.close() -- fullscreen, 0 -> hl.dsp.window.fullscreen({ mode = "fullscreen" }) -- movefocus, l -> hl.dsp.focus({ direction = "left" }) -- movewindow, l -> hl.dsp.window.move({ direction = "left" }) -- workspace, N -> hl.dsp.focus({ workspace = N }) -- movetoworkspace, N -> hl.dsp.window.move({ workspace = N }) -- movetoworkspacesilent -> hl.dsp.window.move({ workspace = N, follow = false }) -- togglegroup -> hl.dsp.group.toggle() -- lockactivegroup,toggle-> hl.dsp.group.lock_active({ action = "toggle" }) -- changegroupactive -> hl.dsp.group.next() -- resizeactive, X Y -> hl.dsp.window.resize({ x = X, y = Y, relative = true }) -- submap -> hl.dsp.submap() + hl.define_submap() -- bare numeric keys (20/21/23) were keycodes -> "code:20" etc. local vars = require("configs.vars") local apps = require("configs.apps") local mainMod = vars.mods.main -- SUPER local altMod = vars.mods.alt -- ALT local altrMod = vars.mods.altr -- SUPER + MOD5 local scripts = vars.paths.scripts local launcher = vars.paths.launcher local launch = scripts .. "/launch_app " ---------------------- ---- APPLICATIONS ---- ---------------------- hl.bind(mainMod .. " + S", hl.dsp.exec_cmd(launch .. apps.browser)) hl.bind(mainMod .. " + V", hl.dsp.exec_cmd(launch .. apps.ide)) hl.bind(mainMod .. " + O", hl.dsp.exec_cmd(launch .. apps.office_suite)) hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(launch .. apps.file_manager)) hl.bind(mainMod .. " + C", hl.dsp.exec_cmd(launch .. apps.terminal)) hl.bind(mainMod .. " + SHIFT + C", hl.dsp.exec_cmd(launch .. apps.terminal .. " docker exec -it yocto zsh")) hl.bind(altMod .. " + C", hl.dsp.exec_cmd(launch .. apps.terminal .. " ssh Hetzner")) hl.bind(altMod .. " + SHIFT + C", hl.dsp.exec_cmd(launch .. apps.terminal .. " docker exec -it ros2 zsh")) hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(launch .. "element-desktop")) hl.bind(mainMod .. " + M", hl.dsp.exec_cmd(launch .. "thunderbird")) ---- Notifications Menu hl.bind(mainMod .. " + N", hl.dsp.exec_cmd(apps.notifications_toggle)) hl.bind(mainMod .. " + SHIFT + N", hl.dsp.exec_cmd(apps.notifications_read)) ---- Bar -- NOTE: in binds.conf, SUPER+SHIFT+R was bound twice (notifications reload and -- bar reload). hyprlang ran both; in Lua the later bind would shadow the -- earlier one, so both are dispatched explicitly here. hl.bind(mainMod .. " + SHIFT + R", function() hl.dispatch(hl.dsp.exec_cmd(apps.notifications_reload)) hl.dispatch(hl.dsp.exec_cmd(apps.bar_reload)) end) hl.bind(mainMod .. " + SHIFT + T", hl.dsp.exec_cmd(apps.bar_toggle)) ----------------------------- ---- PICKERS / LAUNCHERS ---- ----------------------------- hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(apps.launcher)) hl.bind(mainMod .. " + SHIFT + P", hl.dsp.exec_cmd(launcher .. "/wallpaper/wallpaper")) hl.bind(altMod .. " + P", hl.dsp.exec_cmd(launcher .. "/wireguard/wireguard_selection menu")) hl.bind(mainMod .. " + ESCAPE", hl.dsp.exec_cmd(launcher .. "/powermenu/powermenu")) hl.bind(mainMod .. " + Y", hl.dsp.exec_cmd(launcher .. "/clipboard/clipboard")) ---- Screenshots hl.bind(mainMod .. " + SHIFT + S", hl.dsp.exec_cmd("hyprshot -m window --clipboard-only")) hl.bind(altMod .. " + SHIFT + S", hl.dsp.exec_cmd("hyprshot -m region --clipboard-only")) ------------------ ---- PYPRLAND ---- ------------------ hl.bind(mainMod .. " + B", hl.dsp.exec_cmd("pypr toggle btop")) -- hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd("pypr toggle kitty")) hl.bind(mainMod .. " + P", hl.dsp.exec_cmd(scripts .. "/random_wallpaper")) ----------------- ---- WINDOWS ---- ----------------- ---- Basic Operations hl.bind(mainMod .. " + Q", hl.dsp.window.close()) hl.bind(altMod .. " + Q", hl.dsp.window.close()) hl.bind(mainMod .. " + W", hl.dsp.exec_cmd(scripts .. "/toggle_floating")) hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen" })) -- hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) ---- Mouse hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) ---- Focusing hl.bind(mainMod .. " + LEFT", hl.dsp.focus({ direction = "left" })) hl.bind(mainMod .. " + RIGHT", hl.dsp.focus({ direction = "right" })) hl.bind(mainMod .. " + UP", hl.dsp.focus({ direction = "up" })) hl.bind(mainMod .. " + DOWN", hl.dsp.focus({ direction = "down" })) ---- Moving hl.bind(altMod .. " + LEFT", hl.dsp.window.move({ direction = "left" })) hl.bind(altMod .. " + RIGHT", hl.dsp.window.move({ direction = "right" })) hl.bind(altMod .. " + UP", hl.dsp.window.move({ direction = "up" })) hl.bind(altMod .. " + DOWN", hl.dsp.window.move({ direction = "down" })) ---- Center and Split -- hl.bind(mainMod .. " + D", hl.dsp.layout("togglesplit")) ---- Group Control hl.bind(mainMod .. " + G", hl.dsp.group.toggle()) hl.bind(mainMod .. " + CTRL + G", hl.dsp.group.lock_active({ action = "toggle" })) hl.bind("ALT + TAB", hl.dsp.group.next()) ---- Resizing Windows (submap) hl.bind(mainMod .. " + code:23", hl.dsp.submap("resize")) -- keycode 23 = TAB hl.define_submap("resize", function() hl.bind("RIGHT", hl.dsp.window.resize({ x = 40, y = 0, relative = true }), { repeating = true }) hl.bind("LEFT", hl.dsp.window.resize({ x = -40, y = 0, relative = true }), { repeating = true }) hl.bind("UP", hl.dsp.window.resize({ x = 0, y = -40, relative = true }), { repeating = true }) hl.bind("DOWN", hl.dsp.window.resize({ x = 0, y = 40, relative = true }), { repeating = true }) hl.bind("ESCAPE", hl.dsp.submap("reset")) end) -------------------- ---- WORKSPACES ---- -------------------- -- 1-10 on mainMod, 11-20 on altMod, 21-30 on altrMod. -- Key 0 maps to the 10th workspace of each block. local wsBlocks = { { mod = mainMod, offset = 0 }, { mod = altMod, offset = 10 }, { mod = altrMod, offset = 20 }, } for _, block in ipairs(wsBlocks) do for i = 1, 10 do local key = i % 10 -- 10 -> key 0 local ws = block.offset + i -- Focus a workspace hl.bind(block.mod .. " + " .. key, hl.dsp.focus({ workspace = ws })) -- Move the active window to a workspace (following it) hl.bind(block.mod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = ws })) -- Move the active window to a workspace silently (staying put) hl.bind(block.mod .. " + CTRL + " .. key, hl.dsp.window.move({ workspace = ws, follow = false })) end end ---- Moving to other Workspace with Mouse Control hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "m-1" })) hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "m+1" })) --------------- ---- MEDIA ---- --------------- local locked = { locked = true } local lockrep = { locked = true, repeating = true } ---- Mute hl.bind(mainMod .. " + CTRL + mouse:280", hl.dsp.exec_cmd("swayosd-client --output-volume mute-toggle"), locked) -- Extra Up Button hl.bind("XF86AudioMute", hl.dsp.exec_cmd("swayosd-client --output-volume mute-toggle"), locked) hl.bind(mainMod .. " + CTRL + mouse:281", hl.dsp.exec_cmd("swayosd-client --input-volume mute-toggle"), locked) -- Extra Down Button hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("swayosd-client --input-volume mute-toggle"), locked) ---- Playback hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), locked) hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), locked) hl.bind(mainMod .. " + CTRL + mouse:282", hl.dsp.exec_cmd("playerctl play-pause"), locked) -- Extra Center Button hl.bind(mainMod .. " + CTRL + RETURN", hl.dsp.exec_cmd("playerctl play-pause"), locked) hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), locked) hl.bind(mainMod .. " + CTRL + mouse:275", hl.dsp.exec_cmd("playerctl previous"), locked) -- Extra Back Button hl.bind(mainMod .. " + CTRL + code:20", hl.dsp.exec_cmd("playerctl previous"), locked) -- Minus Key hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), locked) hl.bind(mainMod .. " + CTRL + mouse:276", hl.dsp.exec_cmd("playerctl next"), locked) -- Extra Forward Button hl.bind(mainMod .. " + CTRL + code:21", hl.dsp.exec_cmd("playerctl next"), locked) -- Plus Key ---- Output Volume hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("swayosd-client --output-volume +10"), lockrep) hl.bind(mainMod .. " + ALT + code:21", hl.dsp.exec_cmd("swayosd-client --output-volume raise"), lockrep) hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("swayosd-client --output-volume -10"), lockrep) hl.bind(mainMod .. " + ALT + code:20", hl.dsp.exec_cmd("swayosd-client --output-volume lower"), lockrep) ---- Input Volume -- NOTE: binds.conf had `XF86InputRaiseVolume` / `XF86InputLowerVolume` here. -- Those keysyms do not exist in xkbcommon (there is no XF86Input* family), so -- these two binds never did anything -- hyprlang accepted the line and silently -- ignored it, while hl.bind() validates the keysym and reports an error. -- They are left commented out; the SUPER+SHIFT binds below are the working ones. -- hl.bind("XF86InputRaiseVolume", hl.dsp.exec_cmd("swayosd-client --input-volume raise"), lockrep) -- hl.bind("XF86InputLowerVolume", hl.dsp.exec_cmd("swayosd-client --input-volume lower"), lockrep) hl.bind(mainMod .. " + SHIFT + code:21", hl.dsp.exec_cmd("swayosd-client --input-volume raise"), lockrep) hl.bind(mainMod .. " + SHIFT + code:20", hl.dsp.exec_cmd("swayosd-client --input-volume lower"), lockrep) ---- Brightness hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("swayosd-client --brightness +10"), lockrep) hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("swayosd-client --brightness -10"), lockrep) --------------- ---- OTHER ---- --------------- -- Color picker hl.bind(mainMod .. " + INSERT", hl.dsp.exec_cmd(scripts .. "/color_picker")) -- Disable anim, blur, etc hl.bind(mainMod .. " + F12", hl.dsp.exec_cmd(scripts .. "/performance")) -- Freeze active window hl.bind(mainMod .. " + H", hl.dsp.exec_cmd(scripts .. "/hyprfreeze -a")) -- Open Wikis -- hl.bind(mainMod .. " + F1", hl.dsp.exec_cmd("xdg-open https://wiki.hypr.land/")) -- Zoom -- hl.bind(mainMod .. " + SHIFT + mouse:276", hl.dsp.exec_cmd("hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 + 0.5}')")) -- hl.bind(mainMod .. " + SHIFT + mouse:275", hl.dsp.exec_cmd("hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor | awk '/^float.*/ {print $2 - 0.5}')")) -- Lock hl.bind(mainMod .. " + L", hl.dsp.exec_cmd("swaylock"))