My Nix Configuration
1input {
2 warp-mouse-to-focus
3 focus-follows-mouse max-scroll-amount="0%"
4
5 keyboard {
6 repeat-delay 200
7 repeat-rate 20
8 xkb {
9 options "caps:escape"
10 }
11 }
12
13 touchpad {
14 tap
15 dwt
16 drag false
17 tap-button-map "left-middle-right"
18 scroll-factor 1.5
19 }
20
21 mouse {
22 scroll-factor 1.5
23 }
24}
25
26output "Acer Technologies SA241Y 0x1497CF17" {
27 mode "1920x1080@74.973"
28 scale 1
29 transform "normal"
30 position x=2560 y=0
31 focus-at-startup
32}
33
34output "eDP-1" {
35 mode "2560x1600@165"
36 scale 1
37 transform "normal"
38 position x=0 y=0
39 variable-refresh-rate
40 focus-at-startup
41}
42
43layout {
44 gaps 5
45 background-color "transparent"
46 center-focused-column "never"
47
48 preset-column-widths {
49 proportion 0.33333
50 proportion 0.5
51 proportion 0.66667
52 proportion 0.75
53 proportion 1.0
54 }
55 preset-window-heights {
56 proportion 0.33333
57 proportion 0.5
58 proportion 0.75
59 proportion 1.0
60 }
61 default-column-width { proportion 0.75; }
62
63 focus-ring {
64 width 4
65 active-color "#a6e3a1"
66 inactive-color "#6c7086"
67 }
68 border {
69 off
70 }
71 struts {
72 left 5
73 right 5
74 top 5
75 bottom 5
76 }
77}
78
79prefer-no-csd
80
81environment {
82 XDG_CURRENT_DESKTOP "niri"
83 QT_QPA_PLATFORM "wayland"
84 ELECTRON_OZONE_PLATFORM_HINT "auto"
85 QT_QPA_PLATFORMTHEME "gtk3"
86 QT_QPA_PLATFORMTHEME_QT6 "gtk3"
87 GDK_BACKEND "wayland,x11,*"
88 WAYLAND_DISPLAY "wayland-1"
89}
90
91spawn-sh-at-startup "sleep 2 && systemctl restart --user 'xdg-desktop-portal*'"
92spawn-at-startup "feishin"
93spawn-at-startup "equibop"
94spawn-at-startup "ghostty"
95spawn-at-startup "fluffychat"
96spawn-at-startup "firefox"
97
98hotkey-overlay {
99 skip-at-startup
100}
101
102workspace "terminal" {
103 open-on-output "Acer Technologies SA241Y 0x1497CF17"
104}
105workspace "browser" {
106 open-on-output "Acer Technologies SA241Y 0x1497CF17"
107}
108workspace "chat" {
109 open-on-output "Acer Technologies SA241Y 0x1497CF17"
110}
111
112screenshot-path "~/Pictures/screenshots/%Y/%m/%d-%H-%M-%S.png"
113
114window-rule {
115 match app-id=r#"firefox$"# title="^Picture-in-Picture$"
116 open-floating true
117}
118window-rule {
119 match title="Celeste"
120 open-fullscreen true
121}
122
123window-rule {
124 match app-id="SpaceIdle"
125 match app-id="equibop"
126 match app-id="firefox"
127 open-maximized true
128}
129
130window-rule {
131 match at-startup=true app-id="equibop"
132 match at-startup=true app-id="fluffychat"
133 match at-startup=true app-id="feishin"
134 open-on-workspace "chat"
135}
136window-rule {
137 match at-startup=true app-id="com.mitchellh.ghostty"
138 open-on-workspace "terminal"
139}
140
141window-rule {
142 match at-startup=true app-id="firefox"
143 open-on-workspace "browser"
144}
145
146
147window-rule {
148 match title=r#"^Borderlands 2"#
149 open-fullscreen true
150 open-on-output "Acer Technologies SA241Y 0x1497CF17"
151}
152
153binds {
154 Super+Shift+Slash { show-hotkey-overlay; }
155
156 Super+Space hotkey-overlay-title="Launcher" { spawn "dms" "ipc" "spotlight" "toggle"; }
157 Super+B hotkey-overlay-title="Bitwarden" { spawn "dms" "ipc" "spotlight" "openQuery" "bw "; }
158 Super+Return hotkey-overlay-title="Open Terminal" { spawn "ghostty"; }
159 Super+X hotkey-overlay-title="Power Menu" { spawn "dms" "ipc" "powermenu" "toggle"; }
160 Super+Shift+X hotkey-overlay-title="Lock Session" { spawn "dms" "ipc" "lock" "lock"; }
161
162 XF86AudioRaiseVolume hotkey-overlay-title="Volume Up" allow-when-locked=true { spawn "dms" "ipc" "audio" "increment" "5"; }
163 XF86AudioLowerVolume hotkey-overlay-title="Volume Down" allow-when-locked=true { spawn "dms" "ipc" "audio" "decrement" "5"; }
164 XF86AudioMute hotkey-overlay-title="Mute Audio" allow-when-locked=true { spawn "dms" "ipc" "audio" "mute"; }
165 XF86AudioPlay allow-when-locked=true { spawn "dms" "ipc" "mpris" "playPause"; }
166 XF86AudioStop allow-when-locked=true { spawn "dms" "ipc" "mpris" "stop"; }
167 XF86AudioPrev allow-when-locked=true { spawn "dms" "ipc" "mpris" "previous"; }
168 XF86AudioNext allow-when-locked=true { spawn "dms" "ipc" "mpris" "next"; }
169
170 XF86MonBrightnessUp allow-when-locked=true { spawn "dms" "ipc" "brightness" "increment" "5" ""; }
171 XF86MonBrightnessDown allow-when-locked=true { spawn "dms" "ipc" "brightness" "decrement" "5" ""; }
172
173 Super+O repeat=false { toggle-overview; }
174
175 Super+Q repeat=false { close-window; }
176
177 Mod+Left { focus-column-left; }
178 Mod+Down { focus-window-down; }
179 Mod+Up { focus-window-up; }
180 Mod+Right { focus-column-right; }
181 Mod+H { focus-column-left; }
182 Mod+J { focus-window-down; }
183 Mod+K { focus-window-up; }
184 Mod+L { focus-column-right; }
185
186 Mod+Shift+Left { move-column-left; }
187 Mod+Shift+Down { move-window-down-or-to-workspace-down; }
188 Mod+Shift+Up { move-window-up-or-to-workspace-up; }
189 Mod+Shift+Right { move-column-right; }
190 Mod+Shift+H { move-column-left; }
191 Mod+Shift+J { move-window-down-or-to-workspace-down; }
192 Mod+Shift+K { move-window-up-or-to-workspace-up; }
193 Mod+Shift+L { move-column-right; }
194
195 Mod+Home { focus-column-first; }
196 Mod+End { focus-column-last; }
197 Mod+Ctrl+Home { move-column-to-first; }
198 Mod+Ctrl+End { move-column-to-last; }
199
200 Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
201 Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
202 Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
203 Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
204 Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
205 Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
206 Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
207 Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
208
209 Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
210 Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
211 Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
212 Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
213
214 Mod+WheelScrollRight { focus-column-right; }
215 Mod+WheelScrollLeft { focus-column-left; }
216 Mod+Ctrl+WheelScrollRight { move-column-right; }
217 Mod+Ctrl+WheelScrollLeft { move-column-left; }
218
219 // Usually scrolling up and down with Shift in applications results in
220 // horizontal scrolling; these binds replicate that.
221 Mod+Shift+WheelScrollDown { focus-column-right; }
222 Mod+Shift+WheelScrollUp { focus-column-left; }
223 Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
224 Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
225
226 Mod+1 { focus-workspace 1; }
227 Mod+2 { focus-workspace 2; }
228 Mod+3 { focus-workspace 3; }
229 Mod+4 { focus-workspace 4; }
230 Mod+5 { focus-workspace 5; }
231 Mod+6 { focus-workspace 6; }
232 Mod+7 { focus-workspace 7; }
233 Mod+8 { focus-workspace 8; }
234 Mod+9 { focus-workspace 9; }
235 Mod+Shift+1 { move-window-to-workspace 1; }
236 Mod+Shift+2 { move-window-to-workspace 2; }
237 Mod+Shift+3 { move-window-to-workspace 3; }
238 Mod+Shift+4 { move-window-to-workspace 4; }
239 Mod+Shift+5 { move-window-to-workspace 5; }
240 Mod+Shift+6 { move-window-to-workspace 6; }
241 Mod+Shift+7 { move-window-to-workspace 7; }
242 Mod+Shift+8 { move-window-to-workspace 8; }
243 Mod+Shift+9 { move-window-to-workspace 9; }
244
245 Mod+Tab { focus-workspace-previous; }
246
247 Mod+BracketLeft { consume-or-expel-window-left; }
248 Mod+BracketRight { consume-or-expel-window-right; }
249
250 // Consume one window from the right to the bottom of the focused column.
251 Mod+Comma { consume-window-into-column; }
252 // Expel the bottom window from the focused column to the right.
253 Mod+Period { expel-window-from-column; }
254
255 Mod+R { switch-preset-column-width; }
256 Mod+Shift+R { switch-preset-window-height; }
257 Mod+Ctrl+R { reset-window-height; }
258 Mod+F { maximize-column; }
259 Mod+Shift+F { fullscreen-window; }
260
261 Mod+Ctrl+F { expand-column-to-available-width; }
262
263 Mod+C { center-column; }
264
265 Mod+Ctrl+C { center-visible-columns; }
266
267 Mod+Shift+Equal { toggle-window-floating; }
268 Mod+Equal { switch-focus-between-floating-and-tiling; }
269
270 Mod+W { toggle-column-tabbed-display; }
271
272 Print { screenshot; }
273 Shift+F3 { screenshot-screen; }
274 Shift+F4 { screenshot; }
275
276 Mod+Shift+E { quit; }
277
278 Ctrl+Alt+L { spawn "loginctl" "lock-session"; }
279}
280
281gestures {
282 hot-corners {
283 off
284 }
285}
286
287// DMS Integration
288layer-rule {
289 match namespace="quickshell"
290 place-within-backdrop true
291}