Jump to content

niri

From Official NixOS Wiki
This page is a translated version of the page Niri and the translation is 100% complete.

警告:显示标题“niri”覆盖了之前的显示标题“Niri”。

niri

Wayland compositor Application

100%
Initial release2023-11-26
Latest release26.04; 25 Apr 2026
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 是一个可滚动平铺的 Wayland 合成器。

安装

只需启用 programs.niri

❄︎ /etc/nixos/configuration.nix
programs.niri.enable = true;
Note: 无需安装自定义 flake(例如 niri-flake)即可启用 Niri。尽管截至 2025 年,该存储库在搜索引擎中的排名仍然靠前,但只有当您想要使用最新版本的 Niri 或想要用 Nix 语言编写配置时,才需要 niri-flake


⚠︎
Warning: 如果没有进行 配置附加设置,或者在全新安装后,您可能由于缺少 Alacritty 和 fuzzel 等预期程序而无法启动应用程序。请按 Super+Shift+E 退出 niri 并继续执行其中一项操作。


配置

niri 的配置路径为 $XDG_CONFIG_HOME/niri/config.kdl。因此,可以使用 Home Manager 进行配置:

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

如果您希望在构建过程中对配置进行验证,可以使用 pkgs.runCommand,用法如下:

❄︎ ~/.config/home-manager/home.nix
xdg.configFile."niri/config.kdl".source =
  pkgs.runCommand "niri-config-checked"
    {
      nativeBuildInputs = [ pkgs.niri ];
    }
    ''
      niri validate --config ${./config.kdl}
      cp ${./config.kdl} $out
    '';


您可能想从默认配置文件开始,如这里所述。

有关 niri 的配置选项,请参阅 此 wiki

Greetd

您可以使用 greeted 配置启动 niri:

❄︎ /etc/nixos/configuration.nix
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;

额外设置

示例 systemd 设置 (niri wiki)中所述,您可能需要设置一些额外的服务,包括以下的 SwayidleSwaylockWaybarPolkitSecret Service,以补充常规窗口管理器的功能。其中一些设置也是启用默认配置文件所有功能所必需的。

❄︎ /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 ];

或者使用 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
];

故障排除

IME 在 Electron 应用中无法正常工作

有一种通用的解决方法,即按照Wayland#Electron_and_Chromium中的说明设置NIXOS_OZONE_WL

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

然而,由于 niri 不支持 text-input-v1,有时需要通过手动添加 --wayland-text-input-version=3 标志来启用 text-input-v3,IME 才能正常工作:

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

wrapProgram 可用于自动添加该标志:

❄︎ /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 应用无法正常工作

Niri 有一个可选依赖,强烈建议安装(您可阅读 这篇文章 以了解更多相关信息)。

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

或者使用 Home Manager

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

安装 xwayland-satellite 后,niri 将会将其无缝集成,您的所有 XWayland 应用都将正常运行。

文件选择器无法正常工作

如果您正在使用 xdg-desktop-portal-gnome,它会尝试将 Nautilus 用作文件选择器,但如果未安装 Nautilus,则会失败。

为解决此问题,您可以改为强制使用 GTK 或 KDE 的文件选择器门户:

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

Waybar 启动两次

在使用诸如 programs.waybar.enable 这样的配置选项时,waybar 在 Niri 上可能会启动两次。这是因为默认的 Niri 配置文件会在系统启动时自动启动 waybar。请从该配置文件中移除 spawn-at-startup "waybar" 的设置,或者在不使用 home-manager 选项的情况下,将 waybar 添加到系统的软件包列表中。

另见