summaryrefslogtreecommitdiff
path: root/users/ryan/linux/hypr/hyprland.conf
diff options
context:
space:
mode:
authorRyan Schanzenbacher <ryan@rschanz.org>2026-08-03 01:22:44 -0400
committerRyan Schanzenbacher <ryan@rschanz.org>2026-08-03 01:22:44 -0400
commit0c8fa3a2a270747f3dbb54fe8792f3f0aec997e3 (patch)
tree6f94ff3aeea2af859c7c166e01a8e73002017893 /users/ryan/linux/hypr/hyprland.conf
Initial commit: combined darwin + guix-linux home-manager flake
Supersedes nix-dotfiles (darwin) and guix-dotfiles' ad-hoc nix-home-manager flake (linux). See README.md/MIGRATION.md.
Diffstat (limited to 'users/ryan/linux/hypr/hyprland.conf')
-rw-r--r--users/ryan/linux/hypr/hyprland.conf336
1 files changed, 336 insertions, 0 deletions
diff --git a/users/ryan/linux/hypr/hyprland.conf b/users/ryan/linux/hypr/hyprland.conf
new file mode 100644
index 0000000..e51b54c
--- /dev/null
+++ b/users/ryan/linux/hypr/hyprland.conf
@@ -0,0 +1,336 @@
1exec-once = dbus-update-activation-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP=Hyprland
2
3#
4# Please note not all available settings / options are set here.
5# For a full list, see the wiki
6#
7
8# See https://wiki.hyprland.org/Configuring/Monitors/
9monitor=,preferred,auto,1
10
11# Cursor theme is set via home.pointerCursor in linux.nix (pkgs.bibata-cursors,
12# theme "Bibata-Modern-Classic"). The old vendored theme used
13# hyprcursor/daed9-versioned names that only existed in the manually-packaged
14# asset; nixpkgs' build uses the plain name below for both HYPRCURSOR_THEME
15# and XCURSOR_THEME.
16env = HYPRCURSOR_THEME,Bibata-Modern-Classic
17env = HYPRCURSOR_SIZE,24
18env = XCURSOR_THEME,Bibata-Modern-Classic
19env = XCURSOR_SIZE,24
20
21env = AQ_NO_MODIFIERS,1
22
23render {
24 expand_undersized_textures = false
25}
26
27ecosystem {
28 no_update_news = true
29}
30
31
32# See https://wiki.hyprland.org/Configuring/Keywords/ for more
33
34# Execute your favorite apps at launch
35# exec-once = waybar & hyprpaper & firefox
36
37# Source a file (multi-file configs)
38source = ~/.config/hypr/monitors.conf
39
40# Some default env vars.
41env = XCURSOR_SIZE,24
42
43debug {
44 disable_logs = false
45 enable_stdout_logs = true
46}
47
48# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
49input {
50 kb_layout = us
51 kb_variant =
52 kb_model =
53 kb_options =
54 kb_rules =
55 numlock_by_default = true
56
57 follow_mouse = 1
58
59 touchpad {
60 natural_scroll = no
61 middle_button_emulation = true
62 clickfinger_behavior = true
63 }
64
65 sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
66}
67
68general {
69 # See https://wiki.hyprland.org/Configuring/Variables/ for more
70
71 gaps_in = 5
72 gaps_out = 10
73 border_size = 2
74 col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
75 col.inactive_border = rgba(595959aa)
76
77 layout = dwindle
78}
79
80decoration {
81 # See https://wiki.hyprland.org/Configuring/Variables/ for more
82
83 rounding = 5
84 blur {
85 enabled = yes
86 size = 3
87 passes = 1
88 new_optimizations = on
89 }
90
91 shadow {
92 enabled = true
93 range = 4
94 render_power = 3
95 color = rgba(1a1a1aee)
96 }
97}
98
99animations {
100 enabled = yes
101
102 # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
103
104 bezier = myBezier, 0.05, 0.9, 0.1, 1.05
105
106 animation = windows, 1, 7, myBezier
107 animation = windowsOut, 1, 7, default, popin 80%
108 animation = border, 1, 10, default
109 animation = borderangle, 1, 8, default
110 animation = fade, 1, 7, default
111 animation = workspaces, 1, 6, default
112}
113
114dwindle {
115 # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
116 pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
117 preserve_split = yes # you probably want this
118}
119
120#master {
121# # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
122# new_is_master = true
123#}
124
125# Example per-device config
126# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
127device {
128 name = epic-mouse-v1
129 sensitivity = -0.5
130}
131
132# Example windowrule v1
133# windowrule = float, ^(kitty)$
134# Example windowrule v2
135# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
136# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
137
138
139# See https://wiki.hyprland.org/Configuring/Keywords/ for more
140$mainMod = SUPER
141
142# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
143bind = $mainMod, Return, exec, foot
144bind = $mainMod CTRL, Return, exec, foot -a float-foot
145bind = $mainMod SHIFT, Q, killactive
146bind = $mainMod SHIFT, E, exit
147bind = $mainMod SHIFT, Space, togglefloating
148bind = $mainMod SHIFT, Return, pin, active
149bind = $mainMod, D, exec, fuzzel --width=35 --font='Hack:weight=bold:size=12' --background-color='282a36fa' --selection-color='3d4460fa' --line-height=20 --border-radius=20
150bind = $mainMod, P, pseudo, # dwindle
151bind = $mainMod, J, togglesplit, # dwindle
152bind = $mainMod, F, fullscreen, 1
153bind = $mainMod SHIFT, F, fullscreen
154bind = ,XF86MonBrightnessUp, exec, light -A 10
155bind = ,XF86MonBrightnessDown, exec, light -U 10
156bind = ,XF86AudioRaiseVolume, exec, pamixer -i 5
157bind = ,XF86AudioLowerVolume, exec, pamixer -d 5
158bind = ,XF86AudioMute, exec, pamixer -t
159bind = ,XF86AudioPlay, exec, playerctl play-pause
160bind = ,XF86AudioPause, exec, playerctl play-pause
161bind = ,XF86AudioNext, exec, playerctl next
162bind = ,XF86AudioPrev, exec, playerctl previous
163bind = ,XF86AudioStop, exec, playerctl stop
164
165# "Auto-connect headphones"
166bind = $mainMod, H, exec, bluetoothctl connect AC:80:0A:1C:D6:C7
167
168# Move workspace between monitors
169bind = $mainMod CTRL SHIFT, left, movecurrentworkspacetomonitor, l
170bind = $mainMod CTRL SHIFT, right, movecurrentworkspacetomonitor, r
171bind = $mainMod CTRL SHIFT, up, movecurrentworkspacetomonitor, u
172bind = $mainMod CTRL SHIFT, down, movecurrentworkspacetomonitor, d
173
174# Move focus with mainMod + arrow keys
175bind = $mainMod, left, movefocus, l
176bind = $mainMod, right, movefocus, r
177bind = $mainMod, up, movefocus, u
178bind = $mainMod, down, movefocus, d
179
180# Move window with mainMod + SHIFT + arrow keys
181bind = $mainMod SHIFT, left, movewindow, l
182bind = $mainMod SHIFT, right, movewindow, r
183bind = $mainMod SHIFT, up, movewindow, u
184bind = $mainMod SHIFT, down, movewindow, d
185
186# Switch workspaces with mainMod + [0-9]
187bind = $mainMod, 1, workspace, 1
188bind = $mainMod, 2, workspace, 2
189bind = $mainMod, 3, workspace, 3
190bind = $mainMod, 4, workspace, 4
191bind = $mainMod, 5, workspace, 5
192bind = $mainMod, 6, workspace, 6
193bind = $mainMod, 7, workspace, 7
194bind = $mainMod, 8, workspace, 8
195bind = $mainMod, 9, workspace, 9
196bind = $mainMod, 0, workspace, 10
197
198# Move active window to a workspace with mainMod + SHIFT + [0-9]
199bind = $mainMod SHIFT, 1, movetoworkspace, 1
200bind = $mainMod SHIFT, 2, movetoworkspace, 2
201bind = $mainMod SHIFT, 3, movetoworkspace, 3
202bind = $mainMod SHIFT, 4, movetoworkspace, 4
203bind = $mainMod SHIFT, 5, movetoworkspace, 5
204bind = $mainMod SHIFT, 6, movetoworkspace, 6
205bind = $mainMod SHIFT, 7, movetoworkspace, 7
206bind = $mainMod SHIFT, 8, movetoworkspace, 8
207bind = $mainMod SHIFT, 9, movetoworkspace, 9
208bind = $mainMod SHIFT, 0, movetoworkspace, 10
209
210# Scroll through existing workspaces with mainMod + scroll
211bind = $mainMod, mouse_down, workspace, e+1
212bind = $mainMod, mouse_up, workspace, e-1
213
214# Move/resize windows with mainMod + LMB/RMB and dragging
215bindm = $mainMod, mouse:272, movewindow
216bindm = $mainMod, mouse:273, resizewindow
217
218# Bind mainMod + L to screenlocker
219bind = $mainMod, L, exec, hyprlock
220bind = $mainMod SHIFT, L, exec, loginctl suspend
221
222# Keybind to toggle "performance mode" (toggles GPU intensive things)
223bind = $mainMod, F1, exec, ~/.config/hypr/scripts/perf_mode.sh
224
225bind = $mainMod SHIFT, Z, exec, pypr zoom
226
227# Keybind for screenshot (satty)
228bind = $mainMod SHIFT, S, exec, grimblast save output - | satty --fullscreen --copy-command 'wl-copy' --filename -
229bind = $mainMod, S, exec, grimblast copy area
230bind = $mainMod, Print, exec, export TEMP=$(mktemp) && grimblast copy area && wl-paste > $TEMP && imv $TEMP && rm $TEMP
231
232# Keybind for screenshot (old)
233# bind = $mainMod SHIFT, S, exec, grimblast copy area
234# bind = $mainMod SHIFT, Print, exec, grimblast edit area
235# bind = $mainMod, S, exec, imv <(grimblast save area -)
236
237# Keybind for screenshot (flameshot)
238#bind = $mainMod SHIFT, S, exec, flameshot gui --raw | wl-copy
239#bind = $mainMod SHIFT CTRL, S, exec, flameshot gui --raw -d $(( 1000 * $(fuzzel -l0 --dmenu -p"Delay> ") )) | wl-copy
240#bind = $mainMod, S, exec, flameshot gui
241
242# Notifications keybinds
243bind = $mainMod, N, exec, makoctl dismiss
244bind = $mainMod SHIFT, N, exec, makoctl dismiss -a
245
246# Color picker
247bind = $mainMod SHIFT, C, exec, hyprpicker -a
248
249# LinkedIn Joke (very serious)
250bind = $mainMod SHIFT CTRL ALT, L, exec, xdg-open https://linkedin.com
251
252# Window Rules
253
254# Firefox PiP
255windowrulev2 = float, class:^(zen-beta)$, title:^(Picture-in-Picture)$
256windowrulev2 = pin, class:^(zen-beta)$, title:^(Picture-in-Picture)$
257windowrulev2 = size 22% 22%, class:^(zen-beta)$, title:^(Picture-in-Picture)$
258windowrulev2 = move 76% 8%, class:^(zen-beta)$, title:^(Picture-in-Picture)$
259
260# Firefox Sharing Indicator
261windowrulev2 = float, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
262windowrulev2 = size 56 31, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
263windowrulev2 = move 50% 0, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
264windowrulev2 = suppressevent fullscreen maximize, class:^(firefox)$, title:^(Firefox — Sharing Indicator)$
265
266# Weather
267windowrulev2 = float,class:^(ala-wttr)$
268windowrulev2 = size 822 1026, class:^(ala-wttr)$
269
270# Floating terminal
271windowrulev2 = float,class:^(float-foot)$
272windowrulev2 = size 930 680,class:^(float-foot)$
273windowrulev2 = center,class:^(float-foot)$
274
275# Change color of pinned windows
276windowrulev2 = bordercolor rgba(bf0000ee) rgba(ab00adee) 45deg,pinned:1
277
278# Fun Keybinds
279# Subway surfer
280bind = $mainMod CTRL SHIFT, S, exec, mpv ~/.config/hypr/subwaysurfer.webm
281windowrulev2 = float,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
282windowrulev2 = size 310 554,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
283windowrulev2 = move 81% 46% ,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
284windowrulev2 = pin,class:^(mpv)$, title:^(subwaysurfer.webm - mpv)$
285
286# Family guy funny moments
287bind = $mainMod CTRL SHIFT, F, exec, mpv ~/.config/hypr/family_guy.mp4
288windowrulev2 = float,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
289windowrulev2 = size 595 336,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
290windowrulev2 = move 67% 5% ,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
291windowrulev2 = pin,class:^(mpv)$, title:^(family_guy.mp4 - mpv)$
292
293# Satty windowrules
294windowrulev2 = fullscreen,class:^(com.gabm.satty)$
295
296exec-once = ~/.config/hypr/scripts/autostart.sh
297
298misc {
299 disable_hyprland_logo = true
300 force_default_wallpaper = 0
301}
302
303# Cursors!
304plugin:dynamic-cursors {
305 enabled = true
306 mode = tilt
307 threshold = 2
308 tilt {
309 limit = 5000
310 function = negative_quadratic
311 }
312
313 shake {
314 enabled = true
315 nearest = true
316 threshold = 6.0
317 base = 4.0
318 speed = 4.0
319 influence = 0.0
320
321 limit = 0.0
322
323 timeout = 2000
324
325 effects = true
326
327 ipc = false
328 }
329
330 hyprcursor {
331 nearest = true
332 enabled = true
333 resolution = -1
334 fallback = clientside
335 }
336}