1{
2 pkgs,
3 inputs,
4 ...
5}: {
6 xdg.configFile."niri/config.kdl".text = ''
7 gestures {
8 hot-corners {
9 off
10 }
11 }
12
13 input {
14 keyboard {
15 xkb {
16 layout "us,de"
17 }
18 }
19
20 touchpad {
21 tap
22 natural-scroll
23 }
24 }
25
26 output "eDP-1" {
27 mode "3840x2160@60.000"
28 }
29
30 output "LG Electronics LG HDR 4K 0x0001A8D9" {
31 mode "3840x2160@60.000"
32 }
33
34 layout {
35 gaps 0
36 center-focused-column "never"
37 preset-column-widths {
38 proportion 0.33333
39 proportion 0.5
40 proportion 0.66667
41 }
42 default-column-width {
43 proportion 0.5
44 }
45 focus-ring {
46 off
47 }
48 struts {
49 right 10
50 }
51
52 border {
53 width 3
54 active-color "#7fc8ff"
55 inactive-color "#DDDDDD"
56 }
57 }
58
59 overview {
60 backdrop-color "#DDDDDD"
61 }
62
63 spawn-at-startup "dbus-update-activation-environment" "WAYLAND_DISPLAY" "XDG_CURRENT_DESKTOP=niri"
64 spawn-at-startup "openrc" "--user" "gui"
65
66 spawn-at-startup "blueman-applet"
67 spawn-at-startup "mako"
68 spawn-at-startup "nm-applet"
69 spawn-at-startup "swaybg" "-c" "DDDDDD"
70 spawn-at-startup "waybar"
71
72 spawn-at-startup "xwayland-satellite" ":12"
73 environment {
74 DISPLAY ":12"
75 }
76
77 spawn-at-startup "flatpak" "run" "com.slack.Slack"
78 spawn-at-startup "telegram-desktop"
79
80 prefer-no-csd
81
82 screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
83
84
85 binds {
86 Mod+Shift+Slash { show-hotkey-overlay; }
87
88 Mod+T { spawn "/usr/bin/ghostty"; }
89 Mod+D { spawn "wofi" "--show" "run"; }
90 Mod+O repeat=false { toggle-overview; }
91 Mod+Shift+D { spawn "wofi" "--show" "drun"; }
92 Super+Alt+L { spawn "swaylock"; }
93
94 Mod+Shift+Q { close-window; }
95
96 Mod+H { focus-column-left; }
97 Mod+J { focus-window-or-workspace-down; }
98 Mod+K { focus-window-or-workspace-up; }
99 Mod+L { focus-column-right; }
100
101 Mod+Ctrl+H { move-column-left; }
102 Mod+Ctrl+J { move-workspace-down; }
103 Mod+Ctrl+K { move-workspace-up; }
104 Mod+Ctrl+L { move-column-right; }
105
106 Mod+Home { focus-column-first; }
107 Mod+End { focus-column-last; }
108 Mod+Ctrl+Home { move-column-to-first; }
109 Mod+Ctrl+End { move-column-to-last; }
110
111 Mod+Shift+H { focus-monitor-left; }
112 Mod+Shift+J { focus-monitor-down; }
113 Mod+Shift+K { focus-monitor-up; }
114 Mod+Shift+L { focus-monitor-right; }
115
116 Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
117 Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
118 Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
119 Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
120
121 // Alternatively, there are commands to move just a single window:
122 // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
123 // ...
124
125 // And you can also move a whole workspace to another monitor:
126 Mod+Shift+Ctrl+U { move-workspace-to-monitor-left; }
127 Mod+Shift+Ctrl+I { move-workspace-to-monitor-right; }
128 // ...
129
130 Mod+Page_Down { focus-workspace-down; }
131 Mod+Page_Up { focus-workspace-up; }
132 Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
133 Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
134 Mod+Ctrl+U { move-column-to-workspace-down; }
135 Mod+Ctrl+I { move-column-to-workspace-up; }
136
137 Mod+Shift+Page_Down { move-workspace-down; }
138 Mod+Shift+Page_Up { move-workspace-up; }
139 Mod+Shift+U { move-workspace-down; }
140 Mod+Shift+I { move-workspace-up; }
141
142 Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
143 Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
144 Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
145 Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
146
147 Mod+WheelScrollRight { focus-column-right; }
148 Mod+WheelScrollLeft { focus-column-left; }
149 Mod+Ctrl+WheelScrollRight { move-column-right; }
150 Mod+Ctrl+WheelScrollLeft { move-column-left; }
151
152 Mod+Shift+WheelScrollDown { focus-column-right; }
153 Mod+Shift+WheelScrollUp { focus-column-left; }
154 Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
155 Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
156
157 Mod+S { set-dynamic-cast-window; }
158 Mod+Shift+S { set-dynamic-cast-monitor; }
159 Mod+Ctrl+S { clear-dynamic-cast-target; }
160
161 Mod+1 { focus-workspace "α"; }
162 Mod+2 { focus-workspace "γ"; }
163 Mod+3 { focus-workspace "δ"; }
164 Mod+4 { focus-workspace "ε"; }
165 Mod+5 { focus-workspace "ζ"; }
166 Mod+6 { focus-workspace "6"; }
167 Mod+7 { focus-workspace "7"; }
168 Mod+8 { focus-workspace "8"; }
169 Mod+9 { focus-workspace "9"; }
170 Mod+Minus { focus-workspace "-"; }
171 Mod+Ctrl+1 { move-column-to-workspace "α"; }
172 Mod+Ctrl+2 { move-column-to-workspace "γ"; }
173 Mod+Ctrl+3 { move-column-to-workspace "δ"; }
174 Mod+Ctrl+4 { move-column-to-workspace "ε"; }
175 Mod+Ctrl+5 { move-column-to-workspace "ζ"; }
176 Mod+Ctrl+6 { move-column-to-workspace "6"; }
177 Mod+Ctrl+7 { move-column-to-workspace "7"; }
178 Mod+Ctrl+8 { move-column-to-workspace "8"; }
179 Mod+Ctrl+9 { move-column-to-workspace "9"; }
180 Mod+Ctrl+Minus { move-column-to-workspace "-"; }
181
182 Mod+BracketLeft { consume-or-expel-window-left; }
183 Mod+BracketRight { consume-or-expel-window-right; }
184
185 Mod+Comma { consume-window-into-column; }
186 Mod+Period { expel-window-from-column; }
187
188 Mod+R { switch-preset-column-width; }
189 Mod+Shift+R { switch-preset-window-height; }
190 Mod+Ctrl+R { reset-window-height; }
191 Mod+F { maximize-column; }
192 Mod+Shift+F { fullscreen-window; }
193
194 Mod+Ctrl+F { expand-column-to-available-width; }
195
196 Mod+C { center-column; }
197
198 Mod+U { set-column-width "-10%"; }
199 Mod+I { set-column-width "+10%"; }
200
201 // Finer height adjustments when in column with other windows.
202 Mod+Shift+Minus { set-window-height "-10%"; }
203 Mod+Shift+Equal { set-window-height "+10%"; }
204
205 Mod+V { toggle-window-floating; }
206 Mod+Shift+V { switch-focus-between-floating-and-tiling; }
207
208 Mod+W { toggle-column-tabbed-display; }
209
210 Mod+p { screenshot; }
211
212 Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
213
214 Mod+Shift+E { quit; }
215
216 Mod+Shift+P { power-off-monitors; }
217 }
218
219 workspace "α" {
220 }
221
222 workspace "γ" {
223 }
224
225 workspace "δ" {
226 }
227
228 workspace "ε" {
229 }
230
231 workspace "ζ" {
232 }
233
234 workspace "-" {
235 }
236
237 workspace "6" {
238 }
239
240 workspace "7" {
241 }
242
243 workspace "8" {
244 }
245
246 workspace "9" {
247 }
248
249
250 window-rule {
251 match app-id=r#"^com\.slack\.Slack$"#
252
253 open-on-workspace "chat"
254 block-out-from "screencast"
255 }
256
257 window-rule {
258 match app-id=r#"^org\.telegram\.desktop$"#
259
260 open-on-workspace "ζ"
261 block-out-from "screencast"
262 }
263
264 window-rule {
265 match app-id=r#"^Bitwarden$"#
266
267 open-on-workspace "res"
268 block-out-from "screencast"
269 }
270
271
272 window-rule {
273 match app-id=r#"^org\.pulseaudio\.pavucontrol$"#
274 match app-id=r#"^blueman\-manager$"#
275
276 open-floating true
277 }
278
279
280 layer-rule {
281 match namespace="^notifications$"
282 block-out-from "screencast"
283 }
284
285 layer-rule {
286 match namespace="^waybar$"
287 block-out-from "screencast"
288 }
289
290
291 window-rule {
292 match is-window-cast-target=true
293
294 focus-ring {
295 active-color "#f38ba8"
296 inactive-color "#7d0d2d"
297 }
298
299 border {
300 inactive-color "#7d0d2d"
301 }
302
303 shadow {
304 color "#7d0d2d70"
305 }
306
307 tab-indicator {
308 active-color "#f38ba8"
309 inactive-color "#7d0d2d"
310 }
311 }
312
313 // user private to hide private browser
314 // altgr-intl
315 '';
316}