1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
---------------------
---- 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
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 })
-- Clipboard menu (cliphist)
hl.bind(mainMod .. " + v", hl.dsp.exec_cmd("sh -c \"cliphist list | fuzzel --dmenu --with-nth 2 | cliphist decode | wl-copy\""))
-- -----------------------------------------------------
-- Workspace switching
-- -----------------------------------------------------
local mainMod = "SUPER"
for i = 1, smw.get_amount_of_workspaces() do
local n = tostring(i)
if n == "10" then n = "0" end -- Optional if you configured 10 workspaces: bind workspace 10 to SUPER + 0
-- Switch to the Nth workspace on the currently focused monitor.
hl.bind(mainMod .. " +" .. n, smw.workspace(n))
-- Move the active window to the Nth workspace on the currently focused monitor silently (no focus change).
hl.bind(mainMod .. " + SHIFT +" .. n, smw.move_to_workspace_silent(n))
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.py +90"),
{ locked = true, desc = "Rotate Screen Anti-Clockwise" })
hl.bind(mainMod .. " + CTRL + period", hl.dsp.exec_cmd("hypr_screen_rotate.py -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 })
|