• niri-flake
  • settings

    includes
    declarations
    settings/includes.nix
    type
    partitioned list of ((config include) or path convertible to it)

    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
      declarations
      settings/includes.nix
      type
      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
      declarations
      settings/includes.nix
      type
      boolean
      default
      path is a store path

      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
    declarations
    settings/input.nix
      input.keyboard
      declarations
      settings/input.nix
        input.keyboard.xkb
        declarations
        settings/input.nix
        type
        null or (submodule)
        default
        null

        Parameters passed to libxkbcommon, which handles the keyboard in niri.

        Further reading:

        • smithay::wayland::seat::XkbConfig
          input.keyboard.xkb.file
          declarations
          settings/input.nix
          type
          null or string
          default
          null

          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
          declarations
          settings/input.nix
          type
          null or non-empty string
          default
          null

          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
          declarations
          settings/input.nix
          type
          null or non-empty string
          default
          null

          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
          declarations
          settings/input.nix
          type
          null or non-empty string
          default
          null

          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
          declarations
          settings/input.nix
          type
          null or non-empty string
          default
          null

          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
          declarations
          settings/input.nix
          type
          null or string
          default
          null

          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
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        The delay in milliseconds before a key starts repeating.

        input.keyboard.repeat-rate
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        The rate in characters per second at which a key repeats.

        input.keyboard.track-layout
        declarations
        settings/input.nix
        type
        null or one of "global", "window"
        default
        null

        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
        declarations
        settings/input.nix
        type
        null or boolean
        default
        null

        Enable numlock by default

      input.mouse
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.mouse.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.mouse.left-handed
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#left-handed-mode
        input.mouse.natural-scroll
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#scrolling
        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#natural-scrolling-vs-traditional-scrolling
        input.mouse.middle-emulation
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether a middle mouse button press should be sent when you press the left and right mouse buttons

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#middle-button-emulation
        • https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html#middle-button-emulation
        input.mouse.accel-profile
        declarations
        settings/input.nix
        type
        null or one of "adaptive", "flat"
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration-profiles
        input.mouse.accel-speed
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#pointer-acceleration
        input.mouse.scroll-button
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.mouse.scroll-button-lock
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.mouse.scroll-method
        declarations
        settings/input.nix
        type
        null or one of "no-scroll", "two-finger", "edge", "on-button-down"
        default
        null

        When to convert motion events to scrolling events. The default and supported values vary based on the device type.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#scrolling
        input.mouse.scroll-factor
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer or (submodule)
        default
        null

        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
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.tablet.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.tablet.left-handed
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#left-handed-mode
        input.tablet.map-to-output
        declarations
        settings/input.nix
        type
        null or string
        default
        null
        input.tablet.calibration-matrix
        declarations
        settings/input.nix
        type
        null or (2x3 matrix)
        default
        null

        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:

        • libinput_device_config_calibration_get_default_matrix()
        • libinput_device_config_calibration_set_matrix()
        • rustdoc because libinput's web docs are an eyesore
      input.touch
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.touch.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.touch.map-to-output
        declarations
        settings/input.nix
        type
        null or string
        default
        null
        input.touch.calibration-matrix
        declarations
        settings/input.nix
        type
        null or (2x3 matrix)
        default
        null

        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:

        • libinput_device_config_calibration_get_default_matrix()
        • libinput_device_config_calibration_set_matrix()
        • rustdoc because libinput's web docs are an eyesore
      input.touchpad
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.touchpad.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.touchpad.left-handed
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#left-handed-mode
        input.touchpad.natural-scroll
        declarations
        settings/input.nix
        type
        boolean
        default
        true

        Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#scrolling
        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#natural-scrolling-vs-traditional-scrolling
        input.touchpad.middle-emulation
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether a middle mouse button press should be sent when you press the left and right mouse buttons

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#middle-button-emulation
        • https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html#middle-button-emulation
        input.touchpad.accel-profile
        declarations
        settings/input.nix
        type
        null or one of "adaptive", "flat"
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration-profiles
        input.touchpad.accel-speed
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#pointer-acceleration
        input.touchpad.scroll-button
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.touchpad.scroll-button-lock
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.touchpad.scroll-method
        declarations
        settings/input.nix
        type
        null or one of "no-scroll", "two-finger", "edge", "on-button-down"
        default
        null

        When to convert motion events to scrolling events. The default and supported values vary based on the device type.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#scrolling
        input.touchpad.tap
        declarations
        settings/input.nix
        type
        boolean
        default
        true

        Whether to enable tap-to-click.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#tap-to-click
        • https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-to-click-behaviour
        input.touchpad.dwt
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether to disable the touchpad while typing.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#disable-while-typing
        • https://wayland.freedesktop.org/libinput/doc/latest/palm-detection.html#disable-while-typing
        input.touchpad.dwtp
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether to disable the touchpad while the trackpoint is in use.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#disable-while-trackpointing
        • https://wayland.freedesktop.org/libinput/doc/latest/palm-detection.html#disable-while-trackpointing
        input.touchpad.drag
        declarations
        settings/input.nix
        type
        null or boolean
        default
        null

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag
        input.touchpad.drag-lock
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag
        input.touchpad.disabled-on-external-mouse
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether to disable the touchpad when an external mouse is plugged in.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#send-events-mode
        input.touchpad.tap-button-map
        declarations
        settings/input.nix
        type
        null or one of "left-middle-right", "left-right-middle"
        default
        null

        The mouse button to register when tapping with 1, 2, or 3 fingers, when input.touchpad.tap is enabled.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#tap-to-click
        input.touchpad.click-method
        declarations
        settings/input.nix
        type
        null or one of "button-areas", "clickfinger"
        default
        null

        Method to determine which mouse button is pressed when you click the touchpad.

        • "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.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#click-method
        • https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickpad-software-button-behavior
        input.touchpad.scroll-factor
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer or (submodule)
        default
        null

        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
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.trackball.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.trackball.left-handed
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#left-handed-mode
        input.trackball.natural-scroll
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#scrolling
        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#natural-scrolling-vs-traditional-scrolling
        input.trackball.middle-emulation
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether a middle mouse button press should be sent when you press the left and right mouse buttons

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#middle-button-emulation
        • https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html#middle-button-emulation
        input.trackball.accel-profile
        declarations
        settings/input.nix
        type
        null or one of "adaptive", "flat"
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration-profiles
        input.trackball.accel-speed
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#pointer-acceleration
        input.trackball.scroll-button
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.trackball.scroll-button-lock
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.trackball.scroll-method
        declarations
        settings/input.nix
        type
        null or one of "no-scroll", "two-finger", "edge", "on-button-down"
        default
        null

        When to convert motion events to scrolling events. The default and supported values vary based on the device type.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#scrolling
      input.trackpoint
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null
        input.trackpoint.enable
        declarations
        settings/input.nix
        type
        boolean
        default
        true
        input.trackpoint.left-handed
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#left-handed-mode
        input.trackpoint.natural-scroll
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether scrolling should move the content in the scrolled direction (as opposed to moving the viewport)

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#scrolling
        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#natural-scrolling-vs-traditional-scrolling
        input.trackpoint.middle-emulation
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        Whether a middle mouse button press should be sent when you press the left and right mouse buttons

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#middle-button-emulation
        • https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html#middle-button-emulation
        input.trackpoint.accel-profile
        declarations
        settings/input.nix
        type
        null or one of "adaptive", "flat"
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration-profiles
        input.trackpoint.accel-speed
        declarations
        settings/input.nix
        type
        null or floating point number or signed integer
        default
        null

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/configuration.html#pointer-acceleration
        input.trackpoint.scroll-button
        declarations
        settings/input.nix
        type
        null or signed integer
        default
        null

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.trackpoint.scroll-button-lock
        declarations
        settings/input.nix
        type
        boolean
        default
        false

        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:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#on-button-scrolling
        input.trackpoint.scroll-method
        declarations
        settings/input.nix
        type
        null or one of "no-scroll", "two-finger", "edge", "on-button-down"
        default
        null

        When to convert motion events to scrolling events. The default and supported values vary based on the device type.

        Further reading:

        • https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html#scrolling
      input.warp-mouse-to-focus
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/input.nix
        type
        value true (singular enum)
        default
        true
        input.warp-mouse-to-focus.mode
        declarations
        settings/input.nix
        type
        null or one of "center-xy", "center-xy-always"
        default
        null

        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
      declarations
      settings/input.nix
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/input.nix
        type
        value true (singular enum)
        default
        true
        input.focus-follows-mouse.max-scroll-amount
        declarations
        settings/input.nix
        type
        null or string
        default
        null

        The maximum proportion of the screen to scroll at a time (expressed in percent)

      input.workspace-auto-back-and-forth
      declarations
      settings/input.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/input.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/input.nix
      type
      null or string
      default
      null
      input.mod-key-nested
      declarations
      settings/input.nix
      type
      null or string
      default
      null
    binds
    declarations
    settings/binds.nix
    type
    attribute set of (niri keybind)
      binds.<name>.allow-when-locked
      declarations
      settings/binds.nix
      type
      boolean
      default
      false

      Whether this keybind should be allowed when the screen is locked.

      This is only applicable for spawn keybinds.

      binds.<name>.allow-inhibiting
      declarations
      settings/binds.nix
      type
      boolean
      default
      true

      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
      declarations
      settings/binds.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/binds.nix
      type
      boolean
      default
      true

      Whether this keybind should trigger repeatedly when held down.

      binds.<name>.hotkey-overlay
      declarations
      settings/binds.nix
      type
      attribute-tagged union with choices: hidden, title
      default
      { hidden = false; }

      How this keybind should be displayed in the hotkey overlay.

      • By default, {hidden = false;} maps to omitting this from the KDL config; the default title of the action will be used.

      • {hidden = true;} will emit hotkey-overlay-title=null in the KDL config, and the hotkey overlay will not contain this keybind at all.
      • {title = "foo";} will emit hotkey-overlay-title="foo" in the KDL config, and the hotkey overlay will show "foo" as the title of this keybind.
        binds.<name>.hotkey-overlay.hidden
        declarations
        settings/binds.nix
        type
        boolean

        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
        declarations
        settings/binds.nix
        type
        string

        The title of this keybind in the hotkey overlay. Pango markup is supported.

      binds.<name>.action
      declarations
      settings/binds.nix
      type
      kdl leaf

      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
    declarations
    settings/switch-events.nix
      switch-events.tablet-mode-on
      declarations
      settings/switch-events.nix
      type
      null or (niri switch bind)
      default
      null
        switch-events.tablet-mode-on.action
        declarations
        settings/switch-events.nix
        type
        kdl leaf

        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 binds.<name>.action for more information on how this works, it has the exact same option type. Beware that switch binds are not the same as regular binds, and the actions they take are different. Currently, they can only accept spawn binds. Correct usage is like so:

        {
          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
      declarations
      settings/switch-events.nix
      type
      null or (niri switch bind)
      default
      null
        switch-events.tablet-mode-off.action
        declarations
        settings/switch-events.nix
        type
        kdl leaf

        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 binds.<name>.action for more information on how this works, it has the exact same option type. Beware that switch binds are not the same as regular binds, and the actions they take are different. Currently, they can only accept spawn binds. Correct usage is like so:

        {
          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
      declarations
      settings/switch-events.nix
      type
      null or (niri switch bind)
      default
      null
        switch-events.lid-open.action
        declarations
        settings/switch-events.nix
        type
        kdl leaf

        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 binds.<name>.action for more information on how this works, it has the exact same option type. Beware that switch binds are not the same as regular binds, and the actions they take are different. Currently, they can only accept spawn binds. Correct usage is like so:

        {
          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
      declarations
      settings/switch-events.nix
      type
      null or (niri switch bind)
      default
      null
        switch-events.lid-close.action
        declarations
        settings/switch-events.nix
        type
        kdl leaf

        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 binds.<name>.action for more information on how this works, it has the exact same option type. Beware that switch binds are not the same as regular binds, and the actions they take are different. Currently, they can only accept spawn binds. Correct usage is like so:

        {
          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
    declarations
    settings/gestures.nix
      gestures.dnd-edge-view-scroll
      declarations
      settings/gestures.nix

      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
        declarations
        settings/gestures.nix
        type
        null or floating point number or signed integer
        default
        null

        The width of the edge of the screen where dragging a window will scroll the view.

        gestures.dnd-edge-view-scroll.delay-ms
        declarations
        settings/gestures.nix
        type
        null or signed integer
        default
        null

        The delay in milliseconds before the view starts scrolling.

        gestures.dnd-edge-view-scroll.max-speed
        declarations
        settings/gestures.nix
        type
        null or floating point number or signed integer
        default
        null

        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
      declarations
      settings/gestures.nix

      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
        declarations
        settings/gestures.nix
        type
        null or floating point number or signed integer
        default
        null

        The height of the edge of the screen where dragging a window will scroll the view.

        gestures.dnd-edge-workspace-switch.delay-ms
        declarations
        settings/gestures.nix
        type
        null or signed integer
        default
        null

        The delay in milliseconds before the view starts scrolling.

        gestures.dnd-edge-workspace-switch.max-speed
        declarations
        settings/gestures.nix
        type
        null or floating point number or signed integer
        default
        null

        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
      declarations
      settings/interactions/hot-corners.nix
      overridden by
      outputs.<name>.hot-corners
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        gestures.hot-corners.bottom-right
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        gestures.hot-corners.top-left
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        gestures.hot-corners.top-right
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
    animations
    declarations
    settings/animations.nix
      animations.enable
      declarations
      settings/animations.nix
      type
      null or boolean
      default
      null
      animations.slowdown
      declarations
      settings/animations.nix
      type
      null or floating point number or signed integer
      default
      null
      animations.workspace-switch
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.workspace-switch.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.workspace-switch.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.workspace-switch.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.workspace-switch.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.workspace-switch.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.workspace-switch.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.workspace-switch.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.workspace-switch.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.workspace-switch.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.workspace-switch.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.horizontal-view-movement
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.horizontal-view-movement.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.horizontal-view-movement.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.horizontal-view-movement.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.horizontal-view-movement.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.horizontal-view-movement.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.horizontal-view-movement.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.horizontal-view-movement.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.horizontal-view-movement.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.horizontal-view-movement.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.horizontal-view-movement.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.config-notification-open-close
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.config-notification-open-close.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.config-notification-open-close.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.config-notification-open-close.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.config-notification-open-close.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.config-notification-open-close.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            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
            declarations
            settings/animations.nix
            type
            signed integer
          animations.config-notification-open-close.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.config-notification-open-close.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.config-notification-open-close.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.config-notification-open-close.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.exit-confirmation-open-close
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.exit-confirmation-open-close.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.exit-confirmation-open-close.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.exit-confirmation-open-close.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.exit-confirmation-open-close.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.exit-confirmation-open-close.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            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
            declarations
            settings/animations.nix
            type
            signed integer
          animations.exit-confirmation-open-close.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.exit-confirmation-open-close.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.exit-confirmation-open-close.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.exit-confirmation-open-close.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.window-movement
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.window-movement.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.window-movement.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.window-movement.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-movement.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.window-movement.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.window-movement.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.window-movement.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-movement.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-movement.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-movement.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.window-open
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.window-open.custom-shader
        declarations
        settings/animations.nix
        type
        null or string
        default
        null

        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
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.window-open.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.window-open.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-open.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.window-open.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.window-open.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.window-open.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-open.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-open.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-open.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.window-close
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.window-close.custom-shader
        declarations
        settings/animations.nix
        type
        null or string
        default
        null

        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
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.window-close.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.window-close.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-close.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.window-close.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.window-close.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.window-close.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-close.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-close.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-close.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.window-resize
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.window-resize.custom-shader
        declarations
        settings/animations.nix
        type
        null or string
        default
        null

        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
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.window-resize.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.window-resize.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-resize.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.window-resize.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.window-resize.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.window-resize.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.window-resize.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-resize.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.window-resize.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.screenshot-ui-open
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.screenshot-ui-open.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.screenshot-ui-open.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.screenshot-ui-open.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.screenshot-ui-open.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.screenshot-ui-open.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.screenshot-ui-open.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.screenshot-ui-open.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.screenshot-ui-open.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.screenshot-ui-open.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.screenshot-ui-open.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
      animations.overview-open-close
      declarations
      settings/animations.nix
      type
      null or (submodule)
      default
      null
        animations.overview-open-close.enable
        declarations
        settings/animations.nix
        type
        boolean
        default
        true
        animations.overview-open-close.kind
        declarations
        settings/animations.nix
        type
        null or attribute-tagged union with choices: easing, spring
        default
        null
          animations.overview-open-close.kind.easing
          declarations
          settings/animations.nix
          type
          submodule
            animations.overview-open-close.kind.easing.curve
            declarations
            settings/animations.nix
            type
            one of "linear", "ease-out-quad", "ease-out-cubic", "ease-out-expo", "cubic-bezier"

            The curve to use for the easing function.

            animations.overview-open-close.kind.easing.curve-args
            declarations
            settings/animations.nix
            type
            list of KDL value without type annotation

            Arguments to the easing curve. cubic-bezier requires 4 arguments, all others don't allow arguments.

            animations.overview-open-close.kind.easing.duration-ms
            declarations
            settings/animations.nix
            type
            signed integer
          animations.overview-open-close.kind.spring
          declarations
          settings/animations.nix
          type
          submodule
            animations.overview-open-close.kind.spring.damping-ratio
            declarations
            settings/animations.nix
            type
            floating point number
            animations.overview-open-close.kind.spring.epsilon
            declarations
            settings/animations.nix
            type
            floating point number
            animations.overview-open-close.kind.spring.stiffness
            declarations
            settings/animations.nix
            type
            signed integer
    overview
    declarations
    settings/overview.nix
      overview.backdrop-color
      declarations
      settings/appearance/background.nix
      overridden by
      outputs.<name>.backdrop-color
      type
      null or string
      default
      null

      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 layout.background-color, which is drawn for each workspace and goes in front of the backdrop.

      overview.workspace-shadow
      declarations
      settings/appearance/shadows.nix
        overview.workspace-shadow.enable
        declarations
        settings/appearance/shadows.nix
        type
        null or boolean
        default
        null
        overview.workspace-shadow.offset
        declarations
        settings/appearance/shadows.nix
        type
        null or (submodule)
        default
        null

        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
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
          overview.workspace-shadow.offset.y
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
        overview.workspace-shadow.softness
        declarations
        settings/appearance/shadows.nix
        type
        null or floating point number or signed integer
        default
        null

        The softness/size of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow blur radius

        overview.workspace-shadow.spread
        declarations
        settings/appearance/shadows.nix
        type
        null or floating point number or signed integer
        default
        null

        The spread of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow spread radius

        overview.workspace-shadow.draw-behind-window
        declarations
        settings/appearance/shadows.nix
        type
        null or boolean
        default
        null
        overview.workspace-shadow.color
        declarations
        settings/appearance/shadows.nix
        type
        null or string
        default
        null
      overview.zoom
      declarations
      settings/overview.nix
      type
      null or floating point number or signed integer
      default
      null

      Control how much the workspaces zoom out in the overview. zoom ranges from 0 to 0.75 where lower values make everything smaller.

    layout
    declarations
    settings/appearance/layout.nix
    refined by
    outputs.<name>.layout
    workspaces.<name>.layout
      layout.background-color
      declarations
      settings/appearance/background.nix
      overridden by
      outputs.<name>.layout.background-color
      workspaces.<name>.layout.background-color
      type
      null or string
      default
      null

      The background is a solid-colored layer drawn behind each workspace.

      It's visible through transparent windows, between , and inside any

      See also overview.backdrop-color, which is drawn at the back of each monitor, behind the workspace background.

      layout.gaps
      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

      The gap between windows in the layout, measured in logical pixels.

      layout.struts
      declarations
      settings/appearance/layout.nix
      overridden by
      outputs.<name>.layout.struts
      workspaces.<name>.layout.struts
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/appearance/layout.nix
        type
        floating point number or signed integer
        default
        0
        layout.struts.left
        declarations
        settings/appearance/layout.nix
        type
        floating point number or signed integer
        default
        0
        layout.struts.right
        declarations
        settings/appearance/layout.nix
        type
        floating point number or signed integer
        default
        0
        layout.struts.top
        declarations
        settings/appearance/layout.nix
        type
        floating point number or signed integer
        default
        0
      layout.empty-workspace-above-first
      declarations
      settings/appearance/layout.nix
      overridden by
      outputs.<name>.layout.empty-workspace-above-first
      type
      null or boolean
      default
      null

      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
      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

      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
        declarations
        settings/appearance/layout.nix
        type
        signed integer

        The width of the column in logical pixels

        layout.preset-column-widths.*.proportion
        declarations
        settings/appearance/layout.nix
        type
        floating point number

        The width of the column as a proportion of the screen's width

      layout.preset-window-heights
      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

      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
        declarations
        settings/appearance/layout.nix
        type
        signed integer

        The height of the window in logical pixels

        layout.preset-window-heights.*.proportion
        declarations
        settings/appearance/layout.nix
        type
        floating point number

        The height of the window as a proportion of the screen's height

      layout.default-column-width
      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

      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.preset-column-widths for more information.

        layout.default-column-width.fixed
        declarations
        settings/appearance/layout.nix
        type
        signed integer

        The width of the column in logical pixels

        layout.default-column-width.proportion
        declarations
        settings/appearance/layout.nix
        type
        floating point number

        The width of the column as a proportion of the screen's width

      layout.default-column-display
      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

      How windows in newly opened columns should be displayed by default.

      • "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.

      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
      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

      When changing focus, niri can automatically center the focused column.

      • "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.
      layout.always-center-single-column
      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

      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
      declarations
      settings/appearance/decorations.nix
      refined by
      outputs.<name>.layout.border
      workspaces.<name>.layout.border
      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.

        layout.border.enable
        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

        Whether to enable the border.

        layout.border.width
        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

        The width of the border drawn around each window.

        layout.border.urgent
        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

        The color of the border for windows that are requesting attention.

          layout.border.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.border.urgent.color.

            layout.border.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.border.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.border.urgent.color.

        layout.border.active
        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

        The color of the border for the window that has keyboard focus.

          layout.border.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.border.active.color.

            layout.border.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.border.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.border.active.color.

        layout.border.inactive
        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

        The color of the border for windows that do not have keyboard focus.

          layout.border.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.border.inactive.color.

            layout.border.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.border.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.border.inactive.color.

      layout.focus-ring
      declarations
      settings/appearance/decorations.nix
      refined by
      outputs.<name>.layout.focus-ring
      workspaces.<name>.layout.focus-ring
      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.

        layout.focus-ring.enable
        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

        Whether to enable the focus ring.

        layout.focus-ring.width
        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

        The width of the focus ring drawn around each focused window.

        layout.focus-ring.urgent
        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

        The color of the focus ring for windows that are requesting attention.

          layout.focus-ring.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.focus-ring.urgent.color.

            layout.focus-ring.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.focus-ring.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.focus-ring.urgent.color.

        layout.focus-ring.active
        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

        The color of the focus ring for the window that has keyboard focus.

          layout.focus-ring.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.focus-ring.active.color.

            layout.focus-ring.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.focus-ring.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.focus-ring.active.color.

        layout.focus-ring.inactive
        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

        The color of the focus ring for windows that do not have keyboard focus.

          layout.focus-ring.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.focus-ring.inactive.color.

            layout.focus-ring.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.focus-ring.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.focus-ring.inactive.color.

      layout.insert-hint
      declarations
      settings/appearance/decorations.nix
      refined by
      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.

        layout.insert-hint.enable
        declarations
        settings/appearance/decorations.nix
        overridden by
        outputs.<name>.layout.insert-hint.enable
        type
        null or boolean
        default
        null

        Whether to enable the insert hint.

        layout.insert-hint.display
        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

        The color of the insert hint.

          layout.insert-hint.display.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.insert-hint.display.color.

            layout.insert-hint.display.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.insert-hint.display.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.insert-hint.display.color.

      layout.tab-indicator
      declarations
      settings/appearance/decorations.nix
      refined by
      outputs.<name>.layout.tab-indicator
      workspaces.<name>.layout.tab-indicator
      window-rules.*.tab-indicator
        layout.tab-indicator.enable
        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
        layout.tab-indicator.hide-when-single-tab
        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
        layout.tab-indicator.place-within-column
        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
        layout.tab-indicator.gap
        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
        layout.tab-indicator.width
        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
        layout.tab-indicator.length
        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
          layout.tab-indicator.length.total-proportion
          declarations
          settings/appearance/decorations.nix
          type
          floating point number
        layout.tab-indicator.position
        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
        layout.tab-indicator.gaps-between-tabs
        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
        layout.tab-indicator.corner-radius
        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
        layout.tab-indicator.urgent
        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

        The color of the tab indicator for windows that are requesting attention.

          layout.tab-indicator.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.tab-indicator.urgent.color.

            layout.tab-indicator.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.tab-indicator.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.tab-indicator.urgent.color.

        layout.tab-indicator.active
        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

        The color of the tab indicator for the window that has keyboard focus.

          layout.tab-indicator.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.tab-indicator.active.color.

            layout.tab-indicator.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.tab-indicator.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.tab-indicator.active.color.

        layout.tab-indicator.inactive
        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

        The color of the tab indicator for windows that do not have keyboard focus.

          layout.tab-indicator.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see layout.tab-indicator.inactive.color.

            layout.tab-indicator.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            layout.tab-indicator.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see layout.tab-indicator.inactive.color.

      layout.shadow
      declarations
      settings/appearance/shadows.nix
      refined by
      outputs.<name>.layout.shadow
      workspaces.<name>.layout.shadow
      window-rules.*.shadow
      layer-rules.*.shadow
        layout.shadow.enable
        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

        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 layer-rules.*.shadow.enable to true.

        layout.shadow.offset
        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

        The offset of the shadow from the window, measured in logical pixels.

        This behaves like a CSS box-shadow offset

          layout.shadow.offset.x
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
          layout.shadow.offset.y
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
        layout.shadow.softness
        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

        The softness/size of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow blur radius

        layout.shadow.spread
        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

        The spread of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow spread radius

        layout.shadow.draw-behind-window
        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
        layout.shadow.color
        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
        layout.shadow.inactive-color
        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
    outputs
    declarations
    settings/outputs.nix
    type
    attribute set of (submodule)
      outputs.<name>.name
      declarations
      settings/outputs.nix
      type
      string
      default
      the key of the output

      The name of the output. You set this manually if you want the outputs to be ordered in a specific way.

      outputs.<name>.enable
      declarations
      settings/outputs.nix
      type
      boolean
      default
      true
      outputs.<name>.scale
      declarations
      settings/outputs.nix
      type
      null or floating point number or signed integer
      default
      null

      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
      declarations
      settings/outputs.nix
      type
      boolean
      default
      false

      Whether to flip this output vertically.

      outputs.<name>.transform.rotation
      declarations
      settings/outputs.nix
      type
      one of 0, 90, 180, 270
      default
      0

      Counter-clockwise rotation of this output in degrees.

      outputs.<name>.position
      declarations
      settings/outputs.nix
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/outputs.nix
        type
        signed integer
        outputs.<name>.position.y
        declarations
        settings/outputs.nix
        type
        signed integer
      outputs.<name>.mode
      declarations
      settings/outputs.nix
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/outputs.nix
        type
        signed integer
        outputs.<name>.mode.refresh
        declarations
        settings/outputs.nix
        type
        null or floating point number
        default
        null

        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
        declarations
        settings/outputs.nix
        type
        signed integer
      outputs.<name>.variable-refresh-rate
      declarations
      settings/outputs.nix
      type
      one of false, "on-demand", true
      default
      false

      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 window-rules.*.variable-refresh-rate is present on this output.

      outputs.<name>.focus-at-startup
      declarations
      settings/outputs.nix
      type
      boolean
      default
      false

      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 outputs.<name>.name to be the actual name of the output.

      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
      declarations
      settings/appearance/background.nix
      overrides
      overview.backdrop-color
      type
      null or string
      default
      null

      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.background-color, which is drawn for each workspace and goes in front of the backdrop.

      outputs.<name>.layout
      declarations
      settings/appearance/layout.nix
      refines
      layout
      refined by
      workspaces.<name>.layout
        outputs.<name>.layout.background-color
        declarations
        settings/appearance/background.nix
        overrides
        layout.background-color
        overridden by
        workspaces.<name>.layout.background-color
        type
        null or string
        default
        null

        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>.backdrop-color, which is drawn at the back of each monitor, behind the workspace background.

        outputs.<name>.layout.gaps
        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

        The gap between windows in the layout, measured in logical pixels.

        outputs.<name>.layout.struts
        declarations
        settings/appearance/layout.nix
        overrides
        layout.struts
        overridden by
        workspaces.<name>.layout.struts
        type
        null or (submodule)
        default
        null

        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
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          outputs.<name>.layout.struts.left
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          outputs.<name>.layout.struts.right
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          outputs.<name>.layout.struts.top
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
        outputs.<name>.layout.empty-workspace-above-first
        declarations
        settings/appearance/layout.nix
        overrides
        layout.empty-workspace-above-first
        type
        null or boolean
        default
        null

        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
        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

        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
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The width of the column in logical pixels

          outputs.<name>.layout.preset-column-widths.*.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The width of the column as a proportion of the screen's width

        outputs.<name>.layout.preset-window-heights
        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

        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
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The height of the window in logical pixels

          outputs.<name>.layout.preset-window-heights.*.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The height of the window as a proportion of the screen's height

        outputs.<name>.layout.default-column-width
        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

        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.preset-column-widths for more information.

          outputs.<name>.layout.default-column-width.fixed
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The width of the column in logical pixels

          outputs.<name>.layout.default-column-width.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The width of the column as a proportion of the screen's width

        outputs.<name>.layout.default-column-display
        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

        How windows in newly opened columns should be displayed by default.

        • "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.

        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
        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

        When changing focus, niri can automatically center the focused column.

        • "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.
        outputs.<name>.layout.always-center-single-column
        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

        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
        declarations
        settings/appearance/decorations.nix
        refines
        layout.border
        refined by
        workspaces.<name>.layout.border
        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.

          outputs.<name>.layout.border.enable
          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

          Whether to enable the border.

          outputs.<name>.layout.border.width
          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

          The width of the border drawn around each window.

          outputs.<name>.layout.border.urgent
          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

          The color of the border for windows that are requesting attention.

            outputs.<name>.layout.border.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.border.urgent.color.

              outputs.<name>.layout.border.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.border.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.border.urgent.color.

          outputs.<name>.layout.border.active
          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

          The color of the border for the window that has keyboard focus.

            outputs.<name>.layout.border.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.border.active.color.

              outputs.<name>.layout.border.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.border.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.border.active.color.

          outputs.<name>.layout.border.inactive
          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

          The color of the border for windows that do not have keyboard focus.

            outputs.<name>.layout.border.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.border.inactive.color.

              outputs.<name>.layout.border.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.border.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.border.inactive.color.

        outputs.<name>.layout.focus-ring
        declarations
        settings/appearance/decorations.nix
        refines
        layout.focus-ring
        refined by
        workspaces.<name>.layout.focus-ring
        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.

          outputs.<name>.layout.focus-ring.enable
          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

          Whether to enable the focus ring.

          outputs.<name>.layout.focus-ring.width
          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

          The width of the focus ring drawn around each focused window.

          outputs.<name>.layout.focus-ring.urgent
          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

          The color of the focus ring for windows that are requesting attention.

            outputs.<name>.layout.focus-ring.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.urgent.color.

              outputs.<name>.layout.focus-ring.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.focus-ring.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.urgent.color.

          outputs.<name>.layout.focus-ring.active
          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

          The color of the focus ring for the window that has keyboard focus.

            outputs.<name>.layout.focus-ring.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.active.color.

              outputs.<name>.layout.focus-ring.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.focus-ring.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.active.color.

          outputs.<name>.layout.focus-ring.inactive
          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

          The color of the focus ring for windows that do not have keyboard focus.

            outputs.<name>.layout.focus-ring.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.inactive.color.

              outputs.<name>.layout.focus-ring.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.focus-ring.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.focus-ring.inactive.color.

        outputs.<name>.layout.insert-hint
        declarations
        settings/appearance/decorations.nix
        refines
        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
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.insert-hint.enable
          type
          null or boolean
          default
          null

          Whether to enable the insert hint.

          outputs.<name>.layout.insert-hint.display
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.insert-hint.display
          type
          null or attribute-tagged union with choices: color, gradient
          default
          null

          The color of the insert hint.

            outputs.<name>.layout.insert-hint.display.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.insert-hint.display.color.

              outputs.<name>.layout.insert-hint.display.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.insert-hint.display.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.insert-hint.display.color.

        outputs.<name>.layout.tab-indicator
        declarations
        settings/appearance/decorations.nix
        refines
        layout.tab-indicator
        refined by
        workspaces.<name>.layout.tab-indicator
        window-rules.*.tab-indicator
          outputs.<name>.layout.tab-indicator.enable
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.tab-indicator.enable
          overridden by
          workspaces.<name>.layout.tab-indicator.enable
          type
          null or boolean
          default
          null
          outputs.<name>.layout.tab-indicator.hide-when-single-tab
          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
          outputs.<name>.layout.tab-indicator.place-within-column
          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
          outputs.<name>.layout.tab-indicator.gap
          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
          outputs.<name>.layout.tab-indicator.width
          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
          outputs.<name>.layout.tab-indicator.length
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.tab-indicator.length
          overridden by
          workspaces.<name>.layout.tab-indicator.length
          type
          null or (submodule)
          default
          null
            outputs.<name>.layout.tab-indicator.length.total-proportion
            declarations
            settings/appearance/decorations.nix
            type
            floating point number
          outputs.<name>.layout.tab-indicator.position
          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
          outputs.<name>.layout.tab-indicator.gaps-between-tabs
          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
          outputs.<name>.layout.tab-indicator.corner-radius
          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
          outputs.<name>.layout.tab-indicator.urgent
          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

          The color of the tab indicator for windows that are requesting attention.

            outputs.<name>.layout.tab-indicator.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.urgent.color.

              outputs.<name>.layout.tab-indicator.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.tab-indicator.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.urgent.color.

          outputs.<name>.layout.tab-indicator.active
          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

          The color of the tab indicator for the window that has keyboard focus.

            outputs.<name>.layout.tab-indicator.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.active.color.

              outputs.<name>.layout.tab-indicator.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.tab-indicator.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.active.color.

          outputs.<name>.layout.tab-indicator.inactive
          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

          The color of the tab indicator for windows that do not have keyboard focus.

            outputs.<name>.layout.tab-indicator.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.inactive.color.

              outputs.<name>.layout.tab-indicator.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              outputs.<name>.layout.tab-indicator.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see outputs.<name>.layout.tab-indicator.inactive.color.

        outputs.<name>.layout.shadow
        declarations
        settings/appearance/shadows.nix
        refines
        layout.shadow
        refined by
        workspaces.<name>.layout.shadow
        window-rules.*.shadow
        layer-rules.*.shadow
          outputs.<name>.layout.shadow.enable
          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

          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 layer-rules.*.shadow.enable to true.

          outputs.<name>.layout.shadow.offset
          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

          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
            declarations
            settings/appearance/shadows.nix
            type
            floating point number or signed integer
            outputs.<name>.layout.shadow.offset.y
            declarations
            settings/appearance/shadows.nix
            type
            floating point number or signed integer
          outputs.<name>.layout.shadow.softness
          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

          The softness/size of the shadow, measured in logical pixels.

          This behaves like a CSS box-shadow blur radius

          outputs.<name>.layout.shadow.spread
          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

          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
          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
          outputs.<name>.layout.shadow.color
          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
          outputs.<name>.layout.shadow.inactive-color
          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
      outputs.<name>.hot-corners
      declarations
      settings/interactions/hot-corners.nix
      overrides
      gestures.hot-corners
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        outputs.<name>.hot-corners.bottom-right
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        outputs.<name>.hot-corners.top-left
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
        outputs.<name>.hot-corners.top-right
        declarations
        settings/interactions/hot-corners.nix
        type
        boolean
    workspaces
    declarations
    settings/workspaces.nix
    type
    attribute set of (submodule)

    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
      declarations
      settings/workspaces.nix
      type
      string
      default
      the key of the workspace

      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
      declarations
      settings/workspaces.nix
      type
      null or string
      default
      null

      The name of the output the workspace should be assigned to.

      workspaces.<name>.layout
      declarations
      settings/appearance/layout.nix
      refines
      layout
      outputs.<name>.layout
        workspaces.<name>.layout.background-color
        declarations
        settings/appearance/background.nix
        overrides
        layout.background-color
        outputs.<name>.layout.background-color
        type
        null or string
        default
        null

        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>.backdrop-color, which is drawn at the back of each monitor, behind the workspace background.

        workspaces.<name>.layout.gaps
        declarations
        settings/appearance/layout.nix
        overrides
        layout.gaps
        outputs.<name>.layout.gaps
        type
        null or floating point number or signed integer
        default
        null

        The gap between windows in the layout, measured in logical pixels.

        workspaces.<name>.layout.struts
        declarations
        settings/appearance/layout.nix
        overrides
        layout.struts
        outputs.<name>.layout.struts
        type
        null or (submodule)
        default
        null

        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
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          workspaces.<name>.layout.struts.left
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          workspaces.<name>.layout.struts.right
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
          workspaces.<name>.layout.struts.top
          declarations
          settings/appearance/layout.nix
          type
          floating point number or signed integer
          default
          0
        workspaces.<name>.layout.preset-column-widths
        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

        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
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The width of the column in logical pixels

          workspaces.<name>.layout.preset-column-widths.*.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The width of the column as a proportion of the screen's width

        workspaces.<name>.layout.preset-window-heights
        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

        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
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The height of the window in logical pixels

          workspaces.<name>.layout.preset-window-heights.*.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The height of the window as a proportion of the screen's height

        workspaces.<name>.layout.default-column-width
        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

        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.preset-column-widths for more information.

          workspaces.<name>.layout.default-column-width.fixed
          declarations
          settings/appearance/layout.nix
          type
          signed integer

          The width of the column in logical pixels

          workspaces.<name>.layout.default-column-width.proportion
          declarations
          settings/appearance/layout.nix
          type
          floating point number

          The width of the column as a proportion of the screen's width

        workspaces.<name>.layout.default-column-display
        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

        How windows in newly opened columns should be displayed by default.

        • "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.

        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
        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

        When changing focus, niri can automatically center the focused column.

        • "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.
        workspaces.<name>.layout.always-center-single-column
        declarations
        settings/appearance/layout.nix
        overrides
        layout.always-center-single-column
        outputs.<name>.layout.always-center-single-column
        type
        null or boolean
        default
        null

        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
        declarations
        settings/appearance/decorations.nix
        refines
        layout.border
        outputs.<name>.layout.border
        refined by
        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.

          workspaces.<name>.layout.border.enable
          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

          Whether to enable the border.

          workspaces.<name>.layout.border.width
          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

          The width of the border drawn around each window.

          workspaces.<name>.layout.border.urgent
          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

          The color of the border for windows that are requesting attention.

            workspaces.<name>.layout.border.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.urgent.color.

              workspaces.<name>.layout.border.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.border.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.urgent.color.

          workspaces.<name>.layout.border.active
          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

          The color of the border for the window that has keyboard focus.

            workspaces.<name>.layout.border.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.active.color.

              workspaces.<name>.layout.border.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.border.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.active.color.

          workspaces.<name>.layout.border.inactive
          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

          The color of the border for windows that do not have keyboard focus.

            workspaces.<name>.layout.border.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.inactive.color.

              workspaces.<name>.layout.border.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.border.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.border.inactive.color.

        workspaces.<name>.layout.focus-ring
        declarations
        settings/appearance/decorations.nix
        refines
        layout.focus-ring
        outputs.<name>.layout.focus-ring
        refined by
        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.

          workspaces.<name>.layout.focus-ring.enable
          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

          Whether to enable the focus ring.

          workspaces.<name>.layout.focus-ring.width
          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

          The width of the focus ring drawn around each focused window.

          workspaces.<name>.layout.focus-ring.urgent
          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

          The color of the focus ring for windows that are requesting attention.

            workspaces.<name>.layout.focus-ring.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.urgent.color.

              workspaces.<name>.layout.focus-ring.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.focus-ring.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.urgent.color.

          workspaces.<name>.layout.focus-ring.active
          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

          The color of the focus ring for the window that has keyboard focus.

            workspaces.<name>.layout.focus-ring.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.active.color.

              workspaces.<name>.layout.focus-ring.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.focus-ring.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.active.color.

          workspaces.<name>.layout.focus-ring.inactive
          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

          The color of the focus ring for windows that do not have keyboard focus.

            workspaces.<name>.layout.focus-ring.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.inactive.color.

              workspaces.<name>.layout.focus-ring.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.focus-ring.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.focus-ring.inactive.color.

        workspaces.<name>.layout.tab-indicator
        declarations
        settings/appearance/decorations.nix
        refines
        layout.tab-indicator
        outputs.<name>.layout.tab-indicator
        refined by
        window-rules.*.tab-indicator
          workspaces.<name>.layout.tab-indicator.enable
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.tab-indicator.enable
          outputs.<name>.layout.tab-indicator.enable
          type
          null or boolean
          default
          null
          workspaces.<name>.layout.tab-indicator.hide-when-single-tab
          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
          workspaces.<name>.layout.tab-indicator.place-within-column
          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
          workspaces.<name>.layout.tab-indicator.gap
          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
          workspaces.<name>.layout.tab-indicator.width
          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
          workspaces.<name>.layout.tab-indicator.length
          declarations
          settings/appearance/decorations.nix
          overrides
          layout.tab-indicator.length
          outputs.<name>.layout.tab-indicator.length
          type
          null or (submodule)
          default
          null
            workspaces.<name>.layout.tab-indicator.length.total-proportion
            declarations
            settings/appearance/decorations.nix
            type
            floating point number
          workspaces.<name>.layout.tab-indicator.position
          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
          workspaces.<name>.layout.tab-indicator.gaps-between-tabs
          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
          workspaces.<name>.layout.tab-indicator.corner-radius
          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
          workspaces.<name>.layout.tab-indicator.urgent
          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

          The color of the tab indicator for windows that are requesting attention.

            workspaces.<name>.layout.tab-indicator.urgent.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.urgent.color.

              workspaces.<name>.layout.tab-indicator.urgent.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.tab-indicator.urgent.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.urgent.color.

          workspaces.<name>.layout.tab-indicator.active
          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

          The color of the tab indicator for the window that has keyboard focus.

            workspaces.<name>.layout.tab-indicator.active.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.active.color.

              workspaces.<name>.layout.tab-indicator.active.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.tab-indicator.active.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.active.color.

          workspaces.<name>.layout.tab-indicator.inactive
          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

          The color of the tab indicator for windows that do not have keyboard focus.

            workspaces.<name>.layout.tab-indicator.inactive.color
            declarations
            settings/appearance/decorations.nix
            type
            string

            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
            declarations
            settings/appearance/decorations.nix
            type
            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
              declarations
              settings/appearance/decorations.nix
              type
              signed integer
              default
              180

              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
              declarations
              settings/appearance/decorations.nix
              type
              string

              The starting <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.inactive.color.

              workspaces.<name>.layout.tab-indicator.inactive.gradient.in'
              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

              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
              declarations
              settings/appearance/decorations.nix
              type
              one of "window", "workspace-view"
              default
              "window"

              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.

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

              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

              four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

              these beautiful images are sourced from the release notes for v0.1.3

              workspaces.<name>.layout.tab-indicator.inactive.gradient.to
              declarations
              settings/appearance/decorations.nix
              type
              string

              The ending <color> of the gradient.

              For more details, see workspaces.<name>.layout.tab-indicator.inactive.color.

        workspaces.<name>.layout.shadow
        declarations
        settings/appearance/shadows.nix
        refines
        layout.shadow
        outputs.<name>.layout.shadow
        refined by
        window-rules.*.shadow
        layer-rules.*.shadow
          workspaces.<name>.layout.shadow.enable
          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

          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 layer-rules.*.shadow.enable to true.

          workspaces.<name>.layout.shadow.offset
          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

          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
            declarations
            settings/appearance/shadows.nix
            type
            floating point number or signed integer
            workspaces.<name>.layout.shadow.offset.y
            declarations
            settings/appearance/shadows.nix
            type
            floating point number or signed integer
          workspaces.<name>.layout.shadow.softness
          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

          The softness/size of the shadow, measured in logical pixels.

          This behaves like a CSS box-shadow blur radius

          workspaces.<name>.layout.shadow.spread
          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

          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
          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
          workspaces.<name>.layout.shadow.color
          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
          workspaces.<name>.layout.shadow.inactive-color
          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
    window-rules
    declarations
    settings/surface-rules.nix
    type
    list of (window rule)

    Window rules.

    A window rule will match based on window-rules.*.matches and window-rules.*.excludes. Both of these are lists of "match rules".

    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.

    • The title field, 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-id field, 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-startup field, 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.

    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:

    • 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 in excludes match this window, it will be rejected and this window rule will not match the given window.

    That is, a given window rule will apply to a given window if any of the entries in window-rules.*.matches match that window (or there are none), AND none of the entries in window-rules.*.excludes match that window.

    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:

    • 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.

    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
      declarations
      settings/surface-rules.nix
      type
      list of (match rule)

      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 window-rules.*.excludes

      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
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        When non-null, matches based on whether the window is being targeted by a window cast.

        window-rules.*.matches.*.at-startup
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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 spawn-at-startup versus those opened later.

      window-rules.*.excludes
      declarations
      settings/surface-rules.nix
      type
      list of (match rule)

      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 window-rules.*.matches

      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.*.matches

        window-rules.*.excludes.*.app-id
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        When non-null, matches based on whether the window is being targeted by a window cast.

        window-rules.*.excludes.*.at-startup
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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 spawn-at-startup versus those opened later.

      window-rules.*.block-out-from
      declarations
      settings/surface-rules.nix
      type
      null or one of "screencast", "screen-capture"
      default
      null

      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:

      • 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-from window is meant to be always blocked out from screencasts (as they are often used for livestreaming etc)

      • a block-out-from window 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)

      There are three methods of screencapture in niri:

      1. The org.freedesktop.portal.ScreenCast interface, which is used by tools like OBS primarily to capture video. When block-out-from = "screencast"; or block-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.

      2. The wlr-screencopy protocol, which is used by tools like grim primarily to capture screenshots. When block-out-from = "screencast";, this protocol is not affected and tools like grim can 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. When block-out-from = "screen-capture";, this window is blocked out from wlr-screencopy and thus will never leak in such a case, but of course it will always be blocked out from screenshots and (sometimes) the physical screen.

      3. The built in screenshot action, implemented in niri itself. This tool works similarly to those based on wlr-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-from does not affect the built in screenshot tool at all, and you can always take a screenshot of any window.

      block-out-fromcan ScreenCast?can screencopy?can screenshot?
      nullyesyesyes
      "screencast"noyesyes
      "screen-capture"nonoyes
      Streamers: Do not accidentally leak window contents via screenshots.

      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:

      • make sure not to use wlr-screencopy tools 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.
      Do not let malicious 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.

      If a window's contents are so secret that they must never be captured by any (non-sandboxed) application, set 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
      declarations
      settings/surface-rules.nix
      type
      null or floating point number
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or (submodule)
      default
      null

      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.*.clip-to-geometry to true to clip the window to its visual geometry, i.e. apply the corner radius to the window surface itself.

        window-rules.*.geometry-corner-radius.bottom-left
        declarations
        settings/surface-rules.nix
        type
        floating point number
        window-rules.*.geometry-corner-radius.bottom-right
        declarations
        settings/surface-rules.nix
        type
        floating point number
        window-rules.*.geometry-corner-radius.top-left
        declarations
        settings/surface-rules.nix
        type
        floating point number
        window-rules.*.geometry-corner-radius.top-right
        declarations
        settings/surface-rules.nix
        type
        floating point number
      window-rules.*.default-column-width
      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

      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.preset-column-widths for more information.

        window-rules.*.default-column-width.fixed
        declarations
        settings/appearance/layout.nix
        type
        signed integer

        The width of the column in logical pixels

        window-rules.*.default-column-width.proportion
        declarations
        settings/appearance/layout.nix
        type
        floating point number

        The width of the column as a proportion of the screen's width

      window-rules.*.default-window-height
      declarations
      settings/appearance/layout.nix
      type
      null or {} or attribute-tagged union with choices: fixed, proportion
      default
      null

      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
        declarations
        settings/appearance/layout.nix
        type
        signed integer

        The height of the window in logical pixels

        window-rules.*.default-window-height.proportion
        declarations
        settings/appearance/layout.nix
        type
        floating point number

        The height of the window as a proportion of the screen's height

      window-rules.*.default-column-display
      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

      How windows in newly opened columns should be displayed by default.

      • "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.

      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
      declarations
      settings/appearance/layout.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/appearance/layout.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/appearance/layout.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/appearance/layout.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/appearance/decorations.nix
      refines
      layout.border
      outputs.<name>.layout.border
      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.

        window-rules.*.border.enable
        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

        Whether to enable the border.

        window-rules.*.border.width
        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

        The width of the border drawn around each window.

        window-rules.*.border.urgent
        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

        The color of the border for windows that are requesting attention.

          window-rules.*.border.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.border.urgent.color.

            window-rules.*.border.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.border.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.border.urgent.color.

        window-rules.*.border.active
        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

        The color of the border for the window that has keyboard focus.

          window-rules.*.border.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.border.active.color.

            window-rules.*.border.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.border.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.border.active.color.

        window-rules.*.border.inactive
        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

        The color of the border for windows that do not have keyboard focus.

          window-rules.*.border.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.border.inactive.color.

            window-rules.*.border.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.border.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.border.inactive.color.

      window-rules.*.focus-ring
      declarations
      settings/appearance/decorations.nix
      refines
      layout.focus-ring
      outputs.<name>.layout.focus-ring
      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.

        window-rules.*.focus-ring.enable
        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

        Whether to enable the focus ring.

        window-rules.*.focus-ring.width
        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

        The width of the focus ring drawn around each focused window.

        window-rules.*.focus-ring.urgent
        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

        The color of the focus ring for windows that are requesting attention.

          window-rules.*.focus-ring.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.focus-ring.urgent.color.

            window-rules.*.focus-ring.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.focus-ring.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.focus-ring.urgent.color.

        window-rules.*.focus-ring.active
        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

        The color of the focus ring for the window that has keyboard focus.

          window-rules.*.focus-ring.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.focus-ring.active.color.

            window-rules.*.focus-ring.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.focus-ring.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.focus-ring.active.color.

        window-rules.*.focus-ring.inactive
        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

        The color of the focus ring for windows that do not have keyboard focus.

          window-rules.*.focus-ring.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.focus-ring.inactive.color.

            window-rules.*.focus-ring.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.focus-ring.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.focus-ring.inactive.color.

      window-rules.*.tab-indicator
      declarations
      settings/appearance/decorations.nix
      refines
      layout.tab-indicator
      outputs.<name>.layout.tab-indicator
      workspaces.<name>.layout.tab-indicator
        window-rules.*.tab-indicator.urgent
        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

        The color of the tab indicator for windows that are requesting attention.

          window-rules.*.tab-indicator.urgent.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.urgent.color.

            window-rules.*.tab-indicator.urgent.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.tab-indicator.urgent.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.urgent.color.

        window-rules.*.tab-indicator.active
        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

        The color of the tab indicator for the window that has keyboard focus.

          window-rules.*.tab-indicator.active.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.active.color.

            window-rules.*.tab-indicator.active.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.tab-indicator.active.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.active.color.

        window-rules.*.tab-indicator.inactive
        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

        The color of the tab indicator for windows that do not have keyboard focus.

          window-rules.*.tab-indicator.inactive.color
          declarations
          settings/appearance/decorations.nix
          type
          string

          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
          declarations
          settings/appearance/decorations.nix
          type
          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
            declarations
            settings/appearance/decorations.nix
            type
            signed integer
            default
            180

            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
            declarations
            settings/appearance/decorations.nix
            type
            string

            The starting <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.inactive.color.

            window-rules.*.tab-indicator.inactive.gradient.in'
            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

            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
            declarations
            settings/appearance/decorations.nix
            type
            one of "window", "workspace-view"
            default
            "window"

            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.

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of each window, which is yellow, transitioning to red at the top right corner of each window. the three vertical windows look identical, with a yellow and red corner, and the other two corners are slightly different shades of orange. the big window has a yellow and red corner, with the top left corner being a very red orange orange, and the bottom right corner being a very yellow orange. the top edge of the top stacked window has a noticeable transition from a yellowish orange to completely red.

            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

            four windows arranged in two columns; a big window to the left of three stacked windows. a gradient is drawn from the bottom left corner of the workspace view, which is yellow, transitioning to red at the top right corner of the workspace view. it looks like the gradient starts in the bottom left of the big window, and ends in the top right of the upper stacked window. the bottom left corner of the top stacked window is a red orange color, and the bottom left corner of the middle stacked window is a more neutral orange color. the bottom edge of the big window is almost entirely yellow, and the top edge of the top stacked window is almost entirely red.

            these beautiful images are sourced from the release notes for v0.1.3

            window-rules.*.tab-indicator.inactive.gradient.to
            declarations
            settings/appearance/decorations.nix
            type
            string

            The ending <color> of the gradient.

            For more details, see window-rules.*.tab-indicator.inactive.color.

      window-rules.*.shadow
      declarations
      settings/appearance/shadows.nix
      refines
      layout.shadow
      outputs.<name>.layout.shadow
      workspaces.<name>.layout.shadow
        window-rules.*.shadow.enable
        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

        Whether to enable shadows on this window.

        window-rules.*.shadow.offset
        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

        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
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
          window-rules.*.shadow.offset.y
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
        window-rules.*.shadow.softness
        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

        The softness/size of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow blur radius

        window-rules.*.shadow.spread
        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

        The spread of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow spread radius

        window-rules.*.shadow.draw-behind-window
        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
        window-rules.*.shadow.color
        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
        window-rules.*.shadow.inactive-color
        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
      window-rules.*.open-on-output
      declarations
      settings/surface-rules.nix
      type
      null or string
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or string
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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:

      • 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.

      (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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or (submodule)
      default
      null

      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
        declarations
        settings/surface-rules.nix
        type
        one of "top-left", "top-right", "bottom-left", "bottom-right", "top", "bottom", "left", "right"
        window-rules.*.default-floating-position.x
        declarations
        settings/surface-rules.nix
        type
        floating point number or signed integer
        window-rules.*.default-floating-position.y
        declarations
        settings/surface-rules.nix
        type
        floating point number or signed integer
      window-rules.*.variable-refresh-rate
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      Takes effect only when the window is on an output with outputs.<name>.variable-refresh-rate set to "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
      declarations
      settings/surface-rules.nix
      type
      null or floating point number or signed integer
      default
      null
      window-rules.*.tiled-state
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null
      window-rules.*.baba-is-float
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      Makes your window FLOAT up and down, like in the game Baba Is You.

      Made for April Fools 2025.

    layer-rules
    declarations
    settings/surface-rules.nix
    type
    list of (layer rule)

    Layer rules.

    A layer rule will match based on layer-rules.*.matches and layer-rules.*.excludes. Both of these are lists of "match rules".

    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.

    • The namespace field, 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-startup field, 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.

    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:

    • 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 in excludes match this layer surface, it will be rejected and this layer rule will not match the given layer surface.

    That is, a given layer rule will apply to a given layer surface if any of the entries in layer-rules.*.matches match that layer surface (or there are none), AND none of the entries in layer-rules.*.excludes match that layer surface.

    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:

    • 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.

    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
      declarations
      settings/surface-rules.nix
      type
      list of (match rule)

      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 layer-rules.*.excludes

      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
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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 spawn-at-startup versus those opened later.

      layer-rules.*.excludes
      declarations
      settings/surface-rules.nix
      type
      list of (match rule)

      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 layer-rules.*.matches

      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.*.matches

        layer-rules.*.excludes.*.namespace
        declarations
        settings/surface-rules.nix
        type
        null or regular expression string
        default
        null

        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
        declarations
        settings/surface-rules.nix
        type
        null or boolean
        default
        null

        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 spawn-at-startup versus those opened later.

      layer-rules.*.block-out-from
      declarations
      settings/surface-rules.nix
      type
      null or one of "screencast", "screen-capture"
      default
      null

      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:

      • 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-from layer surface is meant to be always blocked out from screencasts (as they are often used for livestreaming etc)

      • a block-out-from layer 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)

      There are three methods of screencapture in niri:

      1. The org.freedesktop.portal.ScreenCast interface, which is used by tools like OBS primarily to capture video. When block-out-from = "screencast"; or block-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.

      2. The wlr-screencopy protocol, which is used by tools like grim primarily to capture screenshots. When block-out-from = "screencast";, this protocol is not affected and tools like grim can 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. When block-out-from = "screen-capture";, this layer surface is blocked out from wlr-screencopy and thus will never leak in such a case, but of course it will always be blocked out from screenshots and (sometimes) the physical screen.

      3. The built in screenshot action, implemented in niri itself. This tool works similarly to those based on wlr-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-from does not affect the built in screenshot tool at all, and you can always take a screenshot of any layer surface.

      block-out-fromcan ScreenCast?can screencopy?can screenshot?
      nullyesyesyes
      "screencast"noyesyes
      "screen-capture"nonoyes
      Streamers: Do not accidentally leak layer surface contents via screenshots.

      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:

      • make sure not to use wlr-screencopy tools 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.
      Do not let malicious 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.

      If a layer surface's contents are so secret that they must never be captured by any (non-sandboxed) application, set 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
      declarations
      settings/surface-rules.nix
      type
      null or floating point number
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or (submodule)
      default
      null

      The corner radii of the surface layer decorations (shadow) in logical pixels.

        layer-rules.*.geometry-corner-radius.bottom-left
        declarations
        settings/surface-rules.nix
        type
        floating point number
        layer-rules.*.geometry-corner-radius.bottom-right
        declarations
        settings/surface-rules.nix
        type
        floating point number
        layer-rules.*.geometry-corner-radius.top-left
        declarations
        settings/surface-rules.nix
        type
        floating point number
        layer-rules.*.geometry-corner-radius.top-right
        declarations
        settings/surface-rules.nix
        type
        floating point number
      layer-rules.*.shadow
      declarations
      settings/appearance/shadows.nix
      refines
      layout.shadow
      outputs.<name>.layout.shadow
      workspaces.<name>.layout.shadow
        layer-rules.*.shadow.enable
        declarations
        settings/appearance/shadows.nix
        type
        null or boolean
        default
        null

        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. workspaces.<name>.layout.shadow.enable has no effect on this option. To use shadows on layer surfaces, you must explicitly set this option to true.

        layer-rules.*.shadow.offset
        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

        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
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
          layer-rules.*.shadow.offset.y
          declarations
          settings/appearance/shadows.nix
          type
          floating point number or signed integer
        layer-rules.*.shadow.softness
        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

        The softness/size of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow blur radius

        layer-rules.*.shadow.spread
        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

        The spread of the shadow, measured in logical pixels.

        This behaves like a CSS box-shadow spread radius

        layer-rules.*.shadow.draw-behind-window
        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
        layer-rules.*.shadow.color
        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
        layer-rules.*.shadow.inactive-color
        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
      layer-rules.*.place-within-backdrop
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      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
      declarations
      settings/surface-rules.nix
      type
      null or boolean
      default
      null

      Makes your layer surface FLOAT up and down, like in the game Baba Is You.

      Made for April Fools 2025.

    spawn-at-startup
    declarations
    settings/misc.nix
    type
    list of attribute-tagged union with choices: argv, command, sh

    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
      declarations
      settings/misc.nix
      type
      list of string

      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
      declarations
      settings/misc.nix
      type
      string

      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
    declarations
    settings/misc.nix
      cursor.theme
      declarations
      settings/misc.nix
      type
      null or string
      default
      null

      The name of the xcursor theme to use.

      This will also set the XCURSOR_THEME environment variable for all spawned processes.

      cursor.size
      declarations
      settings/misc.nix
      type
      null or signed integer
      default
      null

      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
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null

      Whether to hide the cursor when typing.

      cursor.hide-after-inactive-ms
      declarations
      settings/misc.nix
      type
      null or signed integer
      default
      null

      If set, the cursor will automatically hide once this number of milliseconds passes since the last cursor movement.

    screenshot
    declarations
    settings/misc.nix
    type
    null or (submodule)
    default
    null
      screenshot.path
      declarations
      settings/misc.nix
      type
      null or string

      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
    declarations
    settings/misc.nix
      hotkey-overlay.skip-at-startup
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null

      Whether to skip the hotkey overlay shown when niri starts.

      hotkey-overlay.hide-not-bound
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null

      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
    declarations
    settings/misc.nix
      config-notification.disable-failed
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null

      Disable the notification that the config file failed to load.

    clipboard
    declarations
    settings/misc.nix
      clipboard.disable-primary
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null

      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
    declarations
    settings/misc.nix
    type
    null or boolean
    default
    null

    Whether to prefer server-side decorations (SSD) over client-side decorations (CSD).

    environment
    declarations
    settings/misc.nix
    type
    attribute set of (null or string)

    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
    declarations
    settings/misc.nix

    Xwayland-satellite integration. Requires unstable niri and unstable xwayland-satellite.

      xwayland-satellite.enable
      declarations
      settings/misc.nix
      type
      null or boolean
      default
      null
      xwayland-satellite.path
      declarations
      settings/misc.nix
      type
      null or string
      default
      null

      Path to the xwayland-satellite binary.

      Set it to something like lib.getExe pkgs.xwayland-satellite-unstable.

    debug
    declarations
    settings/debug.nix
    type
    attribute set of kdl arguments

    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 binds.<name>.action for more information on all the ways you can use this.

    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 binds.<name>.action, not verified by the nix module. But, it will be validated by niri before committing the config.

    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.

    rendered
    declarations
    settings/toplevel.nix
    type
    KDL document