niri
警告:显示标题“niri”覆盖了之前的显示标题“Niri”。
安装
只需启用 programs.niri:
programs.niri.enable = true;
niri-flake。
配置
niri 的配置路径为 $XDG_CONFIG_HOME/niri/config.kdl。因此,可以使用 Home Manager 进行配置:
xdg.configFile."niri/config.kdl".source = ./config.kdl;
如果您希望在构建过程中对配置进行验证,可以使用 pkgs.runCommand,用法如下:
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:
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)中所述,您可能需要设置一些额外的服务,包括以下的 Swayidle、Swaylock、Waybar、Polkit 和 Secret Service,以补充常规窗口管理器的功能。其中一些设置也是启用默认配置文件所有功能所必需的。
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:
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:
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 可用于自动添加该标志:
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 有一个可选依赖,强烈建议安装(您可阅读 这篇文章 以了解更多相关信息)。
environment.systemPackages = with pkgs; [
xwayland-satellite # xwayland support
];
或者使用 Home Manager
home.packages = with pkgs; [
xwayland-satellite # xwayland support
];
安装 xwayland-satellite 后,niri 将会将其无缝集成,您的所有 XWayland 应用都将正常运行。
文件选择器无法正常工作
如果您正在使用 xdg-desktop-portal-gnome,它会尝试将 Nautilus 用作文件选择器,但如果未安装 Nautilus,则会失败。
为解决此问题,您可以改为强制使用 GTK 或 KDE 的文件选择器门户:
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 添加到系统的软件包列表中。