- declarations
- settings/includes.nix
- type
partitioned list of ((config include) or path convertible to it) - declarations
- settings/includes.nix
- type
path - declarations
- settings/includes.nix
- type
boolean - default
path is a store path - declarations
- settings/input.nix
- declarations
- settings/input.nix
- declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or non-empty string - default
null - declarations
- settings/input.nix
- type
null or non-empty string - default
null - declarations
- settings/input.nix
- type
null or non-empty string - default
null - declarations
- settings/input.nix
- type
null or non-empty string - default
null - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
null or one of "global", "window" - default
null - declarations
- settings/input.nix
- type
null or boolean - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "adaptive", "flat" - default
null - declarations
- settings/input.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "no-scroll", "two-finger", "edge", "on-button-down" - default
null - declarations
- settings/input.nix
- type
null or floating point number or signed integer or (submodule) - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or (2x3 matrix) - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or (2x3 matrix) - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "adaptive", "flat" - default
null - declarations
- settings/input.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "no-scroll", "two-finger", "edge", "on-button-down" - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or boolean - default
null - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "left-middle-right", "left-right-middle" - default
null - declarations
- settings/input.nix
- type
null or one of "button-areas", "clickfinger" - default
null "button-areas": Software button areas The button is determined by which part of the touchpad was clicked."clickfinger": Clickfinger behavior The button is determined by how many fingers clicked.- declarations
- settings/input.nix
- type
null or floating point number or signed integer or (submodule) - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "adaptive", "flat" - default
null - declarations
- settings/input.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "no-scroll", "two-finger", "edge", "on-button-down" - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
boolean - default
true - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "adaptive", "flat" - default
null - declarations
- settings/input.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/input.nix
- type
null or signed integer - default
null - declarations
- settings/input.nix
- type
boolean - default
false - declarations
- settings/input.nix
- type
null or one of "no-scroll", "two-finger", "edge", "on-button-down" - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
value true (singular enum) - default
true - declarations
- settings/input.nix
- type
null or one of "center-xy", "center-xy-always" - default
null - declarations
- settings/input.nix
- type
null or (submodule) - default
null - declarations
- settings/input.nix
- type
value true (singular enum) - default
true - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or boolean - default
null - declarations
- settings/input.nix
- type
null or boolean - default
null - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/input.nix
- type
null or string - default
null - declarations
- settings/binds.nix
- type
attribute set of (niri keybind) - declarations
- settings/binds.nix
- type
boolean - default
false - declarations
- settings/binds.nix
- type
boolean - default
true - declarations
- settings/binds.nix
- type
null or signed integer - default
null - declarations
- settings/binds.nix
- type
boolean - default
true - declarations
- settings/binds.nix
- type
attribute-tagged union with choices: hidden, title - default
{ hidden = false; } By default,
{hidden = false;}maps to omitting this from the KDL config; the default title of the action will be used.{hidden = true;}will emithotkey-overlay-title=nullin the KDL config, and the hotkey overlay will not contain this keybind at all.{title = "foo";}will emithotkey-overlay-title="foo"in the KDL config, and the hotkey overlay will show "foo" as the title of this keybind.- declarations
- settings/binds.nix
- type
boolean - declarations
- settings/binds.nix
- type
string - declarations
- settings/binds.nix
- type
kdl leaf - declarations
- settings/switch-events.nix
- declarations
- settings/switch-events.nix
- type
null or (niri switch bind) - default
null - declarations
- settings/switch-events.nix
- type
kdl leaf - declarations
- settings/switch-events.nix
- type
null or (niri switch bind) - default
null - declarations
- settings/switch-events.nix
- type
kdl leaf - declarations
- settings/switch-events.nix
- type
null or (niri switch bind) - default
null - declarations
- settings/switch-events.nix
- type
kdl leaf - declarations
- settings/switch-events.nix
- type
null or (niri switch bind) - default
null - declarations
- settings/switch-events.nix
- type
kdl leaf - declarations
- settings/gestures.nix
- declarations
- settings/gestures.nix
- declarations
- settings/gestures.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/gestures.nix
- type
null or signed integer - default
null - declarations
- settings/gestures.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/gestures.nix
- declarations
- settings/gestures.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/gestures.nix
- type
null or signed integer - default
null - declarations
- settings/gestures.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/interactions/hot-corners.nix
- overridden by
outputs .<name> .hot-corners - type
null or (submodule) - default
null - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/animations.nix
- declarations
- settings/animations.nix
- type
null or boolean - default
null - declarations
- settings/animations.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
null or string - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
null or string - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
null or string - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
null or (submodule) - default
null - declarations
- settings/animations.nix
- type
boolean - default
true - declarations
- settings/animations.nix
- type
null or attribute-tagged union with choices: easing, spring - default
null - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier" - declarations
- settings/animations.nix
- type
list of KDL value without type annotation - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/animations.nix
- type
submodule - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
floating point number - declarations
- settings/animations.nix
- type
signed integer - declarations
- settings/overview.nix
- declarations
- settings/appearance/background.nix
- overridden by
outputs .<name> .backdrop-color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- declarations
- settings/appearance/shadows.nix
- type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- type
null or string - default
null - declarations
- settings/overview.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/layout.nix
- refined by
outputs .<name> .layout workspaces .<name> .layout - declarations
- settings/appearance/background.nix
- overridden by
outputs .<name> .layout .background-color workspaces .<name> .layout .background-color - type
null or string - default
null - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .gaps workspaces .<name> .layout .gaps - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .struts workspaces .<name> .layout .struts - type
null or (submodule) - default
null - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .empty-workspace-above-first - type
null or boolean - default
null - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .preset-column-widths workspaces .<name> .layout .preset-column-widths - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .preset-window-heights workspaces .<name> .layout .preset-window-heights - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .default-column-width workspaces .<name> .layout .default-column-width window-rules .* .default-column-width - type
null or {} or attribute-tagged union with choices: fixed, proportion - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .default-column-display workspaces .<name> .layout .default-column-display window-rules .* .default-column-display - type
null or one of "normal", "tabbed" - default
null "normal": Windows are arranged vertically, spread across the working area height."tabbed": Windows are arranged in tabs, with only the focused window visible, taking up the full height of the working area.- declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .center-focused-column workspaces .<name> .layout .center-focused-column - type
null or one of "never", "always", "on-overflow" - default
null "never": If the focused column doesn't fit, it will be aligned to the edges of the screen."on-overflow": if the focused column doesn't fit, it will be centered on the screen."always": the focused column will always be centered, even if it was already fully visible.- declarations
- settings/appearance/layout.nix
- overridden by
outputs .<name> .layout .always-center-single-column workspaces .<name> .layout .always-center-single-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- refined by
outputs .<name> .layout .border workspaces .<name> .layout .border window-rules .* .border - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .border .enable workspaces .<name> .layout .border .enable window-rules .* .border .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .border .width workspaces .<name> .layout .border .width window-rules .* .border .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .border .urgent workspaces .<name> .layout .border .urgent window-rules .* .border .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .border .active workspaces .<name> .layout .border .active window-rules .* .border .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .border .inactive workspaces .<name> .layout .border .inactive window-rules .* .border .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refined by
outputs .<name> .layout .focus-ring workspaces .<name> .layout .focus-ring window-rules .* .focus-ring - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .focus-ring .enable workspaces .<name> .layout .focus-ring .enable window-rules .* .focus-ring .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .focus-ring .width workspaces .<name> .layout .focus-ring .width window-rules .* .focus-ring .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .focus-ring .urgent workspaces .<name> .layout .focus-ring .urgent window-rules .* .focus-ring .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .focus-ring .active workspaces .<name> .layout .focus-ring .active window-rules .* .focus-ring .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .focus-ring .inactive workspaces .<name> .layout .focus-ring .inactive window-rules .* .focus-ring .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refined by
outputs .<name> .layout .insert-hint - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .insert-hint .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .insert-hint .display - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refined by
outputs .<name> .layout .tab-indicator workspaces .<name> .layout .tab-indicator window-rules .* .tab-indicator - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .enable workspaces .<name> .layout .tab-indicator .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .hide-when-single-tab workspaces .<name> .layout .tab-indicator .hide-when-single-tab - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .place-within-column workspaces .<name> .layout .tab-indicator .place-within-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .gap workspaces .<name> .layout .tab-indicator .gap - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .width workspaces .<name> .layout .tab-indicator .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .length workspaces .<name> .layout .tab-indicator .length - type
null or (submodule) - default
null - declarations
- settings/appearance/decorations.nix
- type
floating point number - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .position workspaces .<name> .layout .tab-indicator .position - type
null or one of "left", "right", "top", "bottom" - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .gaps-between-tabs workspaces .<name> .layout .tab-indicator .gaps-between-tabs - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .corner-radius workspaces .<name> .layout .tab-indicator .corner-radius - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .urgent workspaces .<name> .layout .tab-indicator .urgent window-rules .* .tab-indicator .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .active workspaces .<name> .layout .tab-indicator .active window-rules .* .tab-indicator .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overridden by
outputs .<name> .layout .tab-indicator .inactive workspaces .<name> .layout .tab-indicator .inactive window-rules .* .tab-indicator .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/shadows.nix
- refined by
outputs .<name> .layout .shadow workspaces .<name> .layout .shadow window-rules .* .shadow layer-rules .* .shadow - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .enable workspaces .<name> .layout .shadow .enable window-rules .* .shadow .enable - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .offset workspaces .<name> .layout .shadow .offset window-rules .* .shadow .offset layer-rules .* .shadow .offset - type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .softness workspaces .<name> .layout .shadow .softness window-rules .* .shadow .softness layer-rules .* .shadow .softness - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .spread workspaces .<name> .layout .shadow .spread window-rules .* .shadow .spread layer-rules .* .shadow .spread - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .draw-behind-window workspaces .<name> .layout .shadow .draw-behind-window window-rules .* .shadow .draw-behind-window layer-rules .* .shadow .draw-behind-window - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .color workspaces .<name> .layout .shadow .color window-rules .* .shadow .color layer-rules .* .shadow .color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- overridden by
outputs .<name> .layout .shadow .inactive-color workspaces .<name> .layout .shadow .inactive-color window-rules .* .shadow .inactive-color layer-rules .* .shadow .inactive-color - type
null or string - default
null - declarations
- settings/outputs.nix
- type
attribute set of (submodule) - declarations
- settings/outputs.nix
- type
string - default
the key of the output - declarations
- settings/outputs.nix
- type
boolean - default
true - declarations
- settings/outputs.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/outputs.nix
- type
boolean - default
false - declarations
- settings/outputs.nix
- type
one of 0, 90, 180, 270 - default
0 - declarations
- settings/outputs.nix
- type
null or (submodule) - default
null - declarations
- settings/outputs.nix
- type
signed integer - declarations
- settings/outputs.nix
- type
signed integer - declarations
- settings/outputs.nix
- type
null or (submodule) - default
null - declarations
- settings/outputs.nix
- type
signed integer - declarations
- settings/outputs.nix
- type
null or floating point number - default
null - declarations
- settings/outputs.nix
- type
signed integer - declarations
- settings/outputs.nix
- type
one of false, "on-demand", true - default
false - declarations
- settings/outputs.nix
- type
boolean - default
false - declarations
- settings/appearance/background.nix
- overrides
overview .backdrop-color - type
null or string - default
null - declarations
- settings/appearance/layout.nix
- refines
layout - refined by
workspaces .<name> .layout - declarations
- settings/appearance/background.nix
- overrides
layout .background-color - overridden by
workspaces .<name> .layout .background-color - type
null or string - default
null - declarations
- settings/appearance/layout.nix
- overrides
layout .gaps - overridden by
workspaces .<name> .layout .gaps - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/layout.nix
- overrides
layout .struts - overridden by
workspaces .<name> .layout .struts - type
null or (submodule) - default
null - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- overrides
layout .empty-workspace-above-first - type
null or boolean - default
null - declarations
- settings/appearance/layout.nix
- overrides
layout .preset-column-widths - overridden by
workspaces .<name> .layout .preset-column-widths - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .preset-window-heights - overridden by
workspaces .<name> .layout .preset-window-heights - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-width - overridden by
workspaces .<name> .layout .default-column-width window-rules .* .default-column-width - type
null or {} or attribute-tagged union with choices: fixed, proportion - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-display - overridden by
workspaces .<name> .layout .default-column-display window-rules .* .default-column-display - type
null or one of "normal", "tabbed" - default
null "normal": Windows are arranged vertically, spread across the working area height."tabbed": Windows are arranged in tabs, with only the focused window visible, taking up the full height of the working area.- declarations
- settings/appearance/layout.nix
- overrides
layout .center-focused-column - overridden by
workspaces .<name> .layout .center-focused-column - type
null or one of "never", "always", "on-overflow" - default
null "never": If the focused column doesn't fit, it will be aligned to the edges of the screen."on-overflow": if the focused column doesn't fit, it will be centered on the screen."always": the focused column will always be centered, even if it was already fully visible.- declarations
- settings/appearance/layout.nix
- overrides
layout .always-center-single-column - overridden by
workspaces .<name> .layout .always-center-single-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- refines
layout .border - refined by
workspaces .<name> .layout .border window-rules .* .border - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .enable - overridden by
workspaces .<name> .layout .border .enable window-rules .* .border .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .width - overridden by
workspaces .<name> .layout .border .width window-rules .* .border .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .urgent - overridden by
workspaces .<name> .layout .border .urgent window-rules .* .border .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .active - overridden by
workspaces .<name> .layout .border .active window-rules .* .border .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .inactive - overridden by
workspaces .<name> .layout .border .inactive window-rules .* .border .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .focus-ring - refined by
workspaces .<name> .layout .focus-ring window-rules .* .focus-ring - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .enable - overridden by
workspaces .<name> .layout .focus-ring .enable window-rules .* .focus-ring .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .width - overridden by
workspaces .<name> .layout .focus-ring .width window-rules .* .focus-ring .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .urgent - overridden by
workspaces .<name> .layout .focus-ring .urgent window-rules .* .focus-ring .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .active - overridden by
workspaces .<name> .layout .focus-ring .active window-rules .* .focus-ring .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .inactive - overridden by
workspaces .<name> .layout .focus-ring .inactive window-rules .* .focus-ring .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .insert-hint - declarations
- settings/appearance/decorations.nix
- overrides
layout .insert-hint .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .insert-hint .display - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .tab-indicator - refined by
workspaces .<name> .layout .tab-indicator window-rules .* .tab-indicator - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .enable - overridden by
workspaces .<name> .layout .tab-indicator .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .hide-when-single-tab - overridden by
workspaces .<name> .layout .tab-indicator .hide-when-single-tab - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .place-within-column - overridden by
workspaces .<name> .layout .tab-indicator .place-within-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .gap - overridden by
workspaces .<name> .layout .tab-indicator .gap - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .width - overridden by
workspaces .<name> .layout .tab-indicator .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .length - overridden by
workspaces .<name> .layout .tab-indicator .length - type
null or (submodule) - default
null - declarations
- settings/appearance/decorations.nix
- type
floating point number - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .position - overridden by
workspaces .<name> .layout .tab-indicator .position - type
null or one of "left", "right", "top", "bottom" - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .gaps-between-tabs - overridden by
workspaces .<name> .layout .tab-indicator .gaps-between-tabs - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .corner-radius - overridden by
workspaces .<name> .layout .tab-indicator .corner-radius - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .urgent - overridden by
workspaces .<name> .layout .tab-indicator .urgent window-rules .* .tab-indicator .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .active - overridden by
workspaces .<name> .layout .tab-indicator .active window-rules .* .tab-indicator .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .inactive - overridden by
workspaces .<name> .layout .tab-indicator .inactive window-rules .* .tab-indicator .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/shadows.nix
- refines
layout .shadow - refined by
workspaces .<name> .layout .shadow window-rules .* .shadow layer-rules .* .shadow - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .enable - overridden by
workspaces .<name> .layout .shadow .enable window-rules .* .shadow .enable - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .offset - overridden by
workspaces .<name> .layout .shadow .offset window-rules .* .shadow .offset layer-rules .* .shadow .offset - type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .softness - overridden by
workspaces .<name> .layout .shadow .softness window-rules .* .shadow .softness layer-rules .* .shadow .softness - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .spread - overridden by
workspaces .<name> .layout .shadow .spread window-rules .* .shadow .spread layer-rules .* .shadow .spread - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .draw-behind-window - overridden by
workspaces .<name> .layout .shadow .draw-behind-window window-rules .* .shadow .draw-behind-window layer-rules .* .shadow .draw-behind-window - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .color - overridden by
workspaces .<name> .layout .shadow .color window-rules .* .shadow .color layer-rules .* .shadow .color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .inactive-color - overridden by
workspaces .<name> .layout .shadow .inactive-color window-rules .* .shadow .inactive-color layer-rules .* .shadow .inactive-color - type
null or string - default
null - declarations
- settings/interactions/hot-corners.nix
- overrides
gestures .hot-corners - type
null or (submodule) - default
null - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/interactions/hot-corners.nix
- type
boolean - declarations
- settings/workspaces.nix
- type
attribute set of (submodule) - declarations
- settings/workspaces.nix
- type
string - default
the key of the workspace - declarations
- settings/workspaces.nix
- type
null or string - default
null - declarations
- settings/appearance/layout.nix
- refines
layout outputs .<name> .layout - declarations
- settings/appearance/background.nix
- overrides
layout .background-color outputs .<name> .layout .background-color - type
null or string - default
null - declarations
- settings/appearance/layout.nix
- overrides
layout .gaps outputs .<name> .layout .gaps - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/layout.nix
- overrides
layout .struts outputs .<name> .layout .struts - type
null or (submodule) - default
null - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- type
floating point number or signed integer - default
0 - declarations
- settings/appearance/layout.nix
- overrides
layout .preset-column-widths outputs .<name> .layout .preset-column-widths - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .preset-window-heights outputs .<name> .layout .preset-window-heights - type
null or (non-empty (list of attribute-tagged union with choices: fixed, proportion)) - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-width outputs .<name> .layout .default-column-width - overridden by
window-rules .* .default-column-width - type
null or {} or attribute-tagged union with choices: fixed, proportion - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-display outputs .<name> .layout .default-column-display - overridden by
window-rules .* .default-column-display - type
null or one of "normal", "tabbed" - default
null "normal": Windows are arranged vertically, spread across the working area height."tabbed": Windows are arranged in tabs, with only the focused window visible, taking up the full height of the working area.- declarations
- settings/appearance/layout.nix
- overrides
layout .center-focused-column outputs .<name> .layout .center-focused-column - type
null or one of "never", "always", "on-overflow" - default
null "never": If the focused column doesn't fit, it will be aligned to the edges of the screen."on-overflow": if the focused column doesn't fit, it will be centered on the screen."always": the focused column will always be centered, even if it was already fully visible.- declarations
- settings/appearance/layout.nix
- overrides
layout .always-center-single-column outputs .<name> .layout .always-center-single-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- refines
layout .border outputs .<name> .layout .border - refined by
window-rules .* .border - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .enable outputs .<name> .layout .border .enable - overridden by
window-rules .* .border .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .width outputs .<name> .layout .border .width - overridden by
window-rules .* .border .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .urgent outputs .<name> .layout .border .urgent - overridden by
window-rules .* .border .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .active outputs .<name> .layout .border .active - overridden by
window-rules .* .border .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .inactive outputs .<name> .layout .border .inactive - overridden by
window-rules .* .border .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .focus-ring outputs .<name> .layout .focus-ring - refined by
window-rules .* .focus-ring - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .enable outputs .<name> .layout .focus-ring .enable - overridden by
window-rules .* .focus-ring .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .width outputs .<name> .layout .focus-ring .width - overridden by
window-rules .* .focus-ring .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .urgent outputs .<name> .layout .focus-ring .urgent - overridden by
window-rules .* .focus-ring .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .active outputs .<name> .layout .focus-ring .active - overridden by
window-rules .* .focus-ring .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .inactive outputs .<name> .layout .focus-ring .inactive - overridden by
window-rules .* .focus-ring .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .tab-indicator outputs .<name> .layout .tab-indicator - refined by
window-rules .* .tab-indicator - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .enable outputs .<name> .layout .tab-indicator .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .hide-when-single-tab outputs .<name> .layout .tab-indicator .hide-when-single-tab - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .place-within-column outputs .<name> .layout .tab-indicator .place-within-column - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .gap outputs .<name> .layout .tab-indicator .gap - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .width outputs .<name> .layout .tab-indicator .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .length outputs .<name> .layout .tab-indicator .length - type
null or (submodule) - default
null - declarations
- settings/appearance/decorations.nix
- type
floating point number - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .position outputs .<name> .layout .tab-indicator .position - type
null or one of "left", "right", "top", "bottom" - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .gaps-between-tabs outputs .<name> .layout .tab-indicator .gaps-between-tabs - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .corner-radius outputs .<name> .layout .tab-indicator .corner-radius - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .urgent outputs .<name> .layout .tab-indicator .urgent - overridden by
window-rules .* .tab-indicator .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .active outputs .<name> .layout .tab-indicator .active - overridden by
window-rules .* .tab-indicator .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .inactive outputs .<name> .layout .tab-indicator .inactive - overridden by
window-rules .* .tab-indicator .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/shadows.nix
- refines
layout .shadow outputs .<name> .layout .shadow - refined by
window-rules .* .shadow layer-rules .* .shadow - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .enable outputs .<name> .layout .shadow .enable - overridden by
window-rules .* .shadow .enable - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .offset outputs .<name> .layout .shadow .offset - overridden by
window-rules .* .shadow .offset layer-rules .* .shadow .offset - type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .softness outputs .<name> .layout .shadow .softness - overridden by
window-rules .* .shadow .softness layer-rules .* .shadow .softness - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .spread outputs .<name> .layout .shadow .spread - overridden by
window-rules .* .shadow .spread layer-rules .* .shadow .spread - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .draw-behind-window outputs .<name> .layout .shadow .draw-behind-window - overridden by
window-rules .* .shadow .draw-behind-window layer-rules .* .shadow .draw-behind-window - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .color outputs .<name> .layout .shadow .color - overridden by
window-rules .* .shadow .color layer-rules .* .shadow .color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .inactive-color outputs .<name> .layout .shadow .inactive-color - overridden by
window-rules .* .shadow .inactive-color layer-rules .* .shadow .inactive-color - type
null or string - default
null - declarations
- settings/surface-rules.nix
- type
list of (window rule) The
titlefield, when non-null, is a regular expression. It will match a window if the client has set a title and its title matches the regular expression.The
app-idfield, when non-null, is a regular expression. It will match a window if the client has set an app id and its app id matches the regular expression.The
at-startupfield, when non-null, will match a window based on whether it was opened within the first 60 seconds of niri starting up.If a field is null, it will always match.
A given window is "considered" if any of the match rules in
window-rules .* .matches successfully match this window. If all of the match rules do not match this window, then that window will never match this window rule.If
window-rules .* .matches contains no match rules, it will match any window and "consider" it for this window rule.If a given window is "considered" for this window rule according to the above rules, the selection can be further refined with
window-rules .* .excludes . If any of the match rules inexcludesmatch this window, it will be rejected and this window rule will not match the given window.If a given field is null on this window rule, it has no effect. It does nothing and "inherits" the value from the previous rule.
If the given field is not null, it will overwrite the value from any previous rule.
- declarations
- settings/surface-rules.nix
- type
list of (match rule) - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
list of (match rule) - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or one of "screencast", "screen-capture" - default
null a window is never meant to be blocked out from the actual physical screen (otherwise you wouldn't be able to see it at all)
a
block-out-fromwindow is meant to be always blocked out from screencasts (as they are often used for livestreaming etc)a
block-out-fromwindow is not supposed to be blocked from screenshots (because usually these are not broadcasted live, and you generally know what you're taking a screenshot of)The
org.freedesktop.portal.ScreenCastinterface, which is used by tools like OBS primarily to capture video. Whenblock-out-from = "screencast";orblock-out-from = "screen-capture";, this window is blocked out from the screencast portal, and will not be visible to screencasting software making use of the screencast portal.The
wlr-screencopyprotocol, which is used by tools likegrimprimarily to capture screenshots. Whenblock-out-from = "screencast";, this protocol is not affected and tools likegrimcan still capture the window just fine. This is because you may still want to take a screenshot of such windows. However, some screenshot tools display a fullscreen overlay with a frozen image of the screen, and then capture that. This overlay is not blocked out in the same way, and may leak the window contents to an active screencast. Whenblock-out-from = "screen-capture";, this window is blocked out fromwlr-screencopyand thus will never leak in such a case, but of course it will always be blocked out from screenshots and (sometimes) the physical screen.The built in
screenshotaction, implemented in niri itself. This tool works similarly to those based onwlr-screencopy, but being a part of the compositor gets superpowers regarding secrecy of window contents. Its frozen overlay will never leak window contents to an active screencast, because information of blocked windows and can be distinguished for the physical output and screencasts.block-out-fromdoes not affect the built in screenshot tool at all, and you can always take a screenshot of any window.make sure not to use
wlr-screencopytools that display a preview during your stream, or- set
block-out-from = "screen-capture";to ensure that the window is never visible in a screencast. - declarations
- settings/surface-rules.nix
- type
null or floating point number - default
null - declarations
- settings/surface-rules.nix
- type
null or (submodule) - default
null - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-width outputs .<name> .layout .default-column-width workspaces .<name> .layout .default-column-width - type
null or {} or attribute-tagged union with choices: fixed, proportion - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- type
null or {} or attribute-tagged union with choices: fixed, proportion - default
null - declarations
- settings/appearance/layout.nix
- type
signed integer - declarations
- settings/appearance/layout.nix
- type
floating point number - declarations
- settings/appearance/layout.nix
- overrides
layout .default-column-display outputs .<name> .layout .default-column-display workspaces .<name> .layout .default-column-display - type
null or one of "normal", "tabbed" - default
null "normal": Windows are arranged vertically, spread across the working area height."tabbed": Windows are arranged in tabs, with only the focused window visible, taking up the full height of the working area.- declarations
- settings/appearance/layout.nix
- type
null or signed integer - default
null - declarations
- settings/appearance/layout.nix
- type
null or signed integer - default
null - declarations
- settings/appearance/layout.nix
- type
null or signed integer - default
null - declarations
- settings/appearance/layout.nix
- type
null or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- refines
layout .border outputs .<name> .layout .border workspaces .<name> .layout .border - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .enable outputs .<name> .layout .border .enable workspaces .<name> .layout .border .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .width outputs .<name> .layout .border .width workspaces .<name> .layout .border .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .urgent outputs .<name> .layout .border .urgent workspaces .<name> .layout .border .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .active outputs .<name> .layout .border .active workspaces .<name> .layout .border .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .border .inactive outputs .<name> .layout .border .inactive workspaces .<name> .layout .border .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .focus-ring outputs .<name> .layout .focus-ring workspaces .<name> .layout .focus-ring - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .enable outputs .<name> .layout .focus-ring .enable workspaces .<name> .layout .focus-ring .enable - type
null or boolean - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .width outputs .<name> .layout .focus-ring .width workspaces .<name> .layout .focus-ring .width - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .urgent outputs .<name> .layout .focus-ring .urgent workspaces .<name> .layout .focus-ring .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .active outputs .<name> .layout .focus-ring .active workspaces .<name> .layout .focus-ring .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .focus-ring .inactive outputs .<name> .layout .focus-ring .inactive workspaces .<name> .layout .focus-ring .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- refines
layout .tab-indicator outputs .<name> .layout .tab-indicator workspaces .<name> .layout .tab-indicator - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .urgent outputs .<name> .layout .tab-indicator .urgent workspaces .<name> .layout .tab-indicator .urgent - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .active outputs .<name> .layout .tab-indicator .active workspaces .<name> .layout .tab-indicator .active - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- overrides
layout .tab-indicator .inactive outputs .<name> .layout .tab-indicator .inactive workspaces .<name> .layout .tab-indicator .inactive - type
null or attribute-tagged union with choices: color, gradient - default
null - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
gradient - declarations
- settings/appearance/decorations.nix
- type
signed integer - default
180 - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/decorations.nix
- type
null or one of "srgb", "srgb-linear", "oklab", "oklch shorter hue", "oklch longer hue", "oklch increasing hue", "oklch decreasing hue" - default
null - declarations
- settings/appearance/decorations.nix
- type
one of "window", "workspace-view" - default
"window" - declarations
- settings/appearance/decorations.nix
- type
string - declarations
- settings/appearance/shadows.nix
- refines
layout .shadow outputs .<name> .layout .shadow workspaces .<name> .layout .shadow - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .enable outputs .<name> .layout .shadow .enable workspaces .<name> .layout .shadow .enable - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .offset outputs .<name> .layout .shadow .offset workspaces .<name> .layout .shadow .offset - type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .softness outputs .<name> .layout .shadow .softness workspaces .<name> .layout .shadow .softness - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .spread outputs .<name> .layout .shadow .spread workspaces .<name> .layout .shadow .spread - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .draw-behind-window outputs .<name> .layout .shadow .draw-behind-window workspaces .<name> .layout .shadow .draw-behind-window - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .color outputs .<name> .layout .shadow .color workspaces .<name> .layout .shadow .color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .inactive-color outputs .<name> .layout .shadow .inactive-color workspaces .<name> .layout .shadow .inactive-color - type
null or string - default
null - declarations
- settings/surface-rules.nix
- type
null or string - default
null - declarations
- settings/surface-rules.nix
- type
null or string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null If it provided a valid activation token that hasn't expired, it will be focused.
If the strict activation policy is enabled (not by default), the procedure ends here. It will be focused if and only if the activation token is valid.
Otherwise, if no valid activation token was presented, but the window is a dialog, it will open next to its parent and be focused anyways.
If the window is not a dialog, it will be focused if there is no fullscreen window; we don't want to steal its focus unless a dialog belongs to it.
- declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or (submodule) - default
null - declarations
- settings/surface-rules.nix
- type
one of "top-left", "top-right", "bottom-left", "bottom-right", "top", "bottom", "left", "right" - declarations
- settings/surface-rules.nix
- type
floating point number or signed integer - declarations
- settings/surface-rules.nix
- type
floating point number or signed integer - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or floating point number or signed integer - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
list of (layer rule) The
namespacefield, when non-null, is a regular expression. It will match a layer surface for which the client has set a namespace that matches the regular expression.The
at-startupfield, when non-null, will match a layer surface based on whether it was opened within the first 60 seconds of niri starting up.If a field is null, it will always match.
A given layer surface is "considered" if any of the match rules in
layer-rules .* .matches successfully match this layer surface. If all of the match rules do not match this layer surface, then that layer surface will never match this layer rule.If
layer-rules .* .matches contains no match rules, it will match any layer surface and "consider" it for this layer rule.If a given layer surface is "considered" for this layer rule according to the above rules, the selection can be further refined with
layer-rules .* .excludes . If any of the match rules inexcludesmatch this layer surface, it will be rejected and this layer rule will not match the given layer surface.If a given field is null on this layer rule, it has no effect. It does nothing and "inherits" the value from the previous rule.
If the given field is not null, it will overwrite the value from any previous rule.
- declarations
- settings/surface-rules.nix
- type
list of (match rule) - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
list of (match rule) - declarations
- settings/surface-rules.nix
- type
null or regular expression string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or one of "screencast", "screen-capture" - default
null a layer surface is never meant to be blocked out from the actual physical screen (otherwise you wouldn't be able to see it at all)
a
block-out-fromlayer surface is meant to be always blocked out from screencasts (as they are often used for livestreaming etc)a
block-out-fromlayer surface is not supposed to be blocked from screenshots (because usually these are not broadcasted live, and you generally know what you're taking a screenshot of)The
org.freedesktop.portal.ScreenCastinterface, which is used by tools like OBS primarily to capture video. Whenblock-out-from = "screencast";orblock-out-from = "screen-capture";, this layer surface is blocked out from the screencast portal, and will not be visible to screencasting software making use of the screencast portal.The
wlr-screencopyprotocol, which is used by tools likegrimprimarily to capture screenshots. Whenblock-out-from = "screencast";, this protocol is not affected and tools likegrimcan still capture the layer surface just fine. This is because you may still want to take a screenshot of such layer surfaces. However, some screenshot tools display a fullscreen overlay with a frozen image of the screen, and then capture that. This overlay is not blocked out in the same way, and may leak the layer surface contents to an active screencast. Whenblock-out-from = "screen-capture";, this layer surface is blocked out fromwlr-screencopyand thus will never leak in such a case, but of course it will always be blocked out from screenshots and (sometimes) the physical screen.The built in
screenshotaction, implemented in niri itself. This tool works similarly to those based onwlr-screencopy, but being a part of the compositor gets superpowers regarding secrecy of layer surface contents. Its frozen overlay will never leak layer surface contents to an active screencast, because information of blocked layer surfaces and can be distinguished for the physical output and screencasts.block-out-fromdoes not affect the built in screenshot tool at all, and you can always take a screenshot of any layer surface.make sure not to use
wlr-screencopytools that display a preview during your stream, or- set
block-out-from = "screen-capture";to ensure that the layer surface is never visible in a screencast. - declarations
- settings/surface-rules.nix
- type
null or floating point number - default
null - declarations
- settings/surface-rules.nix
- type
null or (submodule) - default
null - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/surface-rules.nix
- type
floating point number - declarations
- settings/appearance/shadows.nix
- refines
layout .shadow outputs .<name> .layout .shadow workspaces .<name> .layout .shadow - declarations
- settings/appearance/shadows.nix
- type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .offset outputs .<name> .layout .shadow .offset workspaces .<name> .layout .shadow .offset - type
null or (submodule) - default
null - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- type
floating point number or signed integer - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .softness outputs .<name> .layout .shadow .softness workspaces .<name> .layout .shadow .softness - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .spread outputs .<name> .layout .shadow .spread workspaces .<name> .layout .shadow .spread - type
null or floating point number or signed integer - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .draw-behind-window outputs .<name> .layout .shadow .draw-behind-window workspaces .<name> .layout .shadow .draw-behind-window - type
null or boolean - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .color outputs .<name> .layout .shadow .color workspaces .<name> .layout .shadow .color - type
null or string - default
null - declarations
- settings/appearance/shadows.nix
- overrides
layout .shadow .inactive-color outputs .<name> .layout .shadow .inactive-color workspaces .<name> .layout .shadow .inactive-color - type
null or string - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/surface-rules.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
list of attribute-tagged union with choices: argv, command, sh - declarations
- settings/misc.nix
- type
list of string - declarations
- settings/misc.nix
- type
string - declarations
- settings/misc.nix
- declarations
- settings/misc.nix
- type
null or string - default
null - declarations
- settings/misc.nix
- type
null or signed integer - default
null - declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
null or signed integer - default
null - declarations
- settings/misc.nix
- type
null or (submodule) - default
null - declarations
- settings/misc.nix
- type
null or string - declarations
- settings/misc.nix
- declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
attribute set of (null or string) - declarations
- settings/misc.nix
- declarations
- settings/misc.nix
- type
null or boolean - default
null - declarations
- settings/misc.nix
- type
null or string - default
null - declarations
- settings/debug.nix
- type
attribute set of kdl arguments - declarations
- settings/toplevel.nix
- type
KDL document
includes
Includes for this config file.
Notice that the type is a paritioned list. This option partitions its values based on if they are after the default order priority or not.
{
# Include the system-wide configuration for niri at the top.
includes = [
{ path = "/etc/niri/config.kdl"; }
];
}All definitions in the Nixpkgs module system have an inherent "order priority" to them. This priority can be manually set using utilities like lib.mkOrder, lib.mkBefore, and lib.mkAfter:
{
# Include a file that is generated at runtime at the bottom.
includes = lib.mkAfter [
{ path = "generated.kdl"; }
];
}Note that relative paths (like in the previous example) are resolved without dereferencing symlinks. As such, if this config file is symlinked to /home/sodiboo/.config/niri/config.kdl, and sodiboo runs niri normally, niri will look for that included file at /home/sodiboo/.config/niri/generated.kdl. It does not matter if the main config file actually lives in the Nix store, or anywhere else.
You can configure whether each include is required or not. By default, includes are not required unless they are a Nix store path, but you can override this behaviour by specifying it manually:
{
# The system-wide niri configuration **must** exist, or else this config file will not load.
# This can no longer be validated at system build time, because that path doesn't exist in the Nix sandbox.
includes = [
{ required = true; path = "/etc/niri/config.kdl"; }
];
}If you just specify the path, you don't need to wrap it in an attrset:
{
# This includes the same file twice, both times optional.
includes = [
"shell/colors.kdl"
{ path = "shell/colors.kdl"; }
];
}If you want to specify includes for the start and end of the config file in the same location, you must use lib.mkMerge:
{
includes = lib.mkMerge [
(lib.mkBefore [
{ required = true; path = "/etc/niri/config.kdl"; }
"shell/base.kdl"
])
(lib.mkAfter [
"shell/overlay.kdl"
])
];
}That's because you can only set the priority on a given definition, not on individual entries:
{
# WRONG: lib.mkAfter must wrap the whole list, not individual values within it.
includes = [
(lib.mkAfter "invalid.kdl")
];
}Unlike some other parts of niri's configuration, there is no shorthand for the home directory:
{
# WRONG: The tilde is not expanded how you'd expect.
includes = [
{ path = "~/.config/niri/generated.kdl"; }
];
}includes .* .path
The path to the file that is to be included. It can be relative to the current file, or an absolute path. Unlike some other paths in the niri configuration, it may not contain a tilde expansion at the start.
includes .* .required
Whether this path must exist and contain a valid niri config file when the current config is loaded.
By default, all includes are optional unless the path is a store path. This is because it is generally expected to run niri validate at system build time, at which point the Nix store is all that exists.
input
input .keyboard
input .keyboard .xkb
Parameters passed to libxkbcommon, which handles the keyboard in niri.
Further reading:
input .keyboard .xkb .file
Path to a .xkb keymap file. If set, this file will be used to configure libxkbcommon, and all other options will be ignored.
input .keyboard .xkb .rules
The rules file to use.
The rules file describes how to interpret the values of the model, layout, variant and options fields.
If this is set to null, the rules will be read from the XKB_DEFAULT_RULES environment variable.
input .keyboard .xkb .model
The keyboard model by which to interpret keycodes and LEDs
See xkeyboard-config(7) for a list of available models.
If this is set to null, the model will be read from the XKB_DEFAULT_MODEL environment variable.
input .keyboard .xkb .layout
A comma-separated list of layouts (languages) to include in the keymap.
See xkeyboard-config(7) for a list of available layouts and their variants.
If this is set to null, the layout will be read from the XKB_DEFAULT_LAYOUT environment variable.
input .keyboard .xkb .variant
A comma separated list of variants, one per layout, which may modify or augment the respective layout in various ways.
See xkeyboard-config(7) for a list of available variants for each layout.
If this is set to null, the variant will be read from the XKB_DEFAULT_VARIANT environment variable.
input .keyboard .xkb .options
A comma separated list of options, through which the user specifies non-layout related preferences, like which key combinations are used for switching layouts, or which key is the Compose key.
See xkeyboard-config(7) for a list of available options.
If this is set to an empty string, no options will be used.
If this is set to null, the options will be read from the XKB_DEFAULT_OPTIONS environment variable.
input .keyboard .repeat-delay
The delay in milliseconds before a key starts repeating.
input .keyboard .repeat-rate
The rate in characters per second at which a key repeats.
input .keyboard .track-layout
The keyboard layout can be remembered per "window", such that when you switch to a window, the keyboard layout is set to the one that was last used in that window.
By default, there is only one "global" keyboard layout and changing it in any window will affect the keyboard layout used in all other windows too.
input .keyboard .numlock
Enable numlock by default
input .mouse
input .mouse .enable
input .mouse .left-handed
Whether to accomodate left-handed usage for this device. This varies based on the exact device, but will for example swap left/right mouse buttons.
Further reading:
input .mouse .natural-scroll
Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)
Further reading:
input .mouse .middle-emulation
Whether a middle mouse button press should be sent when you press the left and right mouse buttons
Further reading:
input .mouse .accel-profile
Further reading:
input .mouse .accel-speed
Further reading:
input .mouse .scroll-button
When scroll-method = "on-button-down", this is the button that will be used to enable scrolling. This button must be on the same physical device as the pointer, according to libinput docs. The type is a button code, as defined in input-event-codes.h. Most commonly, this will be set to BTN_LEFT, BTN_MIDDLE, or BTN_RIGHT, or at least some mouse button, but any button from that file is a valid value for this option (though, libinput may not necessarily do anything useful with most of them)
Further reading:
input .mouse .scroll-button-lock
When this is false, scroll-button needs to be held down for pointer motion to be converted to scrolling. When this is true, scroll-button can be pressed and released to "lock" the device into this state, until it is pressed and released a second time.
Further reading:
input .mouse .scroll-method
When to convert motion events to scrolling events. The default and supported values vary based on the device type.
Further reading:
input .mouse .scroll-factor
For all scroll events triggered by a wheel source, the scroll distance is multiplied by this factor.
This is not a libinput property, but rather a niri-specific one.
input .tablet
input .tablet .enable
input .tablet .left-handed
Whether to accomodate left-handed usage for this device. This varies based on the exact device, but will for example swap left/right mouse buttons.
Further reading:
input .tablet .map-to-output
input .tablet .calibration-matrix
An augmented calibration matrix for the tablet or touch screen.
This is represented in Nix as a 2-list of 3-lists of floats.
For example:
{
# 90 degree rotation clockwise
calibration-matrix = [
[ 0.0 -1.0 1.0 ]
[ 1.0 0.0 0.0 ]
];
}Further reading:
input .touch
input .touch .enable
input .touch .map-to-output
input .touch .calibration-matrix
An augmented calibration matrix for the tablet or touch screen.
This is represented in Nix as a 2-list of 3-lists of floats.
For example:
{
# 90 degree rotation clockwise
calibration-matrix = [
[ 0.0 -1.0 1.0 ]
[ 1.0 0.0 0.0 ]
];
}Further reading:
input .touchpad
input .touchpad .enable
input .touchpad .left-handed
Whether to accomodate left-handed usage for this device. This varies based on the exact device, but will for example swap left/right mouse buttons.
Further reading:
input .touchpad .natural-scroll
Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)
Further reading:
input .touchpad .middle-emulation
Whether a middle mouse button press should be sent when you press the left and right mouse buttons
Further reading:
input .touchpad .accel-profile
Further reading:
input .touchpad .accel-speed
Further reading:
input .touchpad .scroll-button
When scroll-method = "on-button-down", this is the button that will be used to enable scrolling. This button must be on the same physical device as the pointer, according to libinput docs. The type is a button code, as defined in input-event-codes.h. Most commonly, this will be set to BTN_LEFT, BTN_MIDDLE, or BTN_RIGHT, or at least some mouse button, but any button from that file is a valid value for this option (though, libinput may not necessarily do anything useful with most of them)
Further reading:
input .touchpad .scroll-button-lock
When this is false, scroll-button needs to be held down for pointer motion to be converted to scrolling. When this is true, scroll-button can be pressed and released to "lock" the device into this state, until it is pressed and released a second time.
Further reading:
input .touchpad .scroll-method
When to convert motion events to scrolling events. The default and supported values vary based on the device type.
Further reading:
input .touchpad .tap
Whether to enable tap-to-click.
Further reading:
input .touchpad .dwt
Whether to disable the touchpad while typing.
Further reading:
input .touchpad .dwtp
Whether to disable the touchpad while the trackpoint is in use.
Further reading:
input .touchpad .drag
On most touchpads, "tap and drag" is enabled by default. This option allows you to explicitly enable or disable it.
Tap and drag means that to drag an item, you tap the touchpad with some amount of fingers to decide what kind of button press is emulated, but don't hold those fingers, and then you immediately start dragging with one finger.
Further reading:
input .touchpad .drag-lock
By default, a "tap and drag" gesture is terminated by releasing the finger that is dragging.
Drag lock means that the drag gesture is not terminated when the finger is released, but only when the finger is tapped again, or after a timeout (unless sticky mode is enabled). This allows you to reset your finger position without losing the drag gesture.
Drag lock is only applicable when tap and drag is enabled.
Further reading:
input .touchpad .disabled-on-external-mouse
Whether to disable the touchpad when an external mouse is plugged in.
Further reading:
input .touchpad .tap-button-map
The mouse button to register when tapping with 1, 2, or 3 fingers, when
Further reading:
input .touchpad .click-method
Method to determine which mouse button is pressed when you click the touchpad.
Further reading:
input .touchpad .scroll-factor
For all scroll events triggered by a finger source, the scroll distance is multiplied by this factor.
This is not a libinput property, but rather a niri-specific one.
input .trackball
input .trackball .enable
input .trackball .left-handed
Whether to accomodate left-handed usage for this device. This varies based on the exact device, but will for example swap left/right mouse buttons.
Further reading:
input .trackball .natural-scroll
Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)
Further reading:
input .trackball .middle-emulation
Whether a middle mouse button press should be sent when you press the left and right mouse buttons
Further reading:
input .trackball .accel-profile
Further reading:
input .trackball .accel-speed
Further reading:
input .trackball .scroll-button
When scroll-method = "on-button-down", this is the button that will be used to enable scrolling. This button must be on the same physical device as the pointer, according to libinput docs. The type is a button code, as defined in input-event-codes.h. Most commonly, this will be set to BTN_LEFT, BTN_MIDDLE, or BTN_RIGHT, or at least some mouse button, but any button from that file is a valid value for this option (though, libinput may not necessarily do anything useful with most of them)
Further reading:
input .trackball .scroll-button-lock
When this is false, scroll-button needs to be held down for pointer motion to be converted to scrolling. When this is true, scroll-button can be pressed and released to "lock" the device into this state, until it is pressed and released a second time.
Further reading:
input .trackball .scroll-method
When to convert motion events to scrolling events. The default and supported values vary based on the device type.
Further reading:
input .trackpoint
input .trackpoint .enable
input .trackpoint .left-handed
Whether to accomodate left-handed usage for this device. This varies based on the exact device, but will for example swap left/right mouse buttons.
Further reading:
input .trackpoint .natural-scroll
Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)
Further reading:
input .trackpoint .middle-emulation
Whether a middle mouse button press should be sent when you press the left and right mouse buttons
Further reading:
input .trackpoint .accel-profile
Further reading:
input .trackpoint .accel-speed
Further reading:
input .trackpoint .scroll-button
When scroll-method = "on-button-down", this is the button that will be used to enable scrolling. This button must be on the same physical device as the pointer, according to libinput docs. The type is a button code, as defined in input-event-codes.h. Most commonly, this will be set to BTN_LEFT, BTN_MIDDLE, or BTN_RIGHT, or at least some mouse button, but any button from that file is a valid value for this option (though, libinput may not necessarily do anything useful with most of them)
Further reading:
input .trackpoint .scroll-button-lock
When this is false, scroll-button needs to be held down for pointer motion to be converted to scrolling. When this is true, scroll-button can be pressed and released to "lock" the device into this state, until it is pressed and released a second time.
Further reading:
input .trackpoint .scroll-method
When to convert motion events to scrolling events. The default and supported values vary based on the device type.
Further reading:
input .warp-mouse-to-focus
Warp the mouse to the focused window when switching focus.
Note that there is no way to set enable = false;. If any config file enables this, it cannot be disabled by a later file.
input .warp-mouse-to-focus .enable
input .warp-mouse-to-focus .mode
By default, when mode = null;, if the mouse is outside of the focused window on the X axis, it will warp to the middle vertical line of the window. Likewise if it is outside the focused window on the Y axis, it will warp to the middle horizontal line. And, if it is outside the window's bounds on both axes, it will warp to the center of the window.
When mode = "center-xy";, if the mouse is outside the window at all, it will warp on both axes to the very center of the window.
When mode = "center-xy-always";, the mouse will always warp to the center of the focused window upon any focus change, even if the mouse was already inside the bounds of that window
input .focus-follows-mouse
Focus the window under the mouse when the mouse moves.
Note that there is no way to set enable = false;. If any config file enables this, it cannot be disabled by a later file.
input .focus-follows-mouse .enable
input .focus-follows-mouse .max-scroll-amount
The maximum proportion of the screen to scroll at a time (expressed in percent)
input .workspace-auto-back-and-forth
When invoking focus-workspace to switch to a workspace by index, if the workspace is already focused, usually nothing happens. When this option is enabled, the workspace will cycle back to the previously active workspace.
Of note is that it does not switch to the previous index, but the previous workspace. That means you can reorder workspaces inbetween these actions, and it will still take you to the actual same workspace you came from.
input .power-key-handling .enable
By default, niri will take over the power button to make it sleep instead of power off.
You can disable this behaviour if you prefer to configure the power button elsewhere.
input .mod-key
input .mod-key-nested
binds
binds .<name> .allow-when-locked
Whether this keybind should be allowed when the screen is locked.
This is only applicable for spawn keybinds.
binds .<name> .allow-inhibiting
When a surface is inhibiting keyboard shortcuts, this option dictates wether this keybind will be inhibited as well.
By default it is true for all keybinds, meaning an application can block this keybind from being triggered, and the application will receive the key event instead.
When false, this keybind will always be triggered, even if an application is inhibiting keybinds. There is no way for a client to observe this keypress.
Has no effect when action is toggle-keyboard-shortcuts-inhibit. In that case, this value is implicitly false, no matter what you set it to. (note that the value reported in the nix config may be inaccurate in that case; although hopefully you're not relying on the values of specific keybinds for the rest of your config?)
binds .<name> .cooldown-ms
The minimum cooldown before a keybind can be triggered again, in milliseconds.
This is mostly useful for binds on the mouse wheel, where you might not want to activate an action several times in quick succession. You can use it for any bind, though.
binds .<name> .repeat
Whether this keybind should trigger repeatedly when held down.
binds .<name> .hotkey-overlay
How this keybind should be displayed in the hotkey overlay.
binds .<name> .hotkey-overlay .hidden
When true, the hotkey overlay will not contain this keybind at all. When false, it will show the default title of the action.
binds .<name> .hotkey-overlay .title
The title of this keybind in the hotkey overlay. Pango markup is supported.
binds .<name> .action
An action is represented as an attrset with a single key, being the name, and a value that is a list of its arguments. For example, to represent a spawn action, you could do this:
{
binds = {
"XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"];
"XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"];
};
}If there is only a single argument, you can pass it directly. It will be implicitly converted to a list in that case.
{
binds = {
"Mod+D".action.spawn = "fuzzel";
"Mod+1".action.focus-workspace = 1;
};
}For actions taking properties (named arguments), you can pass an attrset.
{
binds = {
"Mod+Shift+E".action.quit.skip-confirmation = true;
"Mod+Print".action.screenshot-screen = { show-pointer = false; };
};
}If an action takes properties and positional arguments, you can write it like this:
{
binds = {
"Mod+Ctrl+1".action.move-window-to-workspace = [ { focus = false; } "chat-apps" ];
};
}switch-events
switch-events .tablet-mode-on
switch-events .tablet-mode-on .action
A switch action is represented as an attrset with a single key, being the name, and a value that is a list of its arguments.
See also
{
switch-events = {
tablet-mode-on.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "true"];
tablet-mode-off.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "false"];
};
}switch-events .tablet-mode-off
switch-events .tablet-mode-off .action
A switch action is represented as an attrset with a single key, being the name, and a value that is a list of its arguments.
See also
{
switch-events = {
tablet-mode-on.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "true"];
tablet-mode-off.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "false"];
};
}switch-events .lid-open
switch-events .lid-open .action
A switch action is represented as an attrset with a single key, being the name, and a value that is a list of its arguments.
See also
{
switch-events = {
tablet-mode-on.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "true"];
tablet-mode-off.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "false"];
};
}switch-events .lid-close
switch-events .lid-close .action
A switch action is represented as an attrset with a single key, being the name, and a value that is a list of its arguments.
See also
{
switch-events = {
tablet-mode-on.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "true"];
tablet-mode-off.action.spawn = ["gsettings" "set" "org.gnome.desktop.a11y.applications" "screen-keyboard-enabled" "false"];
};
}gestures
gestures .dnd-edge-view-scroll
When dragging a window to the left or right edge of the screen, the view will start scrolling in that direction.
gestures .dnd-edge-view-scroll .trigger-width
The width of the edge of the screen where dragging a window will scroll the view.
gestures .dnd-edge-view-scroll .delay-ms
The delay in milliseconds before the view starts scrolling.
gestures .dnd-edge-view-scroll .max-speed
When the cursor is at boundary of the trigger width, the view will not be scrolling. Moving the mouse further away from the boundary and closer to the egde will linearly increase the scrolling speed, until the mouse is pressed against the edge of the screen, at which point the view will scroll at this speed. The speed is measured in logical pixels per second.
gestures .dnd-edge-workspace-switch
In the overview, when dragging a window to the top or bottom edge of the screen, view will start scrolling in that direction.
This does not happen when the overview is not open.
gestures .dnd-edge-workspace-switch .trigger-height
The height of the edge of the screen where dragging a window will scroll the view.
gestures .dnd-edge-workspace-switch .delay-ms
The delay in milliseconds before the view starts scrolling.
gestures .dnd-edge-workspace-switch .max-speed
When the cursor is at boundary of the trigger height, the view will not be scrolling. Moving the mouse further away from the boundary and closer to the egde will linearly increase the scrolling speed, until the mouse is pressed against the edge of the screen, at which point the view will scroll at this speed. The speed is measured in logical pixels per second.
gestures .hot-corners
Hot corners allow you to put your mouse in the corner of an output to toggle the overview. This interaction also works while drag-and-dropping.
By default, the top-left corner is the only hot corner. You can use this option to explicitly set which hot corners you want.
Individual hot corners cannot be enabled/disabled separately. This option configures all four hot corners at once.
gestures .hot-corners .bottom-left
gestures .hot-corners .bottom-right
gestures .hot-corners .top-left
gestures .hot-corners .top-right
animations
animations .enable
animations .slowdown
animations .workspace-switch
animations .workspace-switch .enable
animations .workspace-switch .kind
animations .workspace-switch .kind .easing
animations .workspace-switch .kind .easing .curve
The curve to use for the easing function.
animations .workspace-switch .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .workspace-switch .kind .easing .duration-ms
animations .workspace-switch .kind .spring
animations .workspace-switch .kind .spring .damping-ratio
animations .workspace-switch .kind .spring .epsilon
animations .workspace-switch .kind .spring .stiffness
animations .horizontal-view-movement
animations .horizontal-view-movement .enable
animations .horizontal-view-movement .kind
animations .horizontal-view-movement .kind .easing
animations .horizontal-view-movement .kind .easing .curve
The curve to use for the easing function.
animations .horizontal-view-movement .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .horizontal-view-movement .kind .easing .duration-ms
animations .horizontal-view-movement .kind .spring
animations .horizontal-view-movement .kind .spring .damping-ratio
animations .horizontal-view-movement .kind .spring .epsilon
animations .horizontal-view-movement .kind .spring .stiffness
animations .config-notification-open-close
animations .config-notification-open-close .enable
animations .config-notification-open-close .kind
animations .config-notification-open-close .kind .easing
animations .config-notification-open-close .kind .easing .curve
The curve to use for the easing function.
animations .config-notification-open-close .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .config-notification-open-close .kind .easing .duration-ms
animations .config-notification-open-close .kind .spring
animations .config-notification-open-close .kind .spring .damping-ratio
animations .config-notification-open-close .kind .spring .epsilon
animations .config-notification-open-close .kind .spring .stiffness
animations .exit-confirmation-open-close
animations .exit-confirmation-open-close .enable
animations .exit-confirmation-open-close .kind
animations .exit-confirmation-open-close .kind .easing
animations .exit-confirmation-open-close .kind .easing .curve
The curve to use for the easing function.
animations .exit-confirmation-open-close .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .exit-confirmation-open-close .kind .easing .duration-ms
animations .exit-confirmation-open-close .kind .spring
animations .exit-confirmation-open-close .kind .spring .damping-ratio
animations .exit-confirmation-open-close .kind .spring .epsilon
animations .exit-confirmation-open-close .kind .spring .stiffness
animations .window-movement
animations .window-movement .enable
animations .window-movement .kind
animations .window-movement .kind .easing
animations .window-movement .kind .easing .curve
The curve to use for the easing function.
animations .window-movement .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .window-movement .kind .easing .duration-ms
animations .window-movement .kind .spring
animations .window-movement .kind .spring .damping-ratio
animations .window-movement .kind .spring .epsilon
animations .window-movement .kind .spring .stiffness
animations .window-open
animations .window-open .custom-shader
Source code for a GLSL shader to use for this animation.
For example, set it to builtins.readFile ./window-open.glsl to use a shader from the same directory as your configuration file.
See: https://github.com/YaLTeR/niri/wiki/Configuration:-Animations#custom-shader
animations .window-open .enable
animations .window-open .kind
animations .window-open .kind .easing
animations .window-open .kind .easing .curve
The curve to use for the easing function.
animations .window-open .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .window-open .kind .easing .duration-ms
animations .window-open .kind .spring
animations .window-open .kind .spring .damping-ratio
animations .window-open .kind .spring .epsilon
animations .window-open .kind .spring .stiffness
animations .window-close
animations .window-close .custom-shader
Source code for a GLSL shader to use for this animation.
For example, set it to builtins.readFile ./window-close.glsl to use a shader from the same directory as your configuration file.
See: https://github.com/YaLTeR/niri/wiki/Configuration:-Animations#custom-shader
animations .window-close .enable
animations .window-close .kind
animations .window-close .kind .easing
animations .window-close .kind .easing .curve
The curve to use for the easing function.
animations .window-close .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .window-close .kind .easing .duration-ms
animations .window-close .kind .spring
animations .window-close .kind .spring .damping-ratio
animations .window-close .kind .spring .epsilon
animations .window-close .kind .spring .stiffness
animations .window-resize
animations .window-resize .custom-shader
Source code for a GLSL shader to use for this animation.
For example, set it to builtins.readFile ./window-resize.glsl to use a shader from the same directory as your configuration file.
See: https://github.com/YaLTeR/niri/wiki/Configuration:-Animations#custom-shader
animations .window-resize .enable
animations .window-resize .kind
animations .window-resize .kind .easing
animations .window-resize .kind .easing .curve
The curve to use for the easing function.
animations .window-resize .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .window-resize .kind .easing .duration-ms
animations .window-resize .kind .spring
animations .window-resize .kind .spring .damping-ratio
animations .window-resize .kind .spring .epsilon
animations .window-resize .kind .spring .stiffness
animations .screenshot-ui-open
animations .screenshot-ui-open .enable
animations .screenshot-ui-open .kind
animations .screenshot-ui-open .kind .easing
animations .screenshot-ui-open .kind .easing .curve
The curve to use for the easing function.
animations .screenshot-ui-open .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .screenshot-ui-open .kind .easing .duration-ms
animations .screenshot-ui-open .kind .spring
animations .screenshot-ui-open .kind .spring .damping-ratio
animations .screenshot-ui-open .kind .spring .epsilon
animations .screenshot-ui-open .kind .spring .stiffness
animations .overview-open-close
animations .overview-open-close .enable
animations .overview-open-close .kind
animations .overview-open-close .kind .easing
animations .overview-open-close .kind .easing .curve
The curve to use for the easing function.
animations .overview-open-close .kind .easing .curve-args
Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.
animations .overview-open-close .kind .easing .duration-ms
animations .overview-open-close .kind .spring
animations .overview-open-close .kind .spring .damping-ratio
animations .overview-open-close .kind .spring .epsilon
animations .overview-open-close .kind .spring .stiffness
overview
overview .backdrop-color
The backdrop is the layer of solid color at the very back of the scene that niri draws. Because there's nothing behind it to blend with, its alpha channel will be ignored.
The backdrop is visible behind the workspaces in the overview, or between workspaces when switching.
See also
overview .workspace-shadow
overview .workspace-shadow .enable
overview .workspace-shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
overview .workspace-shadow .offset .x
overview .workspace-shadow .offset .y
overview .workspace-shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
overview .workspace-shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
overview .workspace-shadow .draw-behind-window
overview .workspace-shadow .color
overview .zoom
Control how much the workspaces zoom out in the overview. zoom ranges from 0 to 0.75 where lower values make everything smaller.
layout
layout .background-color
The background is a solid-colored layer drawn behind each workspace.
It's visible through transparent windows, between , and inside any
See also
layout .gaps
The gap between windows in the layout, measured in logical pixels.
layout .struts
The distances from the edges of the workspace to the edges of the working area.
The top and bottom struts are absolute gaps from the edges of the workspace. If you set a bottom strut of 64px and the scale is 2.0, then the workspace will have 128 physical pixels under the scrollable working area where it only shows the background.
Struts are computed in addition to layer-shell surfaces. If you have a waybar of 32px at the top, and you set a top strut of 16px, then you will have 48 logical pixels from the actual edge of the display to the top of the working area.
The left and right structs work in a similar way, except the padded space is not empty. The horizontal struts are used to constrain where focused windows are allowed to go. If you define a left strut of 64px and go to the first window in a workspace, that window will be aligned 64 logical pixels from the left edge of the output, rather than snapping to the actual edge of the screen. If another window exists to the left of this window, then you will see 64px of its right edge (if you have zero and )
Note that individual struts cannot be modified separately. This option configures all four struts at once.
layout .struts .bottom
layout .struts .left
layout .struts .right
layout .struts .top
layout .empty-workspace-above-first
Normally, niri has a dynamic amount of workspaces, with one empty workspace at the end. The first workspace really is the first workspace, and you cannot go past it, but going past the last workspace puts you on the empty workspace.
When this is enabled, there will be an empty workspace above the first workspace, and you can go past the first workspace to get to an empty workspace, just as in the other direction. This makes workspace navigation symmetric in all ways except indexing.
layout .preset-column-widths
The widths that switch-preset-column-width will cycle through.
Each width can either be a fixed width in logical pixels, or a proportion of the screen's width.
Example:
{
layout.preset-column-widths = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1920; }
];
}layout .preset-column-widths .* .fixed
The width of the column in logical pixels
layout .preset-column-widths .* .proportion
The width of the column as a proportion of the screen's width
layout .preset-window-heights
The heights that switch-preset-window-height will cycle through.
Each height can either be a fixed height in logical pixels, or a proportion of the screen's height.
Example:
{
layout.preset-window-heights = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1080; }
];
}layout .preset-window-heights .* .fixed
The height of the window in logical pixels
layout .preset-window-heights .* .proportion
The height of the window as a proportion of the screen's height
layout .default-column-width
The default width for new columns with a freshly opened window.
When this is set to an empty attrset {}, the window will get to decide its initial width. This is effectively "unsetting" the default column width. This is distinct from a null value, which represents taht this option is not set at this level, and its value should be inherited from elsewhere.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
See
layout .default-column-width .fixed
The width of the column in logical pixels
layout .default-column-width .proportion
The width of the column as a proportion of the screen's width
layout .default-column-display
How windows in newly opened columns should be displayed by default.
Note that you can override this for a given column at any time. Every column remembers its own display mode, independent from this setting. This setting controls the default value when a column is created.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
layout .center-focused-column
When changing focus, niri can automatically center the focused column.
layout .always-center-single-column
This is like center-focused-column = "always";, but only for workspaces with a single column. Changes nothing if center-focused-column is set to "always". Has no effect if more than one column is present.
layout .border
The border is a decoration drawn inside every window in the layout. It will take space away from windows. That is, if you have a border of 8px, then each window will be 8px smaller on each edge than if you had no border.
The currently focused window (i.e. the window that can receive keyboard input) will be drawn according to border.active, and all other windows will be drawn according to border.inactive.
If you have the focus-ring enabled, the border will be drawn inside (and over) the focus ring.
layout .border .enable
Whether to enable the border.
layout .border .width
The width of the border drawn around each window.
layout .border .urgent
The color of the border for windows that are requesting attention.
layout .border .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .border .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .border .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .border .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
layout .border .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .border .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .border .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
layout .border .active
The color of the border for the window that has keyboard focus.
layout .border .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .border .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .border .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .border .active .gradient .from
The starting <color> of the gradient.
For more details, see
layout .border .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .border .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .border .active .gradient .to
The ending <color> of the gradient.
For more details, see
layout .border .inactive
The color of the border for windows that do not have keyboard focus.
layout .border .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .border .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .border .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .border .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
layout .border .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .border .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .border .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
layout .focus-ring
The focus ring is a decoration drawn around the last focused window on each workspace. It takes no space away from windows. If you have insufficient gaps, the focus ring can be drawn over adjacent windows, but it will never affect the layout of windows.
The focused window of the currently focused workspace (i.e. the window that can receive keyboard input) will be drawn according to focus-ring.active, and the last focused window on all other workspaces will be drawn according to focus-ring.inactive.
If you have the border enabled, the focus ring will be drawn around (and under) the border.
layout .focus-ring .enable
Whether to enable the focus ring.
layout .focus-ring .width
The width of the focus ring drawn around each focused window.
layout .focus-ring .urgent
The color of the focus ring for windows that are requesting attention.
layout .focus-ring .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .focus-ring .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .focus-ring .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .focus-ring .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
layout .focus-ring .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .focus-ring .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .focus-ring .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
layout .focus-ring .active
The color of the focus ring for the window that has keyboard focus.
layout .focus-ring .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .focus-ring .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .focus-ring .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .focus-ring .active .gradient .from
The starting <color> of the gradient.
For more details, see
layout .focus-ring .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .focus-ring .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .focus-ring .active .gradient .to
The ending <color> of the gradient.
For more details, see
layout .focus-ring .inactive
The color of the focus ring for windows that do not have keyboard focus.
layout .focus-ring .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .focus-ring .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .focus-ring .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .focus-ring .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
layout .focus-ring .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .focus-ring .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .focus-ring .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
layout .insert-hint
The insert hint is a decoration drawn between windows during an interactive move operation. It is drawn in the gap where the window will be inserted when you release the window. It does not occupy any space in the gap, and the insert hint extends onto the edges of adjacent windows. When you release the moved window, the windows that are covered by the insert hint will be pushed aside to make room for the moved window.
Note that the insert hint is also shown in the overview when dragging a window in the gaps between workspaces, to indicate that releasing it will create a new workspace with that window. As such, insert hints are actually an output-level concept, and so there is no workspace-level configuration.
layout .insert-hint .enable
Whether to enable the insert hint.
layout .insert-hint .display
The color of the insert hint.
layout .insert-hint .display .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .insert-hint .display .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .insert-hint .display .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .insert-hint .display .gradient .from
The starting <color> of the gradient.
For more details, see
layout .insert-hint .display .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .insert-hint .display .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .insert-hint .display .gradient .to
The ending <color> of the gradient.
For more details, see
layout .tab-indicator
layout .tab-indicator .enable
layout .tab-indicator .hide-when-single-tab
layout .tab-indicator .place-within-column
layout .tab-indicator .gap
layout .tab-indicator .width
layout .tab-indicator .length
layout .tab-indicator .length .total-proportion
layout .tab-indicator .position
layout .tab-indicator .gaps-between-tabs
layout .tab-indicator .corner-radius
layout .tab-indicator .urgent
The color of the tab indicator for windows that are requesting attention.
layout .tab-indicator .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .tab-indicator .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .tab-indicator .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .tab-indicator .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
layout .tab-indicator .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .tab-indicator .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .tab-indicator .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
layout .tab-indicator .active
The color of the tab indicator for the window that has keyboard focus.
layout .tab-indicator .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .tab-indicator .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .tab-indicator .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .tab-indicator .active .gradient .from
The starting <color> of the gradient.
For more details, see
layout .tab-indicator .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .tab-indicator .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .tab-indicator .active .gradient .to
The ending <color> of the gradient.
For more details, see
layout .tab-indicator .inactive
The color of the tab indicator for windows that do not have keyboard focus.
layout .tab-indicator .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
layout .tab-indicator .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
layout .tab-indicator .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
layout .tab-indicator .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
layout .tab-indicator .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
layout .tab-indicator .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
layout .tab-indicator .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
layout .shadow
layout .shadow .enable
Whether to enable shadows for all windows.
Note that while shadow properties defined in this section generally apply to layer surfaces, this option is an exception. To use shadows on layer surfaces, you must specifically set true.
layout .shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
layout .shadow .offset .x
layout .shadow .offset .y
layout .shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
layout .shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
layout .shadow .draw-behind-window
layout .shadow .color
layout .shadow .inactive-color
outputs
outputs .<name> .name
The name of the output. You set this manually if you want the outputs to be ordered in a specific way.
outputs .<name> .enable
outputs .<name> .scale
The scale of this output, which represents how many physical pixels fit in one logical pixel.
If this is null, niri will automatically pick a scale for you.
outputs .<name> .transform .flipped
Whether to flip this output vertically.
outputs .<name> .transform .rotation
Counter-clockwise rotation of this output in degrees.
outputs .<name> .position
Position of the output in the global coordinate space.
This affects directional monitor actions like "focus-monitor-left", and cursor movement.
The cursor can only move between directly adjacent outputs.
Output scale has to be taken into account for positioning, because outputs are sized in logical pixels.
For example, a 3840x2160 output with scale 2.0 will have a logical size of 1920x1080, so to put another output directly adjacent to it on the right, set its x to 1920.
If the position is unset or multiple outputs overlap, niri will instead place the output automatically.
outputs .<name> .position .x
outputs .<name> .position .y
outputs .<name> .mode
The resolution and refresh rate of this display.
By default, when this is null, niri will automatically pick a mode for you.
If this is set to an invalid mode (i.e unsupported by this output), niri will act as if it is unset and pick one for you.
outputs .<name> .mode .height
outputs .<name> .mode .refresh
The refresh rate of this output. When this is null, but the resolution is set, niri will automatically pick the highest available refresh rate.
outputs .<name> .mode .width
outputs .<name> .variable-refresh-rate
Whether to enable variable refresh rate (VRR) on this output.
VRR is also known as Adaptive Sync, FreeSync, and G-Sync.
Setting this to "on-demand" will enable VRR only when a window with
outputs .<name> .focus-at-startup
Focus this output by default when niri starts.
If multiple outputs with focus-at-startup are connected, then the one with the key that sorts first will be focused. You can change the key to affect the sorting order, and set
When none of the connected outputs are explicitly focus-at-startup, niri will focus the first one sorted by name (same output sorting as used elsewhere in niri).
outputs .<name> .backdrop-color
The backdrop is the layer of solid color at the very back of the scene that niri draws. Because there's nothing behind it to blend with, its alpha channel will be ignored.
The backdrop is visible behind the workspaces in the overview, or between workspaces when switching.
See also
outputs .<name> .layout
outputs .<name> .layout .background-color
The background is a solid-colored layer drawn behind each workspace.
It's visible through transparent windows, between , and inside any
See also
outputs .<name> .layout .gaps
The gap between windows in the layout, measured in logical pixels.
outputs .<name> .layout .struts
The distances from the edges of the workspace to the edges of the working area.
The top and bottom struts are absolute gaps from the edges of the workspace. If you set a bottom strut of 64px and the scale is 2.0, then the workspace will have 128 physical pixels under the scrollable working area where it only shows the background.
Struts are computed in addition to layer-shell surfaces. If you have a waybar of 32px at the top, and you set a top strut of 16px, then you will have 48 logical pixels from the actual edge of the display to the top of the working area.
The left and right structs work in a similar way, except the padded space is not empty. The horizontal struts are used to constrain where focused windows are allowed to go. If you define a left strut of 64px and go to the first window in a workspace, that window will be aligned 64 logical pixels from the left edge of the output, rather than snapping to the actual edge of the screen. If another window exists to the left of this window, then you will see 64px of its right edge (if you have zero and )
Note that individual struts cannot be modified separately. This option configures all four struts at once.
outputs .<name> .layout .struts .bottom
outputs .<name> .layout .struts .left
outputs .<name> .layout .struts .right
outputs .<name> .layout .struts .top
outputs .<name> .layout .empty-workspace-above-first
Normally, niri has a dynamic amount of workspaces, with one empty workspace at the end. The first workspace really is the first workspace, and you cannot go past it, but going past the last workspace puts you on the empty workspace.
When this is enabled, there will be an empty workspace above the first workspace, and you can go past the first workspace to get to an empty workspace, just as in the other direction. This makes workspace navigation symmetric in all ways except indexing.
outputs .<name> .layout .preset-column-widths
The widths that switch-preset-column-width will cycle through.
Each width can either be a fixed width in logical pixels, or a proportion of the screen's width.
Example:
{
outputs.<name>.layout.preset-column-widths = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1920; }
];
}outputs .<name> .layout .preset-column-widths .* .fixed
The width of the column in logical pixels
outputs .<name> .layout .preset-column-widths .* .proportion
The width of the column as a proportion of the screen's width
outputs .<name> .layout .preset-window-heights
The heights that switch-preset-window-height will cycle through.
Each height can either be a fixed height in logical pixels, or a proportion of the screen's height.
Example:
{
outputs.<name>.layout.preset-window-heights = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1080; }
];
}outputs .<name> .layout .preset-window-heights .* .fixed
The height of the window in logical pixels
outputs .<name> .layout .preset-window-heights .* .proportion
The height of the window as a proportion of the screen's height
outputs .<name> .layout .default-column-width
The default width for new columns with a freshly opened window.
When this is set to an empty attrset {}, the window will get to decide its initial width. This is effectively "unsetting" the default column width. This is distinct from a null value, which represents taht this option is not set at this level, and its value should be inherited from elsewhere.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
See
outputs .<name> .layout .default-column-width .fixed
The width of the column in logical pixels
outputs .<name> .layout .default-column-width .proportion
The width of the column as a proportion of the screen's width
outputs .<name> .layout .default-column-display
How windows in newly opened columns should be displayed by default.
Note that you can override this for a given column at any time. Every column remembers its own display mode, independent from this setting. This setting controls the default value when a column is created.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
outputs .<name> .layout .center-focused-column
When changing focus, niri can automatically center the focused column.
outputs .<name> .layout .always-center-single-column
This is like center-focused-column = "always";, but only for workspaces with a single column. Changes nothing if center-focused-column is set to "always". Has no effect if more than one column is present.
outputs .<name> .layout .border
The border is a decoration drawn inside every window in the layout. It will take space away from windows. That is, if you have a border of 8px, then each window will be 8px smaller on each edge than if you had no border.
The currently focused window (i.e. the window that can receive keyboard input) will be drawn according to border.active, and all other windows will be drawn according to border.inactive.
If you have the focus-ring enabled, the border will be drawn inside (and over) the focus ring.
outputs .<name> .layout .border .enable
Whether to enable the border.
outputs .<name> .layout .border .width
The width of the border drawn around each window.
outputs .<name> .layout .border .urgent
The color of the border for windows that are requesting attention.
outputs .<name> .layout .border .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .border .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .border .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .border .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .border .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .border .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .border .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .border .active
The color of the border for the window that has keyboard focus.
outputs .<name> .layout .border .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .border .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .border .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .border .active .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .border .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .border .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .border .active .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .border .inactive
The color of the border for windows that do not have keyboard focus.
outputs .<name> .layout .border .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .border .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .border .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .border .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .border .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .border .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .border .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring
The focus ring is a decoration drawn around the last focused window on each workspace. It takes no space away from windows. If you have insufficient gaps, the focus ring can be drawn over adjacent windows, but it will never affect the layout of windows.
The focused window of the currently focused workspace (i.e. the window that can receive keyboard input) will be drawn according to focus-ring.active, and the last focused window on all other workspaces will be drawn according to focus-ring.inactive.
If you have the border enabled, the focus ring will be drawn around (and under) the border.
outputs .<name> .layout .focus-ring .enable
Whether to enable the focus ring.
outputs .<name> .layout .focus-ring .width
The width of the focus ring drawn around each focused window.
outputs .<name> .layout .focus-ring .urgent
The color of the focus ring for windows that are requesting attention.
outputs .<name> .layout .focus-ring .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .focus-ring .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .focus-ring .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .focus-ring .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .focus-ring .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .focus-ring .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring .active
The color of the focus ring for the window that has keyboard focus.
outputs .<name> .layout .focus-ring .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .focus-ring .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .focus-ring .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .focus-ring .active .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .focus-ring .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .focus-ring .active .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring .inactive
The color of the focus ring for windows that do not have keyboard focus.
outputs .<name> .layout .focus-ring .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .focus-ring .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .focus-ring .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .focus-ring .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .focus-ring .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .focus-ring .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .focus-ring .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .insert-hint
The insert hint is a decoration drawn between windows during an interactive move operation. It is drawn in the gap where the window will be inserted when you release the window. It does not occupy any space in the gap, and the insert hint extends onto the edges of adjacent windows. When you release the moved window, the windows that are covered by the insert hint will be pushed aside to make room for the moved window.
Note that the insert hint is also shown in the overview when dragging a window in the gaps between workspaces, to indicate that releasing it will create a new workspace with that window. As such, insert hints are actually an output-level concept, and so there is no workspace-level configuration.
outputs .<name> .layout .insert-hint .enable
Whether to enable the insert hint.
outputs .<name> .layout .insert-hint .display
The color of the insert hint.
outputs .<name> .layout .insert-hint .display .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .insert-hint .display .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .insert-hint .display .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .insert-hint .display .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .insert-hint .display .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .insert-hint .display .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .insert-hint .display .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator
outputs .<name> .layout .tab-indicator .enable
outputs .<name> .layout .tab-indicator .hide-when-single-tab
outputs .<name> .layout .tab-indicator .place-within-column
outputs .<name> .layout .tab-indicator .gap
outputs .<name> .layout .tab-indicator .width
outputs .<name> .layout .tab-indicator .length
outputs .<name> .layout .tab-indicator .length .total-proportion
outputs .<name> .layout .tab-indicator .position
outputs .<name> .layout .tab-indicator .gaps-between-tabs
outputs .<name> .layout .tab-indicator .corner-radius
outputs .<name> .layout .tab-indicator .urgent
The color of the tab indicator for windows that are requesting attention.
outputs .<name> .layout .tab-indicator .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .tab-indicator .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .tab-indicator .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .tab-indicator .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .tab-indicator .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .tab-indicator .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator .active
The color of the tab indicator for the window that has keyboard focus.
outputs .<name> .layout .tab-indicator .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .tab-indicator .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .tab-indicator .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .tab-indicator .active .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .tab-indicator .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .tab-indicator .active .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator .inactive
The color of the tab indicator for windows that do not have keyboard focus.
outputs .<name> .layout .tab-indicator .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
outputs .<name> .layout .tab-indicator .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
outputs .<name> .layout .tab-indicator .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
outputs .<name> .layout .tab-indicator .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
outputs .<name> .layout .tab-indicator .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
outputs .<name> .layout .tab-indicator .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
outputs .<name> .layout .tab-indicator .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
outputs .<name> .layout .shadow
outputs .<name> .layout .shadow .enable
Whether to enable shadows for windows on this output.
Note that while shadow properties defined in this section generally apply to layer surfaces, this option is an exception. To use shadows on layer surfaces, you must specifically set true.
outputs .<name> .layout .shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
outputs .<name> .layout .shadow .offset .x
outputs .<name> .layout .shadow .offset .y
outputs .<name> .layout .shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
outputs .<name> .layout .shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
outputs .<name> .layout .shadow .draw-behind-window
outputs .<name> .layout .shadow .color
outputs .<name> .layout .shadow .inactive-color
outputs .<name> .hot-corners
Hot corners allow you to put your mouse in the corner of an output to toggle the overview. This interaction also works while drag-and-dropping.
By default, the top-left corner is the only hot corner. You can use this option to explicitly set which hot corners you want.
Individual hot corners cannot be enabled/disabled separately. This option configures all four hot corners at once.
outputs .<name> .hot-corners .bottom-left
outputs .<name> .hot-corners .bottom-right
outputs .<name> .hot-corners .top-left
outputs .<name> .hot-corners .top-right
workspaces
Declare named workspaces.
Named workspaces are similar to regular, dynamic workspaces, except they can be referred to by name, and they are persistent, they do not close when there are no more windows left on them.
Usage is like so:
{
workspaces."name" = {};
workspaces."01-another-one" = {
open-on-output = "DP-1";
name = "another-one";
};
}Unless a name is declared, the workspace will use the attribute key as the name.
Workspaces will be created in a specific order: sorted by key. If you do not care about the order of named workspaces, you can skip using the name attribute, and use the key instead. If you do care about it, you can use the key to order them, and a name attribute to have a friendlier name.
workspaces .<name> .name
The name of the workspace. You set this manually if you want the keys to be ordered in a specific way.
workspaces .<name> .open-on-output
The name of the output the workspace should be assigned to.
workspaces .<name> .layout
workspaces .<name> .layout .background-color
The background is a solid-colored layer drawn behind each workspace.
It's visible through transparent windows, between , and inside any
See also
workspaces .<name> .layout .gaps
The gap between windows in the layout, measured in logical pixels.
workspaces .<name> .layout .struts
The distances from the edges of the workspace to the edges of the working area.
The top and bottom struts are absolute gaps from the edges of the workspace. If you set a bottom strut of 64px and the scale is 2.0, then the workspace will have 128 physical pixels under the scrollable working area where it only shows the background.
Struts are computed in addition to layer-shell surfaces. If you have a waybar of 32px at the top, and you set a top strut of 16px, then you will have 48 logical pixels from the actual edge of the display to the top of the working area.
The left and right structs work in a similar way, except the padded space is not empty. The horizontal struts are used to constrain where focused windows are allowed to go. If you define a left strut of 64px and go to the first window in a workspace, that window will be aligned 64 logical pixels from the left edge of the output, rather than snapping to the actual edge of the screen. If another window exists to the left of this window, then you will see 64px of its right edge (if you have zero and )
Note that individual struts cannot be modified separately. This option configures all four struts at once.
workspaces .<name> .layout .struts .bottom
workspaces .<name> .layout .struts .left
workspaces .<name> .layout .struts .right
workspaces .<name> .layout .struts .top
workspaces .<name> .layout .preset-column-widths
The widths that switch-preset-column-width will cycle through.
Each width can either be a fixed width in logical pixels, or a proportion of the screen's width.
Example:
{
workspaces.<name>.layout.preset-column-widths = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1920; }
];
}workspaces .<name> .layout .preset-column-widths .* .fixed
The width of the column in logical pixels
workspaces .<name> .layout .preset-column-widths .* .proportion
The width of the column as a proportion of the screen's width
workspaces .<name> .layout .preset-window-heights
The heights that switch-preset-window-height will cycle through.
Each height can either be a fixed height in logical pixels, or a proportion of the screen's height.
Example:
{
workspaces.<name>.layout.preset-window-heights = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
{ fixed = 1080; }
];
}workspaces .<name> .layout .preset-window-heights .* .fixed
The height of the window in logical pixels
workspaces .<name> .layout .preset-window-heights .* .proportion
The height of the window as a proportion of the screen's height
workspaces .<name> .layout .default-column-width
The default width for new columns with a freshly opened window.
When this is set to an empty attrset {}, the window will get to decide its initial width. This is effectively "unsetting" the default column width. This is distinct from a null value, which represents taht this option is not set at this level, and its value should be inherited from elsewhere.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
See
workspaces .<name> .layout .default-column-width .fixed
The width of the column in logical pixels
workspaces .<name> .layout .default-column-width .proportion
The width of the column as a proportion of the screen's width
workspaces .<name> .layout .default-column-display
How windows in newly opened columns should be displayed by default.
Note that you can override this for a given column at any time. Every column remembers its own display mode, independent from this setting. This setting controls the default value when a column is created.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
workspaces .<name> .layout .center-focused-column
When changing focus, niri can automatically center the focused column.
workspaces .<name> .layout .always-center-single-column
This is like center-focused-column = "always";, but only for workspaces with a single column. Changes nothing if center-focused-column is set to "always". Has no effect if more than one column is present.
workspaces .<name> .layout .border
The border is a decoration drawn inside every window in the layout. It will take space away from windows. That is, if you have a border of 8px, then each window will be 8px smaller on each edge than if you had no border.
The currently focused window (i.e. the window that can receive keyboard input) will be drawn according to border.active, and all other windows will be drawn according to border.inactive.
If you have the focus-ring enabled, the border will be drawn inside (and over) the focus ring.
workspaces .<name> .layout .border .enable
Whether to enable the border.
workspaces .<name> .layout .border .width
The width of the border drawn around each window.
workspaces .<name> .layout .border .urgent
The color of the border for windows that are requesting attention.
workspaces .<name> .layout .border .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .border .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .border .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .border .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .border .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .border .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .border .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .border .active
The color of the border for the window that has keyboard focus.
workspaces .<name> .layout .border .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .border .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .border .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .border .active .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .border .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .border .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .border .active .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .border .inactive
The color of the border for windows that do not have keyboard focus.
workspaces .<name> .layout .border .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .border .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .border .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .border .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .border .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .border .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .border .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring
The focus ring is a decoration drawn around the last focused window on each workspace. It takes no space away from windows. If you have insufficient gaps, the focus ring can be drawn over adjacent windows, but it will never affect the layout of windows.
The focused window of the currently focused workspace (i.e. the window that can receive keyboard input) will be drawn according to focus-ring.active, and the last focused window on all other workspaces will be drawn according to focus-ring.inactive.
If you have the border enabled, the focus ring will be drawn around (and under) the border.
workspaces .<name> .layout .focus-ring .enable
Whether to enable the focus ring.
workspaces .<name> .layout .focus-ring .width
The width of the focus ring drawn around each focused window.
workspaces .<name> .layout .focus-ring .urgent
The color of the focus ring for windows that are requesting attention.
workspaces .<name> .layout .focus-ring .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .focus-ring .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .focus-ring .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .focus-ring .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .focus-ring .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .focus-ring .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring .active
The color of the focus ring for the window that has keyboard focus.
workspaces .<name> .layout .focus-ring .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .focus-ring .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .focus-ring .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .focus-ring .active .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .focus-ring .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .focus-ring .active .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring .inactive
The color of the focus ring for windows that do not have keyboard focus.
workspaces .<name> .layout .focus-ring .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .focus-ring .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .focus-ring .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .focus-ring .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .focus-ring .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .focus-ring .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .focus-ring .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator
workspaces .<name> .layout .tab-indicator .enable
workspaces .<name> .layout .tab-indicator .hide-when-single-tab
workspaces .<name> .layout .tab-indicator .place-within-column
workspaces .<name> .layout .tab-indicator .gap
workspaces .<name> .layout .tab-indicator .width
workspaces .<name> .layout .tab-indicator .length
workspaces .<name> .layout .tab-indicator .length .total-proportion
workspaces .<name> .layout .tab-indicator .position
workspaces .<name> .layout .tab-indicator .gaps-between-tabs
workspaces .<name> .layout .tab-indicator .corner-radius
workspaces .<name> .layout .tab-indicator .urgent
The color of the tab indicator for windows that are requesting attention.
workspaces .<name> .layout .tab-indicator .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .tab-indicator .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .tab-indicator .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .tab-indicator .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .tab-indicator .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .tab-indicator .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator .active
The color of the tab indicator for the window that has keyboard focus.
workspaces .<name> .layout .tab-indicator .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .tab-indicator .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .tab-indicator .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .tab-indicator .active .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .tab-indicator .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .tab-indicator .active .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator .inactive
The color of the tab indicator for windows that do not have keyboard focus.
workspaces .<name> .layout .tab-indicator .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
workspaces .<name> .layout .tab-indicator .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
workspaces .<name> .layout .tab-indicator .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
workspaces .<name> .layout .tab-indicator .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
workspaces .<name> .layout .tab-indicator .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
workspaces .<name> .layout .tab-indicator .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
workspaces .<name> .layout .tab-indicator .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
workspaces .<name> .layout .shadow
workspaces .<name> .layout .shadow .enable
Whether to enable shadows for windows in this workspace.
Note that while shadow properties defined in this section generally apply to layer surfaces, this option is an exception. To use shadows on layer surfaces, you must specifically set true.
workspaces .<name> .layout .shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
workspaces .<name> .layout .shadow .offset .x
workspaces .<name> .layout .shadow .offset .y
workspaces .<name> .layout .shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
workspaces .<name> .layout .shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
workspaces .<name> .layout .shadow .draw-behind-window
workspaces .<name> .layout .shadow .color
workspaces .<name> .layout .shadow .inactive-color
window-rules
Window rules.
A window rule will match based on
A given match rule can match based on one of several fields. For a given match rule to "match" a window, it must match on all fields.
For a given window rule to match a window, the above logic is employed to determine whether any given match rule matches, and the interactions between the match rules decide whether the window rule as a whole will match. For a given window rule:
That is, a given window rule will apply to a given window if any of the entries in
All fields of a window rule can be set to null, which represents that the field shall have no effect on the window (and in general, the client is allowed to choose the initial value).
To compute the final set of window rules that apply to a given window, each window rule in this list is consdered in order.
At first, every field is set to null.
Then, for each applicable window rule:
The "final value" of a field is simply its value at the end of this process. That is, the final value of a field is the one from the last window rule that matches the given window rule (not considering null entries, unless there are no non-null entries)
If the final value of a given field is null, then it usually means that the client gets to decide. For more information, see the documentation for each field.
window-rules .* .matches
A list of rules to match windows.
If any of these rules match a window (or there are none), that window rule will be considered for this window. It can still be rejected by
If all of the rules do not match a window, then this window rule will not apply to that window.
window-rules .* .matches .* .app-id
A regular expression to match against the app id of the window.
When non-null, for this field to match a window, a client must set the app id of its window and the app id must match this regex.
window-rules .* .matches .* .title
A regular expression to match against the title of the window.
When non-null, for this field to match a window, a client must set the title of its window and the title must match this regex.
window-rules .* .matches .* .is-active
When non-null, for this field to match a window, the value must match whether the window is active or not.
Every monitor has up to one active window, and is-active=true will match the active window on each monitor. A monitor can have zero active windows if no windows are open on it. There can never be more than one active window on a monitor.
window-rules .* .matches .* .is-active-in-column
When non-null, for this field to match a window, the value must match whether the window is active in its column or not.
Every column has exactly one active-in-column window. If it is the active column, this window is also the active window. A column may not have zero active-in-column windows, or more than one active-in-column window.
The active-in-column window is the window that was last focused in that column. When you switch focus to a column, the active-in-column window will be the new focused window.
window-rules .* .matches .* .is-floating
When not-null, for this field to match a window, the value must match whether the window is floating (true) or tiled (false).
window-rules .* .matches .* .is-focused
When non-null, for this field to match a window, the value must match whether the window has keyboard focus or not.
A note on terminology used here: a window is actually a toplevel surface, and a surface just refers to any rectangular region that a client can draw to. A toplevel surface is just a surface with additional capabilities and properties (e.g. "fullscreen", "resizable", "min size", etc)
For a window to be focused, its surface must be focused. There is up to one focused surface, and it is the surface that can receive keyboard input. There can never be more than one focused surface. There can be zero focused surfaces if and only if there are zero surfaces. The focused surface does not have to be a toplevel surface. It can also be a layer-shell surface. In that case, there is a surface with keyboard focus but no window with keyboard focus.
window-rules .* .matches .* .is-urgent
When non-null, for this field to match a window, the value must match whether the window is in the urgent state or not.
A window can request attention by sending an XDG activation request. Such a request can be associated with an input event (e.g. in response to you clicking a notification), in which case it will be focused right away. It can also request attention without an input event, in which case it will simply be marked as "urgent". An urgent state doesn't do anything by itself, but it can be matched on to apply a window rule only to such windows.
window-rules .* .matches .* .is-window-cast-target
When non-null, matches based on whether the window is being targeted by a window cast.
window-rules .* .matches .* .at-startup
When true, this rule will match windows opened within the first 60 seconds of niri starting up. When false, this rule will match windows opened more than 60 seconds after niri started up. This is useful for applying different rules to windows opened from
window-rules .* .excludes
A list of rules to exclude windows.
If any of these rules match a window, then this window rule will not apply to that window, even if it matches one of the rules in
If none of these rules match a window, then this window rule will not be rejected. It will apply to that window if and only if it matches one of the rules in
window-rules .* .excludes .* .app-id
A regular expression to match against the app id of the window.
When non-null, for this field to match a window, a client must set the app id of its window and the app id must match this regex.
window-rules .* .excludes .* .title
A regular expression to match against the title of the window.
When non-null, for this field to match a window, a client must set the title of its window and the title must match this regex.
window-rules .* .excludes .* .is-active
When non-null, for this field to match a window, the value must match whether the window is active or not.
Every monitor has up to one active window, and is-active=true will match the active window on each monitor. A monitor can have zero active windows if no windows are open on it. There can never be more than one active window on a monitor.
window-rules .* .excludes .* .is-active-in-column
When non-null, for this field to match a window, the value must match whether the window is active in its column or not.
Every column has exactly one active-in-column window. If it is the active column, this window is also the active window. A column may not have zero active-in-column windows, or more than one active-in-column window.
The active-in-column window is the window that was last focused in that column. When you switch focus to a column, the active-in-column window will be the new focused window.
window-rules .* .excludes .* .is-floating
When not-null, for this field to match a window, the value must match whether the window is floating (true) or tiled (false).
window-rules .* .excludes .* .is-focused
When non-null, for this field to match a window, the value must match whether the window has keyboard focus or not.
A note on terminology used here: a window is actually a toplevel surface, and a surface just refers to any rectangular region that a client can draw to. A toplevel surface is just a surface with additional capabilities and properties (e.g. "fullscreen", "resizable", "min size", etc)
For a window to be focused, its surface must be focused. There is up to one focused surface, and it is the surface that can receive keyboard input. There can never be more than one focused surface. There can be zero focused surfaces if and only if there are zero surfaces. The focused surface does not have to be a toplevel surface. It can also be a layer-shell surface. In that case, there is a surface with keyboard focus but no window with keyboard focus.
window-rules .* .excludes .* .is-urgent
When non-null, for this field to match a window, the value must match whether the window is in the urgent state or not.
A window can request attention by sending an XDG activation request. Such a request can be associated with an input event (e.g. in response to you clicking a notification), in which case it will be focused right away. It can also request attention without an input event, in which case it will simply be marked as "urgent". An urgent state doesn't do anything by itself, but it can be matched on to apply a window rule only to such windows.
window-rules .* .excludes .* .is-window-cast-target
When non-null, matches based on whether the window is being targeted by a window cast.
window-rules .* .excludes .* .at-startup
When true, this rule will match windows opened within the first 60 seconds of niri starting up. When false, this rule will match windows opened more than 60 seconds after niri started up. This is useful for applying different rules to windows opened from
window-rules .* .block-out-from
Whether to block out this window from screen captures. When the final value of this field is null, it is not blocked out from screen captures.
This is useful to protect sensitive information, like the contents of password managers or private chats. It is very important to understand the implications of this option, as described below, especially if you are a streamer or content creator.
Some of this may be obvious, but in general, these invariants should hold true:
There are three methods of screencapture in niri:
block-out-from | can ScreenCast? | can screencopy? | can screenshot? |
|---|---|---|---|
null | yes | yes | yes |
"screencast" | no | yes | yes |
"screen-capture" | no | no | yes |
For windows where block-out-from = "screencast";, contents of a window may still be visible in a screencast, if the window is indirectly displayed by a tool using wlr-screencopy.
If you are a streamer, either:
wlr-screencopy clients capture your top secret windows.(and don't let malicious software run on your system in the first place, you silly goose)
For windows where block-out-from = "screencast";, contents of a window will still be visible to any application using wlr-screencopy, even if you did not consent to this application capturing your screen.
Note that sandboxed clients restricted via security context (i.e. Flatpaks) do not have access to wlr-screencopy at all, and are not a concern.
block-out-from = "screen-capture";.Essentially, use block-out-from = "screen-capture"; if you want to be sure that the window is never visible to any external tool no matter what; or use block-out-from = "screencast"; if you want to be able to capture screenshots of the window without its contents normally being visible in a screencast. (at the risk of some tools still leaking the window contents, see above)
window-rules .* .opacity
The opacity of the window, ranging from 0 to 1.
If the final value of this field is null, niri will fall back to a value of 1.
Note that this is applied in addition to the opacity set by the client. Setting this to a semitransparent value on a window that is already semitransparent will make it even more transparent.
window-rules .* .geometry-corner-radius
The corner radii of the window decorations (border, focus ring, and shadow) in logical pixels.
By default, the actual window surface will be unaffected by this.
Set
window-rules .* .geometry-corner-radius .bottom-left
window-rules .* .geometry-corner-radius .bottom-right
window-rules .* .geometry-corner-radius .top-left
window-rules .* .geometry-corner-radius .top-right
window-rules .* .default-column-width
The default width for new columns with a freshly opened window.
When this is set to an empty attrset {}, the window will get to decide its initial width. This is effectively "unsetting" the default column width. This is distinct from a null value, which represents taht this option is not set at this level, and its value should be inherited from elsewhere.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
See
window-rules .* .default-column-width .fixed
The width of the column in logical pixels
window-rules .* .default-column-width .proportion
The width of the column as a proportion of the screen's width
window-rules .* .default-window-height
The default height for new floating windows.
This does nothing if the window is not floating when it is created.
There is no global default option for this in the layout section like for the column width. If the final value of this option is null, then it defaults to the empty attrset {}.
If this is set to an empty attrset {}, then it effectively "unsets" the default height for this window rule evaluation, as opposed to null which doesn't change the value at all. Future rules may still set it to a value and unset it again as they wish.
If the final value of this option is an empty attrset {}, then the client gets to decide the height of the window.
If the final value of this option is not an empty attrset {}, and the window spawns as floating, then the window will be created with the specified height.
window-rules .* .default-window-height .fixed
The height of the window in logical pixels
window-rules .* .default-window-height .proportion
The height of the window as a proportion of the screen's height
window-rules .* .default-column-display
How windows in newly opened columns should be displayed by default.
Note that you can override this for a given column at any time. Every column remembers its own display mode, independent from this setting. This setting controls the default value when a column is created.
A newly created column always contains exactly one window. As such, the window rule variant of this option can match on properties of that singular window.
window-rules .* .max-height
Sets the maximum height (in logical pixels) that niri will ever ask this window for.
Keep in mind that the window itself always has a final say in its size, and may not respect the maximum height set by this option.
Also, note that the maximum height is not taken into account when automatically sizing columns. That is, when a column is created normally, windows in it will be "automatically sized" to fill the vertical space. This algorithm will respect a minimum height, and not make windows any smaller than that, but the max height is only taken into account if it is equal to the min height. In other words, it will only accept a "fixed height" or a "minimum height". In practice, most windows do not set a max size unless it is equal to their min size, so this is usually not a problem without window rules.
If you manually change the window heights, then max-height will be taken into account and restrict you from making it any taller, as you'd intuitively expect.
window-rules .* .max-width
Sets the maximum width (in logical pixels) that niri will ever ask this window for.
Keep in mind that the window itself always has a final say in its size, and may not respect the maximum width set by this option.
window-rules .* .min-height
Sets the minimum height (in logical pixels) that niri will ever ask this window for.
Keep in mind that the window itself always has a final say in its size, and may not respect the minimum height set by this option.
window-rules .* .min-width
Sets the minimum width (in logical pixels) that niri will ever ask this window for.
Keep in mind that the window itself always has a final say in its size, and may not respect the minimum width set by this option.
window-rules .* .border
The border is a decoration drawn inside every window in the layout. It will take space away from windows. That is, if you have a border of 8px, then each window will be 8px smaller on each edge than if you had no border.
The currently focused window (i.e. the window that can receive keyboard input) will be drawn according to border.active, and all other windows will be drawn according to border.inactive.
If you have the focus-ring enabled, the border will be drawn inside (and over) the focus ring.
window-rules .* .border .enable
Whether to enable the border.
window-rules .* .border .width
The width of the border drawn around each window.
window-rules .* .border .urgent
The color of the border for windows that are requesting attention.
window-rules .* .border .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .border .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .border .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .border .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .border .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .border .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .border .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .border .active
The color of the border for the window that has keyboard focus.
window-rules .* .border .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .border .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .border .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .border .active .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .border .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .border .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .border .active .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .border .inactive
The color of the border for windows that do not have keyboard focus.
window-rules .* .border .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .border .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .border .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .border .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .border .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .border .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .border .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .focus-ring
The focus ring is a decoration drawn around the last focused window on each workspace. It takes no space away from windows. If you have insufficient gaps, the focus ring can be drawn over adjacent windows, but it will never affect the layout of windows.
The focused window of the currently focused workspace (i.e. the window that can receive keyboard input) will be drawn according to focus-ring.active, and the last focused window on all other workspaces will be drawn according to focus-ring.inactive.
If you have the border enabled, the focus ring will be drawn around (and under) the border.
window-rules .* .focus-ring .enable
Whether to enable the focus ring.
window-rules .* .focus-ring .width
The width of the focus ring drawn around each focused window.
window-rules .* .focus-ring .urgent
The color of the focus ring for windows that are requesting attention.
window-rules .* .focus-ring .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .focus-ring .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .focus-ring .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .focus-ring .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .focus-ring .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .focus-ring .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .focus-ring .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .focus-ring .active
The color of the focus ring for the window that has keyboard focus.
window-rules .* .focus-ring .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .focus-ring .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .focus-ring .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .focus-ring .active .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .focus-ring .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .focus-ring .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .focus-ring .active .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .focus-ring .inactive
The color of the focus ring for windows that do not have keyboard focus.
window-rules .* .focus-ring .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .focus-ring .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .focus-ring .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .focus-ring .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .focus-ring .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .focus-ring .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .focus-ring .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .tab-indicator
window-rules .* .tab-indicator .urgent
The color of the tab indicator for windows that are requesting attention.
window-rules .* .tab-indicator .urgent .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .tab-indicator .urgent .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .tab-indicator .urgent .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .tab-indicator .urgent .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .tab-indicator .urgent .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .tab-indicator .urgent .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .tab-indicator .urgent .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .tab-indicator .active
The color of the tab indicator for the window that has keyboard focus.
window-rules .* .tab-indicator .active .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .tab-indicator .active .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .tab-indicator .active .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .tab-indicator .active .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .tab-indicator .active .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .tab-indicator .active .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .tab-indicator .active .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .tab-indicator .inactive
The color of the tab indicator for windows that do not have keyboard focus.
window-rules .* .tab-indicator .inactive .color
A solid color to use for the decoration.
This is a CSS <color> value, like "rgb(255 0 0)", "#C0FFEE", or "sandybrown".
The specific crate that niri uses to parse this also supports some nonstandard color functions, like hwba(), hsv(), hsva(). See csscolorparser for details.
window-rules .* .tab-indicator .inactive .gradient
A linear gradient to use for the decoration.
This is meant to approximate the CSS linear-gradient() function, but niri does not fully support all the same parameters. Only an angle in degrees is supported.
window-rules .* .tab-indicator .inactive .gradient .angle
The angle of the gradient, in degrees, measured clockwise from a gradient that starts at the bottom and ends at the top.
This is the same as the angle parameter in the CSS linear-gradient() function, except you can only express it in degrees.
window-rules .* .tab-indicator .inactive .gradient .from
The starting <color> of the gradient.
For more details, see
window-rules .* .tab-indicator .inactive .gradient .in'
The colorspace to interpolate the gradient in. This option is named in' because in is a reserved keyword in Nix.
This is a subset of the <color-interpolation-method> values in CSS.
window-rules .* .tab-indicator .inactive .gradient .relative-to
The rectangle that this gradient is contained within.
If a gradient is relative-to the "window", then the gradient will start and stop at the window bounds. If you have many windows, then the gradients will have many starts and stops.

If the gradient is instead relative-to the "workspace-view", then the gradient will start and stop at the bounds of your view. Windows decorations will take on the color values from just the part of the screen that they occupy

these beautiful images are sourced from the release notes for v0.1.3
window-rules .* .tab-indicator .inactive .gradient .to
The ending <color> of the gradient.
For more details, see
window-rules .* .shadow
window-rules .* .shadow .enable
Whether to enable shadows on this window.
window-rules .* .shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
window-rules .* .shadow .offset .x
window-rules .* .shadow .offset .y
window-rules .* .shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
window-rules .* .shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
window-rules .* .shadow .draw-behind-window
window-rules .* .shadow .color
window-rules .* .shadow .inactive-color
window-rules .* .open-on-output
The output to open this window on.
If final value of this field is an output that exists, the new window will open on that output.
If the final value is an output that does not exist, or it is null, then the window opens on the currently focused output.
window-rules .* .open-on-workspace
The workspace to open this window on.
If the final value of this field is a named workspace that exists, the window will open on that workspace.
If the final value of this is a named workspace that does not exist, or it is null, the window opens on the currently focused workspace.
window-rules .* .open-floating
Whether to open this window as floating.
If the final value of this field is true, then this window will always be forced to open as floating.
If the final value of this field is false, then this window is never allowed to open as floating.
If the final value of this field is null, then niri will decide whether to open the window as floating or as tiled.
window-rules .* .open-focused
Whether to focus this window when it is opened.
If the final value of this field is null, then the window will be focused based on several factors:
(a dialog here means a toplevel surface that has a non-null parent)
If the final value of this field is not null, all of the above is ignored. Whether the window provides an activation token or not, doesn't matter. The window will be focused if and only if this field is true. If it is false, the window will not be focused, even if it provides a valid activation token.
window-rules .* .open-fullscreen
Whether to open this window in fullscreen.
If the final value of this field is true, then this window will always be forced to open in fullscreen.
If the final value of this field is false, then this window is never allowed to open in fullscreen, even if it requests to do so.
If the final value of this field is null, then the client gets to decide if this window will open in fullscreen.
window-rules .* .open-maximized
Whether to open this window in a maximized column.
If the final value of this field is null or false, then the window will not open in a maximized column.
If the final value of this field is true, then the window will open in a maximized column.
window-rules .* .draw-border-with-background
Whether to draw the focus ring and border with a background.
Normally, for windows with server-side decorations, niri will draw an actual border around them, because it knows they will be rectangular.
Because client-side decorations can take on arbitrary shapes, most notably including rounded corners, niri cannot really know the "correct" place to put a border, so for such windows it will draw a solid rectangle behind them instead.
For most windows, this looks okay. At worst, you have some uneven/jagged borders, instead of a gaping hole in the region outside of the corner radius of the window but inside its bounds.
If you wish to make windows such as your terminal transparent, and they use CSD, this is very undesirable. Instead of showing your wallpaper, you'll get a solid rectangle.
You can set this option per window to override niri's default behaviour, and instruct it to omit the border background for CSD windows. You can also explicitly enable it for SSD windows.
window-rules .* .clip-to-geometry
Whether to clip the window to its visual geometry, i.e. whether the corner radius should be applied to the window surface itself or just the decorations.
window-rules .* .default-floating-position
The default position for this window when it enters the floating layout.
If a window is created as floating, it will be placed at this position.
If a window is created as tiling, then later made floating, it will be placed at this position.
If a window has already been placed as floating through one of the above methods, and moved back to the tiling layout, then this option has no effect the next time it enters the floating layout. It will be placed at the same position it was last time.
The x and y fields are the distances from the edge of the screen to the edge of the window, in logical pixels. The relative-to field determines which two edges of the window and screen that these distances are measured from.
window-rules .* .default-floating-position .relative-to
window-rules .* .default-floating-position .x
window-rules .* .default-floating-position .y
window-rules .* .variable-refresh-rate
Takes effect only when the window is on an output with "on-demand". If the final value of this field is true, then the output will enable variable refresh rate when this window is present on it.
window-rules .* .scroll-factor
window-rules .* .tiled-state
window-rules .* .baba-is-float
Makes your window FLOAT up and down, like in the game Baba Is You.
Made for April Fools 2025.
layer-rules
Layer rules.
A layer rule will match based on
A given match rule can match based on one of several fields. For a given match rule to "match" a layer surface, it must match on all fields.
For a given layer rule to match a layer surface, the above logic is employed to determine whether any given match rule matches, and the interactions between the match rules decide whether the layer rule as a whole will match. For a given layer rule:
That is, a given layer rule will apply to a given layer surface if any of the entries in
All fields of a layer rule can be set to null, which represents that the field shall have no effect on the layer surface (and in general, the client is allowed to choose the initial value).
To compute the final set of layer rules that apply to a given layer surface, each layer rule in this list is consdered in order.
At first, every field is set to null.
Then, for each applicable layer rule:
The "final value" of a field is simply its value at the end of this process. That is, the final value of a field is the one from the last layer rule that matches the given layer rule (not considering null entries, unless there are no non-null entries)
If the final value of a given field is null, then it usually means that the client gets to decide. For more information, see the documentation for each field.
layer-rules .* .matches
A list of rules to match layer surfaces.
If any of these rules match a layer surface (or there are none), that layer rule will be considered for this layer surface. It can still be rejected by
If all of the rules do not match a layer surface, then this layer rule will not apply to that layer surface.
layer-rules .* .matches .* .namespace
A regular expression to match against the namespace of the layer surface.
All layer surfaces have a namespace set once at creation. When this rule is non-null, the regex must match the namespace of the layer surface for this rule to match.
layer-rules .* .matches .* .at-startup
When true, this rule will match layer surfaces opened within the first 60 seconds of niri starting up. When false, this rule will match layer surfaces opened more than 60 seconds after niri started up. This is useful for applying different rules to layer surfaces opened from
layer-rules .* .excludes
A list of rules to exclude layer surfaces.
If any of these rules match a layer surface, then this layer rule will not apply to that layer surface, even if it matches one of the rules in
If none of these rules match a layer surface, then this layer rule will not be rejected. It will apply to that layer surface if and only if it matches one of the rules in
layer-rules .* .excludes .* .namespace
A regular expression to match against the namespace of the layer surface.
All layer surfaces have a namespace set once at creation. When this rule is non-null, the regex must match the namespace of the layer surface for this rule to match.
layer-rules .* .excludes .* .at-startup
When true, this rule will match layer surfaces opened within the first 60 seconds of niri starting up. When false, this rule will match layer surfaces opened more than 60 seconds after niri started up. This is useful for applying different rules to layer surfaces opened from
layer-rules .* .block-out-from
Whether to block out this layer surface from screen captures. When the final value of this field is null, it is not blocked out from screen captures.
This is useful to protect sensitive information, like the contents of password managers or private chats. It is very important to understand the implications of this option, as described below, especially if you are a streamer or content creator.
Some of this may be obvious, but in general, these invariants should hold true:
There are three methods of screencapture in niri:
block-out-from | can ScreenCast? | can screencopy? | can screenshot? |
|---|---|---|---|
null | yes | yes | yes |
"screencast" | no | yes | yes |
"screen-capture" | no | no | yes |
For layer surfaces where block-out-from = "screencast";, contents of a layer surface may still be visible in a screencast, if the layer surface is indirectly displayed by a tool using wlr-screencopy.
If you are a streamer, either:
wlr-screencopy clients capture your top secret layer surfaces.(and don't let malicious software run on your system in the first place, you silly goose)
For layer surfaces where block-out-from = "screencast";, contents of a layer surface will still be visible to any application using wlr-screencopy, even if you did not consent to this application capturing your screen.
Note that sandboxed clients restricted via security context (i.e. Flatpaks) do not have access to wlr-screencopy at all, and are not a concern.
block-out-from = "screen-capture";.Essentially, use block-out-from = "screen-capture"; if you want to be sure that the layer surface is never visible to any external tool no matter what; or use block-out-from = "screencast"; if you want to be able to capture screenshots of the layer surface without its contents normally being visible in a screencast. (at the risk of some tools still leaking the layer surface contents, see above)
layer-rules .* .opacity
The opacity of the layer surface, ranging from 0 to 1.
If the final value of this field is null, niri will fall back to a value of 1.
Note that this is applied in addition to the opacity set by the client. Setting this to a semitransparent value on a layer surface that is already semitransparent will make it even more transparent.
layer-rules .* .geometry-corner-radius
The corner radii of the surface layer decorations (shadow) in logical pixels.
layer-rules .* .geometry-corner-radius .bottom-left
layer-rules .* .geometry-corner-radius .bottom-right
layer-rules .* .geometry-corner-radius .top-left
layer-rules .* .geometry-corner-radius .top-right
layer-rules .* .shadow
layer-rules .* .shadow .enable
Whether to enable shadows for this layer surface.
Note that while shadow properties are generally inherited from the workspace layout, this option is an exception.
layer-rules .* .shadow .offset
The offset of the shadow from the window, measured in logical pixels.
This behaves like a CSS box-shadow offset
layer-rules .* .shadow .offset .x
layer-rules .* .shadow .offset .y
layer-rules .* .shadow .softness
The softness/size of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow blur radius
layer-rules .* .shadow .spread
The spread of the shadow, measured in logical pixels.
This behaves like a CSS box-shadow spread radius
layer-rules .* .shadow .draw-behind-window
layer-rules .* .shadow .color
layer-rules .* .shadow .inactive-color
layer-rules .* .place-within-backdrop
Set to true to place the surface into the backdrop visible in the Overview and between workspaces. This will only work for background layer surfaces that ignore exclusive zones (typical for wallpaper tools). Layers within the backdrop will ignore all input.
layer-rules .* .baba-is-float
Makes your layer surface FLOAT up and down, like in the game Baba Is You.
Made for April Fools 2025.
spawn-at-startup
A list of commands to run when niri starts.
Each command can be represented as its raw arguments, or as a shell invocation.
When niri is built with the systemd feature (on by default), commands spawned this way (or with the spawn and spawn-sh actions) will be put in a transient systemd unit, which separates the process from niri and prevents e.g. OOM situations from killing the entire session.
spawn-at-startup .* .argv
Almost raw process arguments to spawn, without shell syntax.
A leading tilde in the zeroth argument will be expanded to the user's home directory. No other preprocessing is applied.
Usage is like so:
{
spawn-at-startup = [
{ argv = ["waybar"]; }
{ argv = ["swaybg" "--image" "/path/to/wallpaper.jpg"]; }
{ argv = ["~/.config/niri/scripts/startup.sh"]; }
];
}spawn-at-startup .* .sh
A shell command to spawn. Run wild with POSIX syntax.
{
spawn-at-startup = [
{ sh = "echo $NIRI_SOCKET > ~/.niri-socket"; }
];
}Note that { sh = "foo"; } is exactly equivalent to { argv = [ "sh" "-c" "foo" ]; }.
cursor
cursor .theme
The name of the xcursor theme to use.
This will also set the XCURSOR_THEME environment variable for all spawned processes.
cursor .size
The size of the cursor in logical pixels.
This will also set the XCURSOR_SIZE environment variable for all spawned processes.
cursor .hide-when-typing
Whether to hide the cursor when typing.
cursor .hide-after-inactive-ms
If set, the cursor will automatically hide once this number of milliseconds passes since the last cursor movement.
screenshot
screenshot .path
The path to save screenshots to.
If this is null, then no screenshots will be saved.
If the path starts with a ~, then it will be expanded to the user's home directory.
The path is then passed to strftime(3) with the current time, and the result is used as the final path.
hotkey-overlay
hotkey-overlay .skip-at-startup
Whether to skip the hotkey overlay shown when niri starts.
hotkey-overlay .hide-not-bound
By default, niri has a set of important keybinds that are always shown in the hotkey overlay, even if they are not bound to any key. In particular, this helps new users discover important keybinds, especially if their config has no keybinds at all.
You can disable this behaviour by setting this option to true. Then, niri will only show keybinds that are actually bound to a key.
config-notification
config-notification .disable-failed
Disable the notification that the config file failed to load.
clipboard
clipboard .disable-primary
The "primary selection" is a special clipboard that contains the text that was last selected with the mouse, and can usually be pasted with the middle mouse button.
This is a feature that is not inherently part of the core Wayland protocol, but a widely supported protocol extension enables support for it anyway.
This functionality was inherited from X11, is not necessarily intuitive to many users; especially those coming from other operating systems that do not have this feature (such as Windows, where the middle mouse button is used for scrolling).
If you don't want to have a primary selection, you can disable it with this option. Doing so will prevent niri from adveritising support for the primary selection protocol.
Note that this option has nothing to do with the "clipboard" that is commonly invoked with Ctrl+C and Ctrl+V.
prefer-no-csd
Whether to prefer server-side decorations (SSD) over client-side decorations (CSD).
environment
Environment variables to set for processes spawned by niri.
If an environment variable is already set in the environment, then it will be overridden by the value set here.
If a value is null, then the environment variable will be unset, even if it already existed.
Examples:
{
environment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = null;
};
}xwayland-satellite
Xwayland-satellite integration. Requires unstable niri and unstable xwayland-satellite.
xwayland-satellite .enable
xwayland-satellite .path
Path to the xwayland-satellite binary.
Set it to something like lib.getExe pkgs.xwayland-satellite-unstable.
debug
Debug options for niri.
kdl arguments in the type refers to a list of arguments passed to a node under the debug section. This is a way to pass arbitrary KDL-valid data to niri. See Note that for no-argument nodes, there is no special way to define them here. You can't pass them as just a "string" because that makes no sense here. You must pass it an empty array of arguments.
Here's an example of how to use this:
{
debug = {
disable-cursor-plane = [];
render-drm-device = "/dev/dri/renderD129";
};
}This option is, just like
Additionally, i don't guarantee stability of the debug options. They may change at any time without prior notice, either because of niri changing the available options, or because of me changing this to a more reasonable schema.