aboutsummaryrefslogtreecommitdiff
path: root/.config/hypr/source/keybinds.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/hypr/source/keybinds.lua')
-rw-r--r--.config/hypr/source/keybinds.lua151
1 files changed, 151 insertions, 0 deletions
diff --git a/.config/hypr/source/keybinds.lua b/.config/hypr/source/keybinds.lua
new file mode 100644
index 0000000..d71cc01
--- /dev/null
+++ b/.config/hypr/source/keybinds.lua
@@ -0,0 +1,151 @@
+---------------------
+---- KEYBINDINGS ----
+---------------------
+-- See https://wiki.hypr.land/Configuring/Basics/Binds/ for more
+
+hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(terminal))
+hl.bind(mainMod .. " + SHIFT + X", hl.dsp.window.close())
+hl.bind(mainMod .. " + SHIFT + Q", hl.dsp.exit())
+hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }))
+hl.bind(mainMod .. " + SHIFT + F", hl.dsp.window.fullscreen({ mode = "maximized", action = "toggle" }))
+
+-- bind = $mainMod SHIFT, R, togglefloating,
+-- Smart Float: Toggle float -> Resize to 90% -> Center
+hl.bind(
+ mainMod .. "+ SHIFT + R",
+ hl.dsp.exec_cmd([[
+ if hyprctl activewindow | grep -q 'floating: 0'; then
+ W=$(hyprctl monitors -j | jq '.[] | select(.focused) | ((.width / .scale) * 0.9) | floor')
+ H=$(hyprctl monitors -j | jq '.[] | select(.focused) | ((.height / .scale) * 0.9) | floor')
+ hyprctl --batch "dispatch hl.dsp.window.float({action='set'}); dispatch hl.dsp.window.resize({x=${W}, y=${H}, relative=false})"
+ hyprctl dispatch "hl.dsp.window.center()"
+ else
+ hyprctl dispatch "hl.dsp.window.float({action='unset'})"
+ fi
+ ]]),
+ { description = "Smart Float" }
+)
+
+
+hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
+-- bind = $mainMod SHIFT, P, pseudo, # dwindle
+-- (left commented out to mirror the original file)
+hl.bind(mainMod .. " + Tab", hl.dsp.window.cycle_next({ next = false }), { repeating = true })
+hl.bind(mainMod .. " + b", hl.dsp.exec_cmd("killall waybar || waybar"))
+hl.bind(mainMod .. " + grave", hl.dsp.exec_cmd("fuzzelunicode"))
+hl.bind(mainMod .. " + escape", hl.dsp.exec_cmd("sysact"))
+
+-- Applications
+hl.bind(mainMod .. " + W", hl.dsp.exec_cmd(browser))
+hl.bind("PRINT", hl.dsp.exec_cmd("hypr_screenshot.sh"))
+hl.bind(mainMod .. " + SHIFT + P", hl.dsp.exec_cmd("hypr_screenshot.sh"))
+
+-- Music Controls
+hl.bind(mainMod .. " + m", hl.dsp.exec_cmd(terminal .. " -e zsh -i -c \"ncmpcpp\""))
+hl.bind(mainMod .. " + p", hl.dsp.exec_cmd("mpc toggle"))
+hl.bind(mainMod .. " + period", hl.dsp.exec_cmd("mpc seek +10"), { repeating = true })
+hl.bind(mainMod .. " + comma", hl.dsp.exec_cmd("mpc seek -10"), { repeating = true })
+hl.bind(mainMod .. " + SHIFT + period", hl.dsp.exec_cmd("mpc next"))
+hl.bind(mainMod .. " + SHIFT + comma", hl.dsp.exec_cmd("mpc prev"))
+
+-- Swap current focused window with master
+hl.bind(mainMod .. " + space", hl.dsp.layout("swapwithmaster"))
+
+-- Resize windows with h/j/k/l
+hl.bind(mainMod .. " + h", hl.dsp.window.resize({ x = -30, y = 0, relative = true}), { repeating = true })
+hl.bind(mainMod .. " + l", hl.dsp.window.resize({ x = 30, y = 0, relative = true}), { repeating = true })
+hl.bind(mainMod .. " + k", hl.dsp.window.resize({ x = 0, y = -30, relative = true }), { repeating = true })
+hl.bind(mainMod .. " + j", hl.dsp.window.resize({ x = 0, y = 30, relative = true }), { repeating = true })
+
+
+-- -----------------------------------------------------
+-- Workspace switching
+-- -----------------------------------------------------
+
+for i = 1, 10 do
+ local key = i % 10 -- 10 maps to key 0
+
+ -- Switch to workspace
+ hl.bind(
+ mainMod .. " + " .. key,
+ hl.dsp.focus({ workspace = i })
+ )
+
+ -- Move active window to workspace
+ hl.bind(
+ mainMod .. " + SHIFT + " .. key,
+ hl.dsp.window.move({ workspace = i, follow = false })
+ )
+end
+
+-- Example special workspace (scratchpad)
+hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
+hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
+
+-- Scratchpad like DWM
+hl.workspace_rule({ workspace = "special:h", on_created_empty = terminal })
+hl.bind(mainMod .. " + SHIFT + Return", hl.dsp.workspace.toggle_special("h"))
+
+-- --- Accessibility: Zoom ---
+hl.config({ cursor = { zoom_disable_aa = true } })
+
+hl.bind(
+ "SUPER + equal",
+ function()
+ local z = hl.get_config("cursor.zoom_factor")
+ hl.config({ cursor = { zoom_factor = z * 1.25 } })
+ end,
+ { description = "Zoom In", repeating = true }
+)
+
+hl.bind(
+ "SUPER + minus",
+ function()
+ local z = hl.get_config("cursor.zoom_factor")
+ local nz = z / 1.25
+ if nz < 1.0 then nz = 1.0 end
+ hl.config({ cursor = { zoom_factor = nz } })
+ end,
+ { description = "Zoom Out", repeating = true }
+)
+
+hl.bind(
+ "SUPER + BACKSPACE",
+ function()
+ hl.config({ cursor = { zoom_factor = 1.0 } })
+ end,
+ { description = "Reset Zoom", locked = true }
+)
+
+-- Screen Rotate
+hl.bind(mainMod .. " + CTRL + comma", hl.dsp.exec_cmd("hypr_screen_rotate.sh +90"),
+ { locked = true, desc = "Rotate Screen Anti-Clockwise" })
+hl.bind(mainMod .. " + CTRL + period", hl.dsp.exec_cmd("hypr_screen_rotate.sh -90"),
+ { locked = true, desc = "Rotate Screen Clockwise" })
+
+-- --- Hyprshade (Visual Filters) ---
+hl.bind(mainMod .. " + CTRL + S", hl.dsp.exec_cmd("hypr_shader_menu.sh"), { desc = "Shader Menu" })
+hl.bind(mainMod .. " + CTRL + X", hl.dsp.exec_cmd("hyprshade off"), { locked = true, desc = "Disable Shader" })
+hl.bind(mainMod .. " + CTRL + V", hl.dsp.exec_cmd("hyprshade on vibrance"), { locked = true, desc = "Vibrant Shader" })
+
+-- Scroll through existing workspaces with mainMod + scroll
+hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
+hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
+
+-- Move/resize windows with mainMod + LMB/RMB and dragging
+hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
+hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
+
+-- Laptop multimedia keys for volume and LCD brightness
+hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
+hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
+hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("~/.local/bin/brictl -"), { locked = true, repeating = true })
+hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("~/.local/bin/brictl +"), { locked = true, repeating = true })
+
+-- Requires playerctl
+hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
+hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
+hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })