🔧 Where my dotfiles lives in harmony and peace, most of the time
1# Hyprland Configuration
2
3# Monitors - https://wiki.hyprland.org/Configuring/Monitors/
4source=~/.config/hypr/monitor.conf
5
6# Autostart Applications
7exec-once = uwsm app -- hypridle
8exec-once = uwsm app -- hyprpaper
9exec-once = uwsm app -- waybar
10exec-once = uwsm app -- mako
11exec-once = uwsm app -- nm-applet
12
13# Clipboard Manager
14exec-once = uwsm app -- wl-clip-persist --clipboard regular
15exec-once = uwsm app -- wl-paste --type text --watch cliphist store
16exec-once = uwsm app -- wl-paste --type image --watch cliphist store
17
18# Theme
19source=~/.config/hypr/frappe.conf
20
21# Programs
22$terminal = alacritty
23$fileManager = thunar
24$menu = fuzzel
25
26# Environment Variables
27env = EDITOR,code --wait
28env = ELECTRON_OZONE_PLATFORM_HINT,wayland
29env = GDK_BACKEND,wayland
30
31# Inputs - https://wiki.hyprland.org/Configuring/Variables/#input
32input {
33 numlock_by_default = true
34 kb_layout = es
35
36 follow_mouse = 1
37
38 touchpad {
39 natural_scroll = no
40 }
41
42 sensitivity = 0
43}
44
45# Permissions
46# permission = /usr/(bin|local/bin)/grim, screencopy, allow
47# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
48# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
49
50# General - https://wiki.hyprland.org/Configuring/Variables/
51general {
52 gaps_in = 6
53 gaps_out = 12
54 border_size = 3
55 col.active_border = $blue $green 90deg
56 col.inactive_border = $crust
57 layout = dwindle
58}
59
60# Ecosystem - https://wiki.hyprland.org/Configuring/Permissions/
61ecosystem {
62 no_update_news = true
63}
64
65# XWayland - https://wiki.hyprland.org/Configuring/XWayland/
66xwayland {
67 force_zero_scaling = true
68}
69
70# Decorations - https://wiki.hyprland.org/Configuring/Variables/
71decoration {
72 rounding = 0
73
74 shadow {
75 enabled = false
76 }
77
78 blur {
79 enabled = false
80 }
81}
82
83# Animations - https://wiki.hyprland.org/Configuring/Animations/
84animations {
85 enabled = yes
86
87 animation = windows, 1, 5, default, popin
88 animation = fade, 1, 5, default
89 animation = border, 1, 10, default
90 animation = borderangle, 1, 10, default
91 animation = workspaces, 1, 5, default
92}
93
94# Dwindle - https://wiki.hyprland.org/Configuring/Dwindle-Layout/
95dwindle {
96 pseudotile = yes
97 preserve_split = yes
98 force_split = 2
99}
100
101# Smart Gaps - https://wiki.hyprland.org/Configuring/Workspace-Rules/
102workspace = w[tv1], gapsout:0, gapsin:0
103workspace = f[1], gapsout:0, gapsin:0
104windowrule = match:workspace w[tv1], match:float no, border_size 0
105windowrule = match:workspace w[tv1], match:float no, rounding 0
106windowrule = match:workspace f[1], match:float no, border_size 0
107windowrule = match:workspace f[1], match:float no, rounding 0
108
109# Layout - https://wiki.hyprland.org/Configuring/Master-Layout/
110master {
111 new_status = master
112}
113
114# Gestures - https://wiki.hyprland.org/Configuring/Variables/#gestures
115gestures {
116}
117
118# Misc - https://wiki.hyprland.org/Configuring/Variables/#misc
119misc {
120 force_default_wallpaper = false
121 disable_hyprland_logo = true
122 disable_splash_rendering = true
123}
124
125# Keywords - https://wiki.hyprland.org/Configuring/Keywords/
126$mainMod = SUPER
127
128# Binds - https://wiki.hyprland.org/Configuring/Binds/
129bind = $mainMod, Return, exec, uwsm app -- $terminal
130bind = $mainMod SHIFT, Q, killactive,
131bind = $mainMod, M, exit,
132bind = $mainMod, E, exec, uwsm app -- $fileManager
133bind = $mainMod, V, togglefloating,
134bind = $mainMod, F, fullscreen,
135bind = $mainMod, BackSpace, exec, uwsm app -- $menu
136bind = $mainMod, P, pseudo,
137bind = $mainMod, J, togglesplit,
138
139# Move focus with mainMod + arrow keys
140bind = $mainMod, left, movefocus, l
141bind = $mainMod, right, movefocus, r
142bind = $mainMod, up, movefocus, u
143bind = $mainMod, down, movefocus, d
144
145# Move windows with mainMod + SHIFT + arrow keys
146bind = $mainMod SHIFT, left, movewindow, l
147bind = $mainMod SHIFT, right, movewindow, r
148bind = $mainMod SHIFT, up, movewindow, u
149bind = $mainMod SHIFT, down, movewindow, d
150
151# Switch workspaces with mainMod + [0-9]
152bind = $mainMod, 1, workspace, 1
153bind = $mainMod, 2, workspace, 2
154bind = $mainMod, 3, workspace, 3
155bind = $mainMod, 4, workspace, 4
156bind = $mainMod, 5, workspace, 5
157bind = $mainMod, 6, workspace, 6
158bind = $mainMod, 7, workspace, 7
159bind = $mainMod, 8, workspace, 8
160bind = $mainMod, 9, workspace, 9
161bind = $mainMod, 0, workspace, 10
162
163# Move active window to a workspace with mainMod + SHIFT + [0-9]
164bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
165bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
166bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
167bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
168bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
169bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
170bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
171bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
172bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
173bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
174
175# Special workspace (scratchpad)
176bind = $mainMod, S, togglespecialworkspace, magic
177bind = $mainMod SHIFT, S, movetoworkspace, special:magic
178
179# Scroll through existing workspaces with mainMod + scroll
180bind = $mainMod, mouse_down, workspace, e+1
181bind = $mainMod, mouse_up, workspace, e-1
182
183# Move/resize windows with mainMod + LMB/RMB and dragging
184bindm = $mainMod, mouse:272, movewindow
185bindm = $mainMod, mouse:273, resizewindow
186
187# Screenshots
188bind = , PRINT, exec, hyprshot -m output
189bind = SHIFT, PRINT, exec, hyprshot -m region
190bind = $mainMod shift, p, exec, hyprshot -m region
191bind = CTRL, PRINT, exec, hyprshot -m window
192
193# Open Code Projects
194bind = $mainMod shift, BackSpace, exec, ls "$HOME/projects" | fuzzel -x 20 -d -I --prompt="🖥️ > " | xargs -I {} uwsm app -- code -n "$HOME/projects/{}"
195
196# Open AI Agent in Project
197bind = $mainMod shift, minus, exec, open-ai-agent
198
199# AI
200bind = $mainMod SHIFT, A, exec, uwsm app -- brave --app=https://chatgpt.com/?model=gpt-5-2
201bind = $mainMod SHIFT, Y, exec, magic-brush
202
203# Todoist
204bind = $mainMod SHIFT, T, exec, uwsm app -- brave --app=https://app.todoist.com/app/today
205
206# Brave Browser
207bind = $mainMod SHIFT, B, exec, uwsm app -- brave
208
209# Open Common Projects
210bind = $mainMod SHIFT, n, exec, uwsm app -- code -n "$HOME/projects/notes"
211bind = $mainMod SHIFT, h, exec, uwsm app -- code -n "$HOME/projects/handbook"
212
213# Emoji
214bind = $mainMod SHIFT, E, exec, uwsm app -- bemoji -n
215
216# Whisper
217bind = $mainMod SHIFT, O, exec, whispr
218
219# Volume
220bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+
221bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-
222bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
223bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
224
225# Multimedia Control
226bindl = , XF86AudioNext, exec, playerctl next
227bindl = , XF86AudioPause, exec, playerctl play-pause
228bindl = , XF86AudioPlay, exec, playerctl play-pause
229bindl = , XF86AudioPrev, exec, playerctl previous
230
231# Screen
232bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
233bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
234
235# Ignore maximize requests from apps
236windowrule = match:class .*, suppress_event maximize
237
238# Resize mode
239bind = $mainMod, R, submap, resize
240submap = resize
241bind = , right, resizeactive, 40 0
242bind = , left, resizeactive, -40 0
243bind = , up, resizeactive, 0 -40
244bind= , down, resizeactive, 0 40
245bind = , escape, submap, reset
246bind = , return, submap, reset
247submap = reset
248
249# Exit mode
250bind = $mainMod shift, l, submap, EXIT
251submap = EXIT
252bind = , s, exec, systemctl suspend
253bind = , r, exec, systemctl reboot
254bind = , p, exec, systemctl poweroff -i
255bind = , l, exec, uwsm app -- hyprlock && hyprctl dispatch submap reset
256bind = , escape, submap, reset
257bind = , return, submap, reset
258submap = reset