···11+input {
22+ keyboard {
33+ repeat-delay 300
44+ repeat-rate 35
55+ }
66+77+ mouse {
88+ accel-speed 1.0
99+ accel-profile "flat"
1010+ }
1111+1212+ focus-follows-mouse max-scroll-amount="0%"
1313+}
1414+1515+output "DP-1" {
1616+ mode "1920x1080@144.001"
1717+ scale 0.87
1818+ transform "90"
1919+ position x=-1246 y=-775
2020+ hot-corners {
2121+ top-left
2222+ top-right
2323+ bottom-left
2424+ }
2525+}
2626+2727+output "DP-3" {
2828+ mode "2560x1440@164.998"
2929+ scale 1
3030+ transform "normal"
3131+ position x=0 y=0
3232+ focus-at-startup
3333+ hot-corners {
3434+ top-right
3535+ bottom-right
3636+ }
3737+}
3838+3939+// Settings that influence how windows are positioned and sized.
4040+// Find more information on the wiki:
4141+// https://yalter.github.io/niri/Configuration:-Layout
4242+layout {
4343+ // Set gaps around windows in logical pixels.
4444+ gaps 4
4545+4646+ // When to center a column when changing focus, options are:
4747+ // - "never", default behavior, focusing an off-screen column will keep at the left
4848+ // or right edge of the screen.
4949+ // - "always", the focused column will always be centered.
5050+ // - "on-overflow", focusing a column will center it if it doesn't fit
5151+ // together with the previously focused column.
5252+ center-focused-column "never"
5353+5454+ // "switch-preset-column-width"
5555+ preset-column-widths {
5656+ proportion 0.2
5757+ proportion 0.4
5858+ proportion 0.6
5959+ proportion 0.8
6060+ proportion 1.0
6161+ }
6262+6363+ // "switch-preset-window-height"
6464+ preset-window-heights {
6565+ proportion 0.5
6666+ proportion 1.0
6767+ }
6868+6969+ default-column-width { proportion 0.5; }
7070+7171+ focus-ring {
7272+ off
7373+ }
7474+7575+ border {
7676+ off
7777+ }
7878+}
7979+8080+spawn-at-startup "noctalia-shell"
8181+8282+hotkey-overlay {
8383+ skip-at-startup
8484+}
8585+8686+prefer-no-csd
8787+8888+// You can change the path where screenshots are saved.
8989+// A ~ at the front will be expanded to the home directory.
9090+// The path is formatted with strftime(3) to give you the screenshot date and time.
9191+screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
9292+9393+window-rule {
9494+ match app-id=r#"zen-twilight$"# title="^Picture-in-Picture$"
9595+ open-floating true
9696+}
9797+9898+window-rule {
9999+ match app-id=r#"^1password$"#
100100+ match app-id=r#"^discord$"#
101101+ match app-id=r#"^Slack$"#
102102+103103+ block-out-from "screen-capture"
104104+}
105105+106106+window-rule {
107107+ match app-id=r#"zen-twilight$"# title="@.+Mail"
108108+ match app-id=r#"zen-twilight$"# title="Console - Clever Cloud"
109109+110110+ block-out-from "screencast"
111111+}
112112+113113+binds {
114114+ // Keys consist of modifiers separated by + signs, followed by an XKB key name
115115+ // in the end. To find an XKB name for a particular key, you may use a program
116116+ // like wev.
117117+ //
118118+ // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
119119+ // when running as a winit window.
120120+ //
121121+ // Most actions that you can bind here can also be invoked programmatically with
122122+ // `niri msg action do-something`.
123123+124124+ // Mod-Shift-/, which is usually the same as Mod-?,
125125+ // shows a list of important hotkeys.
126126+ Mod+Shift+Slash { show-hotkey-overlay; }
127127+128128+ // Suggested binds for running programs: terminal, app launcher, screen locker.
129129+ Mod+D hotkey-overlay-title="Run an Application" { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; }
130130+ Mod+L hotkey-overlay-title="Lock Screen" { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; }
131131+ Mod+T hotkey-overlay-title="Open a Terminal" { spawn "ghostty"; }
132132+133133+ // Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
134134+ // Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
135135+ // For example, this is a standard bind to toggle the screen reader (orca).
136136+ Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
137137+138138+ XF86AudioRaiseVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "increase"; }
139139+ XF86AudioLowerVolume allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "decrease"; }
140140+ XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; }
141141+ XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; }
142142+143143+ // Example brightness key mappings for brightnessctl.
144144+ // You can use regular spawn with multiple arguments too (to avoid going through "sh"),
145145+ // but you need to manually put each argument in separate "" quotes.
146146+ XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
147147+ XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
148148+149149+ // Open/close the Overview: a zoomed-out view of workspaces and windows.
150150+ // You can also move the mouse into the top-left hot corner,
151151+ // or do a four-finger swipe up on a touchpad.
152152+ Mod+O repeat=false { toggle-overview; }
153153+154154+ Mod+Q repeat=false { close-window; }
155155+156156+ Mod+Left { focus-column-left; }
157157+ Mod+Down { focus-window-down; }
158158+ Mod+Up { focus-window-up; }
159159+ Mod+Right { focus-column-right; }
160160+161161+ Mod+Ctrl+Left { move-column-left; }
162162+ Mod+Ctrl+Down { move-window-down; }
163163+ Mod+Ctrl+Up { move-window-up; }
164164+ Mod+Ctrl+Right { move-column-right; }
165165+166166+ // Alternative commands that move across workspaces when reaching
167167+ // the first or last window in a column.
168168+ // Mod+J { focus-window-or-workspace-down; }
169169+ // Mod+K { focus-window-or-workspace-up; }
170170+ // Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
171171+ // Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
172172+173173+ Mod+Home { focus-column-first; }
174174+ Mod+End { focus-column-last; }
175175+ Mod+Ctrl+Home { move-column-to-first; }
176176+ Mod+Ctrl+End { move-column-to-last; }
177177+178178+ Mod+Shift+Left { focus-monitor-left; }
179179+ Mod+Shift+Down { focus-monitor-down; }
180180+ Mod+Shift+Up { focus-monitor-up; }
181181+ Mod+Shift+Right { focus-monitor-right; }
182182+183183+ Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
184184+ Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
185185+ Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
186186+ Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
187187+188188+ // Alternatively, there are commands to move just a single window:
189189+ // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
190190+ // ...
191191+192192+ // And you can also move a whole workspace to another monitor:
193193+ // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
194194+ // ...
195195+196196+ Mod+Page_Down { focus-workspace-down; }
197197+ Mod+Page_Up { focus-workspace-up; }
198198+ Mod+U { focus-workspace-down; }
199199+ Mod+I { focus-workspace-up; }
200200+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
201201+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
202202+ Mod+Ctrl+U { move-column-to-workspace-down; }
203203+ Mod+Ctrl+I { move-column-to-workspace-up; }
204204+205205+ // Alternatively, there are commands to move just a single window:
206206+ // Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
207207+ // ...
208208+209209+ Mod+Shift+Page_Down { move-workspace-down; }
210210+ Mod+Shift+Page_Up { move-workspace-up; }
211211+ Mod+Shift+U { move-workspace-down; }
212212+ Mod+Shift+I { move-workspace-up; }
213213+214214+ // You can bind mouse wheel scroll ticks using the following syntax.
215215+ // These binds will change direction based on the natural-scroll setting.
216216+ //
217217+ // To avoid scrolling through workspaces really fast, you can use
218218+ // the cooldown-ms property. The bind will be rate-limited to this value.
219219+ // You can set a cooldown on any bind, but it's most useful for the wheel.
220220+ Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
221221+ Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
222222+ Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
223223+ Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
224224+225225+ Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; }
226226+ Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; }
227227+ Mod+Ctrl+WheelScrollRight cooldown-ms=150 { move-column-right; }
228228+ Mod+Ctrl+WheelScrollLeft cooldown-ms=150 { move-column-left; }
229229+230230+ // Usually scrolling up and down with Shift in applications results in
231231+ // horizontal scrolling; these binds replicate that.
232232+ Mod+Shift+WheelScrollDown cooldown-ms=150 { focus-column-right; }
233233+ Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-column-left; }
234234+ Mod+Ctrl+Shift+WheelScrollDown cooldown-ms=150 { move-column-right; }
235235+ Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=150 { move-column-left; }
236236+237237+ // Similarly, you can bind touchpad scroll "ticks".
238238+ // Touchpad scrolling is continuous, so for these binds it is split into
239239+ // discrete intervals.
240240+ // These binds are also affected by touchpad's natural-scroll, so these
241241+ // example binds are "inverted", since we have natural-scroll enabled for
242242+ // touchpads by default.
243243+ // Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
244244+ // Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
245245+246246+ // You can refer to workspaces by index. However, keep in mind that
247247+ // niri is a dynamic workspace system, so these commands are kind of
248248+ // "best effort". Trying to refer to a workspace index bigger than
249249+ // the current workspace count will instead refer to the bottommost
250250+ // (empty) workspace.
251251+ //
252252+ // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
253253+ // will all refer to the 3rd workspace.
254254+ Mod+1 { focus-workspace 1; }
255255+ Mod+2 { focus-workspace 2; }
256256+ Mod+3 { focus-workspace 3; }
257257+ Mod+4 { focus-workspace 4; }
258258+ Mod+5 { focus-workspace 5; }
259259+ Mod+6 { focus-workspace 6; }
260260+ Mod+7 { focus-workspace 7; }
261261+ Mod+8 { focus-workspace 8; }
262262+ Mod+9 { focus-workspace 9; }
263263+ Mod+Ctrl+1 { move-column-to-workspace 1; }
264264+ Mod+Ctrl+2 { move-column-to-workspace 2; }
265265+ Mod+Ctrl+3 { move-column-to-workspace 3; }
266266+ Mod+Ctrl+4 { move-column-to-workspace 4; }
267267+ Mod+Ctrl+5 { move-column-to-workspace 5; }
268268+ Mod+Ctrl+6 { move-column-to-workspace 6; }
269269+ Mod+Ctrl+7 { move-column-to-workspace 7; }
270270+ Mod+Ctrl+8 { move-column-to-workspace 8; }
271271+ Mod+Ctrl+9 { move-column-to-workspace 9; }
272272+273273+ // Alternatively, there are commands to move just a single window:
274274+ // Mod+Ctrl+1 { move-window-to-workspace 1; }
275275+276276+ // Switches focus between the current and the previous workspace.
277277+ // Mod+Tab { focus-workspace-previous; }
278278+279279+ // The following binds move the focused window in and out of a column.
280280+ // If the window is alone, they will consume it into the nearby column to the side.
281281+ // If the window is already in a column, they will expel it out.
282282+ Mod+BracketLeft { consume-or-expel-window-left; }
283283+ Mod+BracketRight { consume-or-expel-window-right; }
284284+285285+ // Consume one window from the right to the bottom of the focused column.
286286+ Mod+Comma { consume-window-into-column; }
287287+ // Expel the bottom window from the focused column to the right.
288288+ Mod+Period { expel-window-from-column; }
289289+290290+ Mod+R { switch-preset-column-width; }
291291+ // Cycling through the presets in reverse order is also possible.
292292+ // Mod+R { switch-preset-column-width-back; }
293293+ Mod+Shift+R { switch-preset-window-height; }
294294+ Mod+Ctrl+R { reset-window-height; }
295295+ Mod+F { maximize-column; }
296296+ Mod+Shift+F { fullscreen-window; }
297297+298298+ // Expand the focused column to space not taken up by other fully visible columns.
299299+ // Makes the column "fill the rest of the space".
300300+ Mod+Ctrl+F { expand-column-to-available-width; }
301301+302302+ Mod+C { center-column; }
303303+304304+ // Center all fully visible columns on screen.
305305+ Mod+Ctrl+C { center-visible-columns; }
306306+307307+ // Finer width adjustments.
308308+ // This command can also:
309309+ // * set width in pixels: "1000"
310310+ // * adjust width in pixels: "-5" or "+5"
311311+ // * set width as a percentage of screen width: "25%"
312312+ // * adjust width as a percentage of screen width: "-10%" or "+10%"
313313+ // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
314314+ // set-column-width "100" will make the column occupy 200 physical screen pixels.
315315+ Mod+Minus { set-column-width "-5%"; }
316316+ Mod+Equal { set-column-width "+5%"; }
317317+318318+ // Finer height adjustments when in column with other windows.
319319+ Mod+Shift+Minus { set-window-height "-5%"; }
320320+ Mod+Shift+Equal { set-window-height "+5%"; }
321321+322322+ // Move the focused window between the floating and the tiling layout.
323323+ Mod+V allow-inhibiting=false { toggle-window-floating; }
324324+ Mod+Shift+V allow-inhibiting=false { switch-focus-between-floating-and-tiling; }
325325+326326+ // Toggle tabbed column display mode.
327327+ // Windows in this column will appear as vertical tabs,
328328+ // rather than stacked on top of each other.
329329+ Mod+W { toggle-column-tabbed-display; }
330330+331331+ // Actions to switch layouts.
332332+ // Note: if you uncomment these, make sure you do NOT have
333333+ // a matching layout switch hotkey configured in xkb options above.
334334+ // Having both at once on the same hotkey will break the switching,
335335+ // since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
336336+ // Mod+Space { switch-layout "next"; }
337337+ // Mod+Shift+Space { switch-layout "prev"; }
338338+339339+ Print { screenshot; }
340340+ Ctrl+Print { screenshot-screen; }
341341+ Alt+Print { screenshot-window; }
342342+343343+ // Applications such as remote-desktop clients and software KVM switches may
344344+ // request that niri stops processing the keyboard shortcuts defined here
345345+ // so they may, for example, forward the key presses as-is to a remote machine.
346346+ // It's a good idea to bind an escape hatch to toggle the inhibitor,
347347+ // so a buggy application can't hold your session hostage.
348348+ //
349349+ // The allow-inhibiting=false property can be applied to other binds as well,
350350+ // which ensures niri always processes them, even when an inhibitor is active.
351351+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
352352+353353+ // The quit action will show a confirmation dialog to avoid accidental exits.
354354+ Mod+Shift+E { quit; }
355355+ Ctrl+Alt+Delete { quit; }
356356+357357+ // Powers off the monitors. To turn them back on, do any input like
358358+ // moving the mouse or pressing any other key.
359359+ Mod+Shift+P { power-off-monitors; }
360360+}
361361+362362+include "./noctalia.kdl"