Niri: Difference between revisions
Prepared the page for translation |
Adjust the position of page translation tags |
||
| Line 27: | Line 27: | ||
programs.niri.enable = true; | programs.niri.enable = true; | ||
}} | }} | ||
</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|Without [[# | |||
{{Warning|<translate>Without [[#Configuration|Configuration]] or [[#Additional Setup|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 == | ||
| Line 72: | Line 73: | ||
}} | }} | ||
<translate> | <translate> | ||
== Additional Setup == | == Additional Setup == | ||
As described in [https://github.com/niri-wm/niri/wiki/Example-systemd-Setup Example systemd Setup (niri wiki)], you might want to set up some additional services including [[Special:MyLanguage/Swayidle|Swayidle]], [[Special:MyLanguage/Swaylock|Swaylock]], [[Special:MyLanguage/Waybar|Waybar]], [[Special:MyLanguage/Polkit|Polkit]] and [[Special:MyLanguage/Secret Service|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/niri-wm/niri/blob/main/resources/default-config.kdl the default configuration file]. | As described in [https://github.com/niri-wm/niri/wiki/Example-systemd-Setup Example systemd Setup (niri wiki)], you might want to set up some additional services including [[Special:MyLanguage/Swayidle|Swayidle]], [[Special:MyLanguage/Swaylock|Swaylock]], [[Special:MyLanguage/Waybar|Waybar]], [[Special:MyLanguage/Polkit|Polkit]] and [[Special:MyLanguage/Secret Service|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/niri-wm/niri/blob/main/resources/default-config.kdl the default configuration file]. | ||
</translate> | |||
{{file|3= | {{file|3= | ||
security.polkit.enable = true; # polkit | security.polkit.enable = true; # polkit | ||
| Line 87: | Line 88: | ||
environment.systemPackages = with pkgs; [ alacritty fuzzel swaylock mako swayidle ]; | environment.systemPackages = with pkgs; [ alacritty fuzzel swaylock mako swayidle ]; | ||
|name=/etc/nixos/configuration.nix|lang=nix}} | |name=/etc/nixos/configuration.nix|lang=nix}} | ||
<translate>Or using [[Special:MyLanguage/Home Manager|Home Manager]]:{{file|~/.config/home-manager/home.nix|nix|3= | |||
<translate> | |||
Or using [[Special:MyLanguage/Home Manager|Home Manager]]: | |||
</translate> | |||
{{file|~/.config/home-manager/home.nix|nix|3= | |||
programs.alacritty.enable = true; # Super+T in the default setting (terminal) | programs.alacritty.enable = true; # Super+T in the default setting (terminal) | ||
programs.fuzzel.enable = true; # Super+D in the default setting (app launcher) | programs.fuzzel.enable = true; # Super+D in the default setting (app launcher) | ||
| Line 100: | Line 106: | ||
|name=~/.config/home-manager/home.nix|lang=nix}} | |name=~/.config/home-manager/home.nix|lang=nix}} | ||
<translate> | |||
== Troubleshooting == | == Troubleshooting == | ||
| Line 105: | Line 112: | ||
There is a general workaround to set {{ic|NIXOS_OZONE_WL}} as described in [[Special:MyLanguage/Wayland#Electron_and_Chromium|Wayland#Electron_and_Chromium]]: | There is a general workaround to set {{ic|NIXOS_OZONE_WL}} as described in [[Special:MyLanguage/Wayland#Electron_and_Chromium|Wayland#Electron_and_Chromium]]: | ||
</translate> | |||
{{file|/etc/nixos/configuration.nix|nix|3= | {{file|/etc/nixos/configuration.nix|nix|3= | ||
environment.sessionVariables.NIXOS_OZONE_WL = "1"; | environment.sessionVariables.NIXOS_OZONE_WL = "1"; | ||
}} | }} | ||
<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> | |||
<syntaxhighlight lang=console> | <syntaxhighlight lang=console> | ||
| Line 118: | Line 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<translate> | |||
<code>wrapProgram</code> may be used to add the flag automatically: | <code>wrapProgram</code> may be used to add the flag automatically: | ||
</translate> | |||
{{file|/etc/nixos/configuration.nix|nix|3= | {{file|/etc/nixos/configuration.nix|nix|3= | ||
environment.systemPackages = [ | environment.systemPackages = [ | ||
| Line 130: | Line 139: | ||
};) | };) | ||
];}} | ];}} | ||
<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/niri-wm/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/niri-wm/niri/wiki/Xwayland this] article to learn more about this) | ||
</translate> | |||
{{File|3=environment.systemPackages = with pkgs; [ | {{File|3=environment.systemPackages = with pkgs; [ | ||
xwayland-satellite # xwayland support | xwayland-satellite # xwayland support | ||
];|name=/etc/nixos/configuration.nix|lang=nix}} | ];|name=/etc/nixos/configuration.nix|lang=nix}} | ||
<translate> | <translate> | ||
Or using [[Special:MyLanguage/Home Manager|Home Manager]] | Or using [[Special:MyLanguage/Home Manager|Home Manager]] | ||
</translate> | |||
{{File|3=home.packages = with pkgs; [ | {{File|3=home.packages = with pkgs; [ | ||
xwayland-satellite # xwayland support | xwayland-satellite # xwayland support | ||
];|name=~/.config/home-manager/home.nix|lang=nix}} | ];|name=~/.config/home-manager/home.nix|lang=nix}} | ||
<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. | ||
| Line 157: | Line 166: | ||
To work around this problem, you can force usage of the gtk or kde portals for file picker instead: | To work around this problem, you can force usage of the gtk or kde portals for file picker instead: | ||
</translate> | |||
{{File|3=xdg.portal.config.niri = { | {{File|3=xdg.portal.config.niri = { | ||
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde" | "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde" | ||
};|name=/etc/nixos/configuration.nix|lang=nix}} | };|name=/etc/nixos/configuration.nix|lang=nix}} | ||
<translate> | <translate> | ||
=== Waybar launches twice === | === Waybar launches twice === | ||
| Line 174: | Line 183: | ||
* [[Special:MyLanguage/Wallpapers for Wayland|Wallpapers for Wayland]] | * [[Special:MyLanguage/Wallpapers for Wayland|Wallpapers for Wayland]] | ||
* [https://github.com/sodiboo/niri-flake/ niri-flake] | * [https://github.com/sodiboo/niri-flake/ niri-flake] | ||
</translate> | |||
[[Category:Window managers]] | [[Category:Window managers]] | ||
[[Category:Applications{{#translation:}}]] | [[Category:Applications{{#translation:}}]] | ||
Revision as of 16:26, 31 May 2026
Niri is a scrollable-tiling Wayland compositor.
Installation
Simply enable programs.niri:
programs.niri.enable = true;
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.
Configuration
The configuration path for niri is $XDG_CONFIG_HOME/niri/config.kdl. Therefore Home Manager can be used for configuration:
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.
Greetd
You can start niri with greetd configuration:
programs.niri.enable = true;
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${config.programs.niri.package}/bin/niri-session";
user = "myuser";
};
};
};
# NixOS otherwise injects a stripped PATH via Environment= on the niri.service
# unit which shadows the imported user-manager PATH. Disabling the default
# lets niri inherit the full PATH set up by niri-session.
systemd.user.services.niri.enableDefaultPath = false;
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.
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:
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:
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:
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)
environment.systemPackages = with pkgs; [
xwayland-satellite # xwayland support
];
Or using Home Manager
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:
xdg.portal.config.niri = {
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde"
};
Waybar launches twice
When using a configuration option like programs.waybar.enable, waybar may launch twice on Niri. This is because the default Niri config file launches waybar on launch. Remove the spawn-at-startup "waybar" from the config file, or add waybar to your systems packages without using the home-manager option.