目前的桌面环境界面
niri和noctalia简介 @
什么是niri @
众所周知Linux桌面主要分为 X11 和 Wayland 两套协议,而niri是Wayland生态里的一个窗口管理器(准确说是合成器compositor),用Rust写的,目前在GitHub上有22k+的star。
niri最大的特点是scrollable tiling——窗口像纸带一样水平排列,打开新窗口不会把现有的挤变小。你可以想象成每个显示器是一条无限长的走廊,窗口一个接一个往右堆。这种设计对程序员挺友好的,特别是需要同时开很多窗口的时候。除此之外,niri还支持多显示器、分数缩放、动态工作区、内置截图,以及基本的浮窗功能,官方说已经可以日常使用。
什么是noctalia @
noctalia则是完全另一个层面的东西。它是一个桌面shell,基于Qt/QML开发。你可以把它理解为「桌面环境的视觉层」——状态栏、通知、锁屏、壁纸、启动器、桌面小部件这些都由它负责,而窗口怎么排列、怎么切换,这些则是niri负责。类似的,你也可以使用其他的shell来实现这些UI层,例如Dank Material Shell (DMS)、Wayle等。
niri和noctalia的关系 @
如果只用niri不加其他东西,你会发现登录后屏幕上啥都没有——没有状态栏、没有壁纸、没有通知、没有dock,没有应用启动器,只能看到黑屏和鼠标。这是因为niri只是一个compositor,它只负责把窗口画出来、处理输入事件、管理多显示器和切换工作区,那些「看得见摸得着」的东西它一样都不管。niri官方文档里也写到:准备好你的waybar和fuzzel再来用它。
所以niri和noctalia的关系是分工合作:niri管窗口,noctalia管UI。完整桌面环境通常包含窗口管理器、状态栏、文件管理器、应用启动器、通知系统、锁屏、设置面板和壁纸这些东西。noctalia作为shell,把大部分视觉组件都整合好了:状态栏、通知、锁屏、壁纸、启动器(可配合wofi或fuzzel)、OSD(调音量时屏幕中间那个进度条),还有各种桌面小部件。它基于Quickshell开发,性能不错,主题也能自定义,不过noctalia不管窗口管理,也不包含文件管理器。窗口管理交给niri,文件管理用系统自带的(比如thunar、nautilus)就行。
因此装了niri + noctalia之后,你基本就拥有了一个完整的「准桌面环境」
niri和noctalia安装 @
首先在flake.nix的input中引入noctalia-shell
inputs = {
noctalia = {
url = "github:noctalia-dev/noctalia-shell";
inputs.nixpkgs.follows = "nixpkgs";
};
}
在output也一样,传入noctalia,然后再sharedModules中导入noctalia的homeModules,便于给所有用户使用。
outputs = {
self, nixpkgs, home-manager,
nix4nvchad, claude-code, noctalia, ... # 这里添加noctaila
}@inputs:
{
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [
inputs.nix4nvchad.homeManagerModules.default
inputs.noctalia.homeModules.default
];
home-manager.users.lznauy = import ./home/default.nix;
}
];
specialArgs = { inherit inputs; };
};
};
然后记得在你的用户配置,例如我的/home/default.nix中开启niri相关选项。
programs.niri.enable = true;
services.xserver.enable = true;
services.displayManager.gdm.enable = true;
services.displayManager.gdm.wayland = true;
然后可以新建一个文件noctalia.nix用来存储noctalia的配置。
{ config, pkgs, ... }:
{
programs.noctalia-shell = {
enable = true;
systemd.enable = true;
settings = {
bar = {
position = "bottom";
};
};
};
}
接着在/home/default.nix中导入noctalia.nix。
imports = [
./noctalia.nix
];
然后nixos-rebuild switch更新系统就可以生效啦,是不是很简单?但目前桌面环境还是比较初始化,桌面环境配置只能后续再说啦