> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/niri-wm/niri/llms.txt
> Use this file to discover all available pages before exploring further.

# Miscellaneous Options

> Top-level configuration options in niri that don't have dedicated pages

This page documents all top-level options that don't otherwise have dedicated pages.

## Configuration Overview

Here are all of these options at a glance:

```kdl theme={null}
spawn-at-startup "waybar"
spawn-at-startup "alacritty"
spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"

prefer-no-csd

screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"

environment {
    QT_QPA_PLATFORM "wayland"
    DISPLAY null
}

cursor {
    xcursor-theme "breeze_cursors"
    xcursor-size 48

    hide-when-typing
    hide-after-inactive-ms 1000
}

overview {
    zoom 0.5
    backdrop-color "#262626"

    workspace-shadow {
        // off
        softness 40
        spread 10
        offset x=0 y=10
        color "#00000050"
    }
}

xwayland-satellite {
    // off
    path "xwayland-satellite"
}

clipboard {
    disable-primary
}

hotkey-overlay {
    skip-at-startup
    hide-not-bound
}

config-notification {
    disable-failed
}
```

## Startup Programs

### spawn-at-startup

<ParamField path="spawn-at-startup" type="string...">
  Spawn processes at niri startup. Accepts a path to the program binary as the first argument, followed by arguments to the program.
</ParamField>

This option works the same way as the [spawn key binding action](/configuration/key-bindings#spawn), so please read about all its subtleties there.

```kdl theme={null}
spawn-at-startup "waybar"
spawn-at-startup "alacritty"
```

<Note>
  Running niri as a systemd session supports xdg-desktop-autostart out of the box, which may be more convenient to use. Apps that you configured to autostart in GNOME will also "just work" in niri, without any manual `spawn-at-startup` configuration.
</Note>

### spawn-sh-at-startup

<Info>
  Available since version 25.08
</Info>

<ParamField path="spawn-sh-at-startup" type="string">
  Run shell commands at niri startup. The argument is a single string that is passed verbatim to `sh`. You can use shell variables, pipelines, `~` expansion and everything else as expected.
</ParamField>

See detailed description in the docs for the [spawn-sh key binding action](/configuration/key-bindings#spawn-sh).

```kdl theme={null}
// Pass all arguments in the same string.
spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
```

## Window Decorations

### prefer-no-csd

<ParamField path="prefer-no-csd" type="flag">
  Ask applications to omit their client-side decorations. If an application will specifically ask for CSD, the request will be honored. Additionally, clients will be informed that they are tiled, removing some rounded corners.
</ParamField>

With `prefer-no-csd` set, applications that negotiate server-side decorations through the xdg-decoration protocol will have focus ring and border drawn around them *without* a solid colored background.

```kdl theme={null}
prefer-no-csd
```

<Note>
  Unlike most other options, changing `prefer-no-csd` will not entirely affect already running applications. It will make some windows rectangular, but won't remove the title bars. This mainly has to do with niri working around a [bug in SDL2](https://github.com/libsdl-org/SDL/issues/8173) that prevents SDL2 applications from starting.

  Restart applications after changing `prefer-no-csd` in the config to fully apply it.
</Note>

## Screenshots

### screenshot-path

<ParamField path="screenshot-path" type="string">
  Set the path where screenshots are saved. A `~` at the front will be expanded to the home directory. The path is formatted with `strftime(3)` to give you the screenshot date and time.
</ParamField>

Niri will create the last folder of the path if it doesn't exist.

```kdl theme={null}
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
```

You can also set this option to `null` to disable saving screenshots to disk:

```kdl theme={null}
screenshot-path null
```

## Environment Variables

### environment

<ParamField path="environment" type="object">
  Override environment variables for processes spawned by niri. Set a variable to `null` to remove it.
</ParamField>

```kdl theme={null}
environment {
    // Set a variable like this:
    QT_QPA_PLATFORM "wayland"

    // Remove a variable by using null as the value:
    DISPLAY null
}
```

<Warning>
  These variables do not propagate to the systemd global environment, so tools and applications started by systemd do not see them. In particular, if you start a desktop shell through systemd, then use its built-in application launcher, the apps won't see these environment variables.
</Warning>

<Tip>
  If you want all processes to see the environment variables, you can set them in your login shell config instead (i.e. `~/.bash_profile`). The `niri-session` shell script runs through the login shell and imports all environment variables to systemd before starting niri.

  Keep in mind that all compositors will see variables set in the login shell, not just niri.
</Tip>

## Cursor Settings

### cursor

<ParamField path="cursor" type="object">
  Change the theme and size of the cursor as well as set the `XCURSOR_THEME` and `XCURSOR_SIZE` environment variables.
</ParamField>

```kdl theme={null}
cursor {
    xcursor-theme "breeze_cursors"
    xcursor-size 48
}
```

#### hide-when-typing

<Info>
  Available since version 0.1.10
</Info>

<ParamField path="hide-when-typing" type="flag">
  If set, hides the cursor when pressing a key on the keyboard.
</ParamField>

<Note>
  This setting might interfere with games running in Wine in native Wayland mode that use mouselook, such as first-person games. If your character's point of view jumps down when you press a key and move the mouse simultaneously, try disabling this setting.
</Note>

```kdl theme={null}
cursor {
    hide-when-typing
}
```

#### hide-after-inactive-ms

<Info>
  Available since version 0.1.10
</Info>

<ParamField path="hide-after-inactive-ms" type="number">
  If set, the cursor will automatically hide once this number of milliseconds passes since the last cursor movement.
</ParamField>

```kdl theme={null}
cursor {
    // Hide the cursor after one second of inactivity.
    hide-after-inactive-ms 1000
}
```

## Overview Settings

<Info>
  Available since version 25.05
</Info>

<ParamField path="overview" type="object">
  Settings for the Overview feature.
</ParamField>

### zoom

<ParamField path="zoom" type="number">
  Control how much the workspaces zoom out in the overview. Ranges from 0 to 0.75 where lower values make everything smaller.
</ParamField>

```kdl theme={null}
// Make workspaces four times smaller than normal in the overview.
overview {
    zoom 0.25
}
```

### backdrop-color

<ParamField path="backdrop-color" type="color">
  Set the backdrop color behind workspaces in the overview. The backdrop is also visible between workspaces when switching. The alpha channel for this color will be ignored.
</ParamField>

```kdl theme={null}
// Make the backdrop light.
overview {
    backdrop-color "#777777"
}
```

You can also set the color per-output [in the output config](/configuration/outputs#backdrop-color).

### workspace-shadow

<ParamField path="workspace-shadow" type="object">
  Control the shadow behind workspaces visible in the overview. Settings mirror the normal [shadow config in the layout section](/configuration/layout#shadow).
</ParamField>

Workspace shadows are configured for a workspace size normalized to 1080 pixels tall, then zoomed out together with the workspace. Practically, this means that you'll want bigger spread, offset, and softness compared to window shadows.

```kdl theme={null}
// Disable workspace shadows in the overview.
overview {
    workspace-shadow {
        off
    }
}
```

## Xwayland Integration

<Info>
  Available since version 25.08
</Info>

### xwayland-satellite

<ParamField path="xwayland-satellite" type="object">
  Settings for integration with [xwayland-satellite](https://github.com/Supreeeme/xwayland-satellite).
</ParamField>

When a recent enough xwayland-satellite is detected, niri will create the X11 sockets and set `DISPLAY`, then automatically spawn `xwayland-satellite` when an X11 client tries to connect. If Xwayland dies, niri will keep watching the X11 socket and restart `xwayland-satellite` as needed. This is very similar to how built-in Xwayland works in other compositors.

`off` disables the integration: niri won't create an X11 socket and won't set the `DISPLAY` environment variable.

`path` sets the path to the `xwayland-satellite` binary. By default, it's just `xwayland-satellite`, so it's looked up like any other non-absolute program name.

```kdl theme={null}
// Use a custom build of xwayland-satellite.
xwayland-satellite {
    path "~/source/rs/xwayland-satellite/target/release/xwayland-satellite"
}
```

## Clipboard Settings

<Info>
  Available since version 25.02
</Info>

### clipboard

<ParamField path="clipboard" type="object">
  Clipboard settings.
</ParamField>

Set the `disable-primary` flag to disable the primary clipboard (middle-click paste). Toggling this flag will only apply to applications started afterward.

```kdl theme={null}
clipboard {
    disable-primary
}
```

## Hotkey Overlay

### hotkey-overlay

<ParamField path="hotkey-overlay" type="object">
  Settings for the "Important Hotkeys" overlay.
</ParamField>

#### skip-at-startup

<ParamField path="skip-at-startup" type="flag">
  Set this flag if you don't want to see the hotkey help at niri startup.
</ParamField>

```kdl theme={null}
hotkey-overlay {
    skip-at-startup
}
```

#### hide-not-bound

<Info>
  Available since version 25.08
</Info>

<ParamField path="hide-not-bound" type="flag">
  By default, niri will show the most important actions even if they aren't bound to any key, to prevent confusion. Set this flag if you want to hide all actions not bound to any key.
</ParamField>

```kdl theme={null}
hotkey-overlay {
    hide-not-bound
}
```

You can customize which binds the hotkey overlay shows using the [hotkey-overlay-title property](/configuration/key-bindings#custom-hotkey-overlay-titles).

## Config Notification

<Info>
  Available since version 25.08
</Info>

### config-notification

<ParamField path="config-notification" type="object">
  Settings for the config created/failed notification.
</ParamField>

Set the `disable-failed` flag to disable the "Failed to parse the config file" notification. For example, if you have a custom one.

```kdl theme={null}
config-notification {
    disable-failed
}
```
