Jump to content

Niri: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
m Adjust the position of translation tags
m Update niri casing to lowercase "niri"
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:niri}}
{{infobox application
{{infobox application
| name = Niri
| name = niri
| type = Wayland compositor
| type = Wayland compositor
| initialRelease = 2023-11-26
| initialRelease = 2023-11-26
Line 28: Line 29:
{{Note|<translate>Niri can be enabled <strong>without installing a custom flake</strong> such as [https://github.com/sodiboo/niri-flake niri-flake]. {{ic|niri-flake}} is only necessary if you would like to use a very recent version of Niri or if you would want to write configurations in the Nix language, although as of 2025 this repository is listed near the top in search engines.</translate>}}
{{Note|<translate>Niri can be enabled <strong>without installing a custom flake</strong> such as [https://github.com/sodiboo/niri-flake niri-flake]. {{ic|niri-flake}} is only necessary if you would like to use a very recent version of Niri or if you would want to write configurations in the Nix language, although as of 2025 this repository is listed near the top in search engines.</translate>}}


{{Warning|<translate>Without [[#Configuration]] or [[#Additional Setup]], or after a fresh installation, you may be unable to launch apps due to missing expected programs such as Alacritty and fuzzel. Press <kbd>Super</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> to exit Niri and proceed to one of them.</translate>}}
{{Warning|<translate>Without [[#Configuration]] or [[#Additional Setup]], or after a fresh installation, you may be unable to launch apps due to missing expected programs such as Alacritty and fuzzel. Press <kbd>Super</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> to exit niri and proceed to one of them.</translate>}}


<translate>
<translate>
== Configuration ==
== Configuration ==


The configuration path for Niri is {{ic|$XDG_CONFIG_HOME/niri/config.kdl}}. Therefore [[Home Manager]] can be used for configuration:
The configuration path for niri is {{ic|$XDG_CONFIG_HOME/niri/config.kdl}}. Therefore [[Home Manager]] can be used for configuration:
</translate>
</translate>


Line 43: Line 44:
You might want to start from [https://github.com/YaLTeR/niri/blob/main/resources/default-config.kdl the default configuration file] described at [https://github.com/YaLTeR/niri/wiki/Getting-Started#main-default-hotkeys].
You might want to start from [https://github.com/YaLTeR/niri/blob/main/resources/default-config.kdl the default configuration file] described at [https://github.com/YaLTeR/niri/wiki/Getting-Started#main-default-hotkeys].


See [https://yalter.github.io/niri/ the wiki] for configuration options for Niri.
See [https://yalter.github.io/niri/ the wiki] for configuration options for niri.


== Additional Setup ==
== Additional Setup ==


As described in [https://github.com/YaLTeR/niri/wiki/Example-systemd-Setup Example systemd Setup (Niri wiki)], you might want to set up some additional services including [[Swayidle]], [[Swaylock]], [[Waybar]], [[Polkit]] and [[Secret Service]] as follows to complement the functionality of a regular window manager. Some of the these settings are also required to enable all the features of [https://github.com/YaLTeR/niri/blob/main/resources/default-config.kdl the default configuration file].
As described in [https://github.com/YaLTeR/niri/wiki/Example-systemd-Setup Example systemd Setup (niri wiki)], you might want to set up some additional services including [[Swayidle]], [[Swaylock]], [[Waybar]], [[Polkit]] and [[Secret Service]] as follows to complement the functionality of a regular window manager. Some of the these settings are also required to enable all the features of [https://github.com/YaLTeR/niri/blob/main/resources/default-config.kdl the default configuration file].
</translate>
</translate>


Line 83: Line 84:


<translate>
<translate>
However, since Niri does not support text-input-v1, sometimes enabling text-input-v3 by manually adding {{ic|<nowiki>--wayland-text-input-version=3</nowiki>}} flag is necessary for IME to work:
However, since niri does not support text-input-v1, sometimes enabling text-input-v3 by manually adding {{ic|<nowiki>--wayland-text-input-version=3</nowiki>}} flag is necessary for IME to work:
</translate>
</translate>


Line 104: Line 105:
<translate>
<translate>
=== XWayland apps not working ===
=== XWayland apps not working ===
There is a optional dependency for Niri which is highly recommended to install (you can read [https://github.com/YaLTeR/niri/wiki/Xwayland this] article to learn more about this)
 
There is a optional dependency for niri which is highly recommended to install (you can read [https://github.com/YaLTeR/niri/wiki/Xwayland this] article to learn more about this)
</translate>
</translate>


Line 120: Line 122:


<translate>
<translate>
After you installed {{ic|xwayland-satellite}} Niri will integrate it out of the box and all of your XWayland apps will function properly.
After you installed {{ic|xwayland-satellite}} niri will integrate it out of the box and all of your XWayland apps will function properly.


=== File picker not working ===
=== File picker not working ===
If you are using <code>xdg-desktop-portal-gnome</code>, it will attempt to use Nautilus as the file picker, which will fail if Nautilus is not installed.
If you are using <code>xdg-desktop-portal-gnome</code>, it will attempt to use Nautilus as the file picker, which will fail if Nautilus is not installed.



Latest revision as of 06:36, 18 March 2026

niri

Wayland compositor Application

100%
Initial release2023-11-26
Latest release25.11; 29 Nov 2025
StatusActive
Operating SystemLinux, FreeBSD
Language(s)Rust, GLSL
LicenseGNU General Public License v3.0 only
External links
GitHubniri-wm/niri
Bug trackerhttps://github.com/niri-wm/niri/issues
DocumentationOfficial wiki, niri-flake

Niri is a scrollable-tiling Wayland compositor.

Installation

Simply enable programs.niri:

❄︎ /etc/nixos/configuration.nix
programs.niri.enable = true;
Note: Niri can be enabled without installing a custom flake such as niri-flake. niri-flake is only necessary if you would like to use a very recent version of Niri or if you would want to write configurations in the Nix language, although as of 2025 this repository is listed near the top in search engines.
⚠︎
Warning: Without #Configuration or #Additional Setup, or after a fresh installation, you may be unable to launch apps due to missing expected programs such as Alacritty and fuzzel. Press Super+Shift+E to exit niri and proceed to one of them.

Configuration

The configuration path for niri is $XDG_CONFIG_HOME/niri/config.kdl. Therefore Home Manager can be used for configuration:

❄︎ ~/.config/home-manager/home.nix
xdg.configFile."niri/config.kdl".source = ./config.kdl;

You might want to start from the default configuration file described at [1].

See the wiki for configuration options for niri.

Additional Setup

As described in Example systemd Setup (niri wiki), you might want to set up some additional services including Swayidle, Swaylock, Waybar, Polkit and Secret Service as follows to complement the functionality of a regular window manager. Some of the these settings are also required to enable all the features of the default configuration file.

❄︎ /etc/nixos/configuration.nix
security.polkit.enable = true; # polkit
services.gnome.gnome-keyring.enable = true; # secret service
security.pam.services.swaylock = {};

programs.waybar.enable = true; # top bar
environment.systemPackages = with pkgs; [ alacritty fuzzel swaylock mako swayidle ];

Or using Home Manager:

❄︎ ~/.config/home-manager/home.nix
programs.alacritty.enable = true; # Super+T in the default setting (terminal)
programs.fuzzel.enable = true; # Super+D in the default setting (app launcher)
programs.swaylock.enable = true; # Super+Alt+L in the default setting (screen locker)
programs.waybar.enable = true; # launch on startup in the default setting (bar)
services.mako.enable = true; # notification daemon
services.swayidle.enable = true; # idle management daemon
services.polkit-gnome.enable = true; # polkit
home.packages = with pkgs; [
  swaybg # wallpaper
];

Troubleshooting

IME not working on Electron apps

There is a general workaround to set NIXOS_OZONE_WL as described in Wayland#Electron_and_Chromium:

❄︎ /etc/nixos/configuration.nix
environment.sessionVariables.NIXOS_OZONE_WL = "1";

However, since niri does not support text-input-v1, sometimes enabling text-input-v3 by manually adding --wayland-text-input-version=3 flag is necessary for IME to work:

slack --wayland-text-input-version=3

wrapProgram may be used to add the flag automatically:

❄︎ /etc/nixos/configuration.nix
environment.systemPackages = [
  (pkgs.symlinkJoin {
    pname = pkgs.vscode.pname;
    paths = [ pkgs.vscode ];
    buildInputs = [ pkgs.makeWrapper ];
    postBuild = "wrapProgram $out/bin/code --add-flags --wayland-text-input-version=3";
  };)
];

XWayland apps not working

There is a optional dependency for niri which is highly recommended to install (you can read this article to learn more about this)

❄︎ /etc/nixos/configuration.nix
environment.systemPackages = with pkgs; [ 
    xwayland-satellite # xwayland support
];

Or using Home Manager

❄︎ ~/.config/home-manager/home.nix
home.packages = with pkgs; [
  xwayland-satellite # xwayland support
];

After you installed xwayland-satellite niri will integrate it out of the box and all of your XWayland apps will function properly.

File picker not working

If you are using xdg-desktop-portal-gnome, it will attempt to use Nautilus as the file picker, which will fail if Nautilus is not installed.

To work around this problem, you can force usage of the gtk or kde portals for file picker instead:

❄︎ /etc/nixos/configuration.nix
xdg.portal.config.niri = {
  "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde"
};

See Also