···11+// This config is in the KDL format: https://kdl.dev
22+// "/-" comments out the following node.
33+44+input {
55+ keyboard {
66+ xkb {
77+ // You can set rules, model, layout, variant and options.
88+ // For more information, see xkeyboard-config(7).
99+1010+ // For example:
1111+ // layout "us,ru"
1212+ // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
1313+ }
1414+1515+ // You can set the keyboard repeat parameters. The defaults match wlroots and sway.
1616+ // Delay is in milliseconds before the repeat starts. Rate is in characters per second.
1717+ // repeat-delay 600
1818+ // repeat-rate 25
1919+2020+ // Niri can remember the keyboard layout globally (the default) or per-window.
2121+ // - "global" - layout change is global for all windows.
2222+ // - "window" - layout is tracked for each window individually.
2323+ // track-layout "global"
2424+ }
2525+2626+ // Next sections include libinput settings.
2727+ // Omitting settings disables them, or leaves them at their default values.
2828+ touchpad {
2929+ tap
3030+ // dwt
3131+ // dwtp
3232+ // natural-scroll
3333+ // accel-speed 0.2
3434+ // accel-profile "flat"
3535+ // tap-button-map "left-middle-right"
3636+ }
3737+3838+ mouse {
3939+ // natural-scroll
4040+ // accel-speed 0.2
4141+ // accel-profile "flat"
4242+ }
4343+4444+ trackpoint {
4545+ // natural-scroll
4646+ // accel-speed 0.2
4747+ // accel-profile "flat"
4848+ }
4949+5050+ tablet {
5151+ // Set the name of the output (see below) which the tablet will map to.
5252+ // If this is unset or the output doesn't exist, the tablet maps to one of the
5353+ // existing outputs.
5454+ map-to-output "eDP-1"
5555+ }
5656+5757+ touch {
5858+ // Set the name of the output (see below) which touch input will map to.
5959+ // If this is unset or the output doesn't exist, touch input maps to one of the
6060+ // existing outputs.
6161+ map-to-output "eDP-1"
6262+ }
6363+6464+ // By default, niri will take over the power button to make it sleep
6565+ // instead of power off.
6666+ // Uncomment this if you would like to configure the power button elsewhere
6767+ // (i.e. logind.conf).
6868+ // disable-power-key-handling
6969+}
7070+7171+// You can configure outputs by their name, which you can find
7272+// by running `niri msg outputs` while inside a niri instance.
7373+// The built-in laptop monitor is usually called "eDP-1".
7474+// Remember to uncomment the node by removing "/-"!
7575+output "eDP-1" {
7676+ // Uncomment this line to disable this output.
7777+ // off
7878+7979+ // Scale is a floating-point number, but at the moment only integer values work.
8080+ scale 2.0
8181+8282+ // Transform allows to rotate the output counter-clockwise, valid values are:
8383+ // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
8484+ transform "normal"
8585+8686+ // Resolution and, optionally, refresh rate of the output.
8787+ // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
8888+ // If the refresh rate is omitted, niri will pick the highest refresh rate
8989+ // for the resolution.
9090+ // If the mode is omitted altogether or is invalid, niri will pick one automatically.
9191+ // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
9292+ mode "1920x1080"
9393+9494+ // Position of the output in the global coordinate space.
9595+ // This affects directional monitor actions like "focus-monitor-left", and cursor movement.
9696+ // The cursor can only move between directly adjacent outputs.
9797+ // Output scale has to be taken into account for positioning:
9898+ // outputs are sized in logical, or scaled, pixels.
9999+ // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
100100+ // so to put another output directly adjacent to it on the right, set its x to 1920.
101101+ // It the position is unset or results in an overlap, the output is instead placed
102102+ // automatically.
103103+ position x=1280 y=0
104104+}
105105+106106+layout {
107107+ // By default focus ring and border are rendered as a solid background rectangle
108108+ // behind windows. That is, they will show up through semitransparent windows.
109109+ // This is because windows using client-side decorations can have an arbitrary shape.
110110+ //
111111+ // If you don't like that, you should uncomment `prefer-no-csd` below.
112112+ // Niri will draw focus ring and border *around* windows that agree to omit their
113113+ // client-side decorations.
114114+115115+ // You can change how the focus ring looks.
116116+ focus-ring {
117117+ // Uncomment this line to disable the focus ring.
118118+ // off
119119+120120+ // How many logical pixels the ring extends out from the windows.
121121+ width 3
122122+123123+ // Colors can be set in a variety of ways:
124124+ // - CSS named colors: "red"
125125+ // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
126126+ // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
127127+128128+ // Color of the ring on the active monitor.
129129+ active-color "#7fc8ff"
130130+131131+ // Color of the ring on inactive monitors.
132132+ inactive-color "#505050"
133133+134134+ // Additionally, there's a legacy RGBA syntax:
135135+ // active-color 127 200 255 255
136136+137137+ // You can also use gradients. They take precedence over solid colors.
138138+ // Gradients are rendered the same as CSS linear-gradient(angle, from, to).
139139+ // The angle is the same as in linear-gradient, and is optional,
140140+ // defaulting to 180 (top-to-bottom gradient).
141141+ // You can use any CSS linear-gradient tool on the web to set these up.
142142+ //
143143+ // active-gradient from="#80c8ff" to="#bbddff" angle=45
144144+145145+ // You can also color the gradient relative to the entire view
146146+ // of the workspace, rather than relative to just the window itself.
147147+ // To do that, set relative-to="workspace-view".
148148+ //
149149+ // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
150150+ }
151151+152152+ // You can also add a border. It's similar to the focus ring, but always visible.
153153+ border {
154154+ // The settings are the same as for the focus ring.
155155+ // If you enable the border, you probably want to disable the focus ring.
156156+ off
157157+158158+ width 4
159159+ active-color "#ffc87f"
160160+ inactive-color "#505050"
161161+162162+ // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
163163+ // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
164164+ }
165165+166166+ // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
167167+ preset-column-widths {
168168+ // Proportion sets the width as a fraction of the output width, taking gaps into account.
169169+ // For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
170170+ // The default preset widths are 1/3, 1/2 and 2/3 of the output.
171171+ proportion 0.33333
172172+ proportion 0.5
173173+ proportion 0.66667
174174+175175+ // Fixed sets the width in logical pixels exactly.
176176+ // fixed 1920
177177+ }
178178+179179+ // You can change the default width of the new windows.
180180+ default-column-width { proportion 0.5; }
181181+ // If you leave the brackets empty, the windows themselves will decide their initial width.
182182+ // default-column-width {}
183183+184184+ // Set gaps around windows in logical pixels.
185185+ gaps 4
186186+187187+ // Struts shrink the area occupied by windows, similarly to layer-shell panels.
188188+ // You can think of them as a kind of outer gaps. They are set in logical pixels.
189189+ // Left and right struts will cause the next window to the side to always be visible.
190190+ // Top and bottom struts will simply add outer gaps in addition to the area occupied by
191191+ // layer-shell panels and regular gaps.
192192+ struts {
193193+ // left 64
194194+ // right 64
195195+ // top 64
196196+ // bottom 64
197197+ }
198198+199199+ // When to center a column when changing focus, options are:
200200+ // - "never", default behavior, focusing an off-screen column will keep at the left
201201+ // or right edge of the screen.
202202+ // - "on-overflow", focusing a column will center it if it doesn't fit
203203+ // together with the previously focused column.
204204+ // - "always", the focused column will always be centered.
205205+ center-focused-column "never"
206206+}
207207+208208+// Add lines like this to spawn processes at startup.
209209+// Note that running niri as a session supports xdg-desktop-autostart,
210210+// which may be more convenient to use.
211211+// spawn-at-startup "alacritty" "-e" "fish"
212212+213213+// You can override environment variables for processes spawned by niri.
214214+environment {
215215+ // Set a variable like this:
216216+ // QT_QPA_PLATFORM "wayland"
217217+218218+ // Remove a variable by using null as the value:
219219+ // DISPLAY null
220220+}
221221+222222+cursor {
223223+ // Change the theme and size of the cursor as well as set the
224224+ // `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
225225+ // xcursor-theme "default"
226226+ // xcursor-size 24
227227+}
228228+229229+// Uncomment this line to ask the clients to omit their client-side decorations if possible.
230230+// If the client will specifically ask for CSD, the request will be honored.
231231+// Additionally, clients will be informed that they are tiled, removing some rounded corners.
232232+// prefer-no-csd
233233+234234+// You can change the path where screenshots are saved.
235235+// A ~ at the front will be expanded to the home directory.
236236+// The path is formatted with strftime(3) to give you the screenshot date and time.
237237+screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
238238+239239+// You can also set this to null to disable saving screenshots to disk.
240240+// screenshot-path null
241241+242242+// Settings for the "Important Hotkeys" overlay.
243243+hotkey-overlay {
244244+ // Uncomment this line if you don't want to see the hotkey help at niri startup.
245245+ // skip-at-startup
246246+}
247247+248248+// Animation settings.
249249+animations {
250250+ // Uncomment to turn off all animations.
251251+ // off
252252+253253+ // Slow down all animations by this factor. Values below 1 speed them up instead.
254254+ // slowdown 3.0
255255+256256+ // You can configure all individual animations.
257257+ // Available settings are the same for all of them.
258258+ // - off disables the animation.
259259+ //
260260+ // Niri supports two animation types: easing and spring.
261261+ // You can set properties for only ONE of them.
262262+ //
263263+ // Easing has the following settings:
264264+ // - duration-ms sets the duration of the animation in milliseconds.
265265+ // - curve sets the easing curve. Currently, available curves
266266+ // are "ease-out-cubic" and "ease-out-expo".
267267+ //
268268+ // Spring animations work better with touchpad gestures, because they
269269+ // take into account the velocity of your fingers as you release the swipe.
270270+ // The parameters are less obvious and generally should be tuned
271271+ // with trial and error. Notably, you cannot directly set the duration.
272272+ // You can use this app to help visualize how the spring parameters
273273+ // change the animation: https://flathub.org/apps/app.drey.Elastic
274274+ //
275275+ // A spring animation is configured like this:
276276+ // - spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001
277277+ //
278278+ // The damping ratio goes from 0.1 to 10.0 and has the following properties:
279279+ // - below 1.0: underdamped spring, will oscillate in the end.
280280+ // - above 1.0: overdamped spring, won't oscillate.
281281+ // - 1.0: critically damped spring, comes to rest in minimum possible time
282282+ // without oscillations.
283283+ //
284284+ // However, even with damping ratio = 1.0 the spring animation may oscillate
285285+ // if "launched" with enough velocity from a touchpad swipe.
286286+ //
287287+ // Lower stiffness will result in a slower animation more prone to oscillation.
288288+ //
289289+ // Set epsilon to a lower value if the animation "jumps" in the end.
290290+ //
291291+ // The spring mass is hardcoded to 1.0 and cannot be changed. Instead, change
292292+ // stiffness proportionally. E.g. increasing mass by 2x is the same as
293293+ // decreasing stiffness by 2x.
294294+295295+ // Animation when switching workspaces up and down,
296296+ // including after the touchpad gesture.
297297+ workspace-switch {
298298+ // off
299299+ // spring damping-ratio=1.0 stiffness=1000 epsilon=0.0001
300300+ }
301301+302302+ // All horizontal camera view movement:
303303+ // - When a window off-screen is focused and the camera scrolls to it.
304304+ // - When a new window appears off-screen and the camera scrolls to it.
305305+ // - When a window resizes bigger and the camera scrolls to show it in full.
306306+ // - And so on.
307307+ horizontal-view-movement {
308308+ // off
309309+ // spring damping-ratio=1.0 stiffness=800 epsilon=0.0001
310310+ }
311311+312312+ // Window opening animation. Note that this one has different defaults.
313313+ window-open {
314314+ // off
315315+ // duration-ms 150
316316+ // curve "ease-out-expo"
317317+318318+ // Example for a slightly bouncy window opening:
319319+ // spring damping-ratio=0.8 stiffness=1000 epsilon=0.0001
320320+ }
321321+322322+ // Config parse error and new default config creation notification
323323+ // open/close animation.
324324+ config-notification-open-close {
325325+ // off
326326+ // spring damping-ratio=0.6 stiffness=1000 epsilon=0.001
327327+ }
328328+}
329329+330330+// Window rules let you adjust behavior for individual windows.
331331+// They are processed in order of appearance in this file.
332332+// (This example rule is commented out with a "/-" in front.)
333333+/-window-rule {
334334+ // Match directives control which windows this rule will apply to.
335335+ // You can match by app-id and by title.
336336+ // The window must match all properties of the match directive.
337337+ match app-id="org.myapp.MyApp" title="My Cool App"
338338+339339+ // There can be multiple match directives. A window must match any one
340340+ // of the rule's match directives.
341341+ //
342342+ // If there are no match directives, any window will match the rule.
343343+ match title="Second App"
344344+345345+ // You can also add exclude directives which have the same properties.
346346+ // If a window matches any exclude directive, it won't match this rule.
347347+ //
348348+ // Both app-id and title are regular expressions.
349349+ // Raw KDL strings are helpful here.
350350+ exclude app-id=r#"\.unwanted\."#
351351+352352+ // Here are the properties that you can set on a window rule.
353353+ // You can override the default column width.
354354+ default-column-width { proportion 0.75; }
355355+356356+ // You can set the output that this window will initially open on.
357357+ // If such an output does not exist, it will open on the currently
358358+ // focused output as usual.
359359+ open-on-output "eDP-1"
360360+361361+ // Make this window open as a maximized column.
362362+ open-maximized true
363363+364364+ // Make this window open fullscreen.
365365+ open-fullscreen true
366366+ // You can also set this to false to prevent a window from opening fullscreen.
367367+ // open-fullscreen false
368368+}
369369+370370+// Here's a useful example. Work around WezTerm's initial configure bug
371371+// by setting an empty default-column-width.
372372+window-rule {
373373+ // This regular expression is intentionally made as specific as possible,
374374+ // since this is the default config, and we want no false positives.
375375+ // You can get away with just app-id="wezterm" if you want.
376376+ // The regular expression can match anywhere in the string.
377377+ match app-id=r#"^org\.wezfurlong\.wezterm$"#
378378+ default-column-width {}
379379+}
380380+381381+binds {
382382+ // Keys consist of modifiers separated by + signs, followed by an XKB key name
383383+ // in the end. To find an XKB name for a particular key, you may use a program
384384+ // like wev.
385385+ //
386386+ // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
387387+ // when running as a winit window.
388388+ //
389389+ // Most actions that you can bind here can also be invoked programmatically with
390390+ // `niri msg action do-something`.
391391+392392+ // Mod-Shift-/, which is usually the same as Mod-?,
393393+ // shows a list of important hotkeys.
394394+ Mod+Shift+Slash { show-hotkey-overlay; }
395395+396396+ // Suggested binds for running programs: terminal, app launcher, screen locker.
397397+ Mod+Return { spawn "foot"; }
398398+ Mod+D { spawn "fuzzel"; }
399399+ Mod+Shift+L { spawn "swaylock"; }
400400+401401+ // You can also use a shell:
402402+ // Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
403403+404404+ // Example volume keys mappings for PipeWire & WirePlumber.
405405+ XF86AudioRaiseVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
406406+ XF86AudioLowerVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
407407+408408+ Mod+Shift+Q { close-window; }
409409+410410+ Mod+Left { focus-column-left; }
411411+ Mod+Down { focus-window-down; }
412412+ Mod+Up { focus-window-up; }
413413+ Mod+Right { focus-column-right; }
414414+ Mod+H { focus-column-left; }
415415+ Mod+J { focus-window-down; }
416416+ Mod+K { focus-window-up; }
417417+ Mod+L { focus-column-right; }
418418+419419+ Mod+Ctrl+Left { move-column-left; }
420420+ Mod+Ctrl+Down { move-window-down; }
421421+ Mod+Ctrl+Up { move-window-up; }
422422+ Mod+Ctrl+Right { move-column-right; }
423423+ Mod+Ctrl+H { move-column-left; }
424424+ Mod+Ctrl+J { move-window-down; }
425425+ Mod+Ctrl+K { move-window-up; }
426426+ Mod+Ctrl+L { move-column-right; }
427427+428428+ // Alternative commands that move across workspaces when reaching
429429+ // the first or last window in a column.
430430+ // Mod+J { focus-window-or-workspace-down; }
431431+ // Mod+K { focus-window-or-workspace-up; }
432432+ // Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
433433+ // Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
434434+435435+ Mod+Home { focus-column-first; }
436436+ Mod+End { focus-column-last; }
437437+ Mod+Ctrl+Home { move-column-to-first; }
438438+ Mod+Ctrl+End { move-column-to-last; }
439439+440440+ // Mod+Shift+Left { focus-monitor-left; }
441441+ // Mod+Shift+Down { focus-monitor-down; }
442442+ // Mod+Shift+Up { focus-monitor-up; }
443443+ // Mod+Shift+Right { focus-monitor-right; }
444444+ // Mod+Shift+H { focus-monitor-left; }
445445+ // Mod+Shift+J { focus-monitor-down; }
446446+ // Mod+Shift+K { focus-monitor-up; }
447447+ // Mod+Shift+L { focus-monitor-right; }
448448+449449+ Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
450450+ Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
451451+ Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
452452+ Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
453453+ Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
454454+ Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
455455+ Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
456456+ Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
457457+458458+ // Alternatively, there are commands to move just a single window:
459459+ // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
460460+ // ...
461461+462462+ // And you can also move a whole workspace to another monitor:
463463+ // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
464464+ // ...
465465+466466+ Mod+Page_Down { focus-workspace-down; }
467467+ Mod+Page_Up { focus-workspace-up; }
468468+ Mod+U { focus-workspace-down; }
469469+ Mod+I { focus-workspace-up; }
470470+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
471471+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
472472+ Mod+Ctrl+U { move-column-to-workspace-down; }
473473+ Mod+Ctrl+I { move-column-to-workspace-up; }
474474+475475+ // Alternatively, there are commands to move just a single window:
476476+ // Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
477477+ // ...
478478+479479+ Mod+Shift+Page_Down { move-workspace-down; }
480480+ Mod+Shift+Page_Up { move-workspace-up; }
481481+ Mod+Shift+U { move-workspace-down; }
482482+ Mod+Shift+I { move-workspace-up; }
483483+484484+ // You can refer to workspaces by index. However, keep in mind that
485485+ // niri is a dynamic workspace system, so these commands are kind of
486486+ // "best effort". Trying to refer to a workspace index bigger than
487487+ // the current workspace count will instead refer to the bottommost
488488+ // (empty) workspace.
489489+ //
490490+ // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
491491+ // will all refer to the 3rd workspace.
492492+ Mod+1 { focus-workspace 1; }
493493+ Mod+2 { focus-workspace 2; }
494494+ Mod+3 { focus-workspace 3; }
495495+ Mod+4 { focus-workspace 4; }
496496+ Mod+5 { focus-workspace 5; }
497497+ Mod+6 { focus-workspace 6; }
498498+ Mod+7 { focus-workspace 7; }
499499+ Mod+8 { focus-workspace 8; }
500500+ Mod+9 { focus-workspace 9; }
501501+ Mod+Ctrl+1 { move-column-to-workspace 1; }
502502+ Mod+Ctrl+2 { move-column-to-workspace 2; }
503503+ Mod+Ctrl+3 { move-column-to-workspace 3; }
504504+ Mod+Ctrl+4 { move-column-to-workspace 4; }
505505+ Mod+Ctrl+5 { move-column-to-workspace 5; }
506506+ Mod+Ctrl+6 { move-column-to-workspace 6; }
507507+ Mod+Ctrl+7 { move-column-to-workspace 7; }
508508+ Mod+Ctrl+8 { move-column-to-workspace 8; }
509509+ Mod+Ctrl+9 { move-column-to-workspace 9; }
510510+511511+ // Alternatively, there are commands to move just a single window:
512512+ // Mod+Ctrl+1 { move-window-to-workspace 1; }
513513+514514+ Mod+Comma { consume-window-into-column; }
515515+ Mod+Period { expel-window-from-column; }
516516+517517+ // There are also commands that consume or expel a single window to the side.
518518+ // Mod+BracketLeft { consume-or-expel-window-left; }
519519+ // Mod+BracketRight { consume-or-expel-window-right; }
520520+521521+ Mod+R { switch-preset-column-width; }
522522+ Mod+F { maximize-column; }
523523+ Mod+Shift+F { fullscreen-window; }
524524+ Mod+C { center-column; }
525525+526526+ // Finer width adjustments.
527527+ // This command can also:
528528+ // * set width in pixels: "1000"
529529+ // * adjust width in pixels: "-5" or "+5"
530530+ // * set width as a percentage of screen width: "25%"
531531+ // * adjust width as a percentage of screen width: "-10%" or "+10%"
532532+ // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
533533+ // set-column-width "100" will make the column occupy 200 physical screen pixels.
534534+ Mod+Minus { set-column-width "-10%"; }
535535+ Mod+Equal { set-column-width "+10%"; }
536536+537537+ // Finer height adjustments when in column with other windows.
538538+ Mod+Shift+Minus { set-window-height "-10%"; }
539539+ Mod+Shift+Equal { set-window-height "+10%"; }
540540+541541+ // Actions to switch layouts.
542542+ // Note: if you uncomment these, make sure you do NOT have
543543+ // a matching layout switch hotkey configured in xkb options above.
544544+ // Having both at once on the same hotkey will break the switching,
545545+ // since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
546546+ // Mod+Space { switch-layout "next"; }
547547+ // Mod+Shift+Space { switch-layout "prev"; }
548548+549549+ Print { screenshot; }
550550+ Ctrl+Print { screenshot-screen; }
551551+ Alt+Print { screenshot-window; }
552552+553553+ // The quit action will show a confirmation dialog to avoid accidental exits.
554554+ // If you want to skip the confirmation dialog, set the flag like so:
555555+ // Mod+Shift+E { quit skip-confirmation=true; }
556556+ Mod+Shift+E { quit; }
557557+558558+ Mod+Shift+P { power-off-monitors; }
559559+560560+ // This debug bind will tint all surfaces green, unless they are being
561561+ // directly scanned out. It's therefore useful to check if direct scanout
562562+ // is working.
563563+ // Mod+Shift+Ctrl+T { toggle-debug-tint; }
564564+}
565565+566566+// Settings for debugging. Not meant for normal use.
567567+// These can change or stop working at any point with little notice.
568568+debug {
569569+ // Make niri take over its DBus services even if it's not running as a session.
570570+ // Useful for testing screen recording changes without having to relogin.
571571+ // The main niri instance will *not* currently take back the services; so you will
572572+ // need to relogin in the end.
573573+ // dbus-interfaces-in-non-session-instances
574574+575575+ // Wait until every frame is done rendering before handing it over to DRM.
576576+ // wait-for-frame-completion-before-queueing
577577+578578+ // Enable direct scanout into overlay planes.
579579+ // May cause frame drops during some animations on some hardware.
580580+ // enable-overlay-planes
581581+582582+ // Disable the use of the cursor plane.
583583+ // The cursor will be rendered together with the rest of the frame.
584584+ // disable-cursor-plane
585585+586586+ // Override the DRM device that niri will use for all rendering.
587587+ // render-drm-device "/dev/dri/renderD129"
588588+589589+ // Enable the color-transformations capability of the Smithay renderer.
590590+ // May cause a slight decrease in rendering performance.
591591+ // enable-color-transformations-capability
592592+593593+ // Emulate zero (unknown) presentation time returned from DRM.
594594+ // This is a thing on NVIDIA proprietary drivers, so this flag can be
595595+ // used to test that we don't break too hard on those systems.
596596+ // emulate-zero-presentation-time
597597+}