安装路径
配置式 native:
nixos.iso 安装 -> disko 硬盘分区 -> 硬件配置.nix -> 系统应用.nix -> nixos-install / rebuild --flake /mnt/etc/nixos#hostname 初始安装桌面选型(多屏、多窗口场景)
| 对比项 | KDE Plasma / GNOME | Hyprland | niri |
|---|---|---|---|
| 窗口模型 | 浮动/堆叠,手动拖拽 | 动态平铺,网格分割 | 滚动平铺,横向延伸 |
| 多屏调度 | 原生支持完善,无平铺逻辑 | 工作区绑定显示器,焦点可跨屏跳转 | 每屏独立滚动带,无跨屏跳转 |
| 大量窗口场景 | 窗口增多后需手动整理 | 窗口增多后尺寸被压缩 | 窗口向右排列,尺寸不变 |
| 配置稳定性 | 极稳定,维护量低 | 配置语言迁移与 API 变动较频繁 | KDL 单一配置,格式稳定 |
| NixOS 集成 | 官方模块,开箱即用 | 社区 flake 较多但分散 | sodiboo/niri-flake 原生支持 |
| 维护成本 | 低 | 中高,需定期调整配置 | 低,构建时校验 |
| 适用场景 | 通用办公与娱乐 | 熟悉生态、可接受调整成本 | 多屏、大量窗口、长期高负载 |
NixOS 图形桌面生态
│
├─ L1 · 用户选择的图形体验
│ │ 入口原则:用户先选“我想要什么样的桌面”,再向下追溯实现
│ │
│ ├─ 1A. 完整桌面环境(开箱即用)
│ │ ├─ KDE Plasma 6
│ │ │ └─ Shell/桌面框架:Plasma → 窗口管理与合成:KWin
│ │ ├─ GNOME
│ │ │ └─ Shell:GNOME Shell → 窗口管理与合成:Mutter
│ │ ├─ XFCE ────────────── 窗口管理器:xfwm4(可替换)
│ │ ├─ Cinnamon
│ │ ├─ MATE
│ │ ├─ Budgie
│ │ ├─ LXQt
│ │ ├─ Deepin
│ │ ├─ Pantheon
│ │ ├─ COSMIC(桌面本体;登录组件见 L3)
│ │ ├─ Lumina
│ │ ├─ CDE
│ │ └─ Lomiri
│ │ └─ 注:Plasma 5 归入历史/兼容分支,不作主线
│ │
│ ├─ 1B. 极简 / 高度定制桌面方案(自行组合)
│ │ ├─ Wayland 原生合成器
│ │ │ ├─ Hyprland(动态平铺)
│ │ │ ├─ Niri(可滚动平铺)
│ │ │ ├─ Sway(i3 兼容平铺)
│ │ │ │ └─ SwayFX(Sway 衍生,特效增强)
│ │ │ ├─ River(动态布局)
│ │ │ ├─ Wayfire(3D 特效)
│ │ │ ├─ labwc(Openbox 风格堆叠)
│ │ │ ├─ MangoWC
│ │ │ └─ DWL(dwm 的 Wayland 移植)
│ │ │
│ │ ├─ X11 窗口管理器
│ │ │ ├─ i3、bspwm、awesome、xmonad、dwm
│ │ │ ├─ Openbox、Fluxbox、IceWM、Window Maker、AfterStep
│ │ │ ├─ herbstluftwm、spectrwm、cwm、evilwm、berry、2bwm、wmii
│ │ │ ├─ clfswm、yeahwm
│ │ │ └─ EXWM(Emacs 作为 WM)
│ │ │
│ │ └─ 跨协议窗口管理器
│ │ └─ Qtile(Python 配置,支持 X11 / Wayland,按会话选择协议)
│ │
│ └─ 1C. 自定义方案需自行组合的外围组件
│ ├─ 状态栏/面板:Waybar、Polybar
│ ├─ 启动器:fuzzel、wofi、rofi
│ ├─ 通知:mako、dunst
│ ├─ 锁屏/空闲管理、壁纸、剪贴板/截图
│ └─ 门户服务与桌面设置工具
│
├─ L2 · 桌面会话与核心实现
│ │ 说明:L1 产品向下展开后的核心组件层,与 L1 存在交叉引用
│ │
│ ├─ 桌面 Shell / 桌面框架
│ │ ├─ Plasma Shell(KDE)
│ │ ├─ GNOME Shell
│ │ └─ 各 DE 自带的面板/会话组件
│ │
│ ├─ 窗口管理器 / 合成器
│ │ ├─ 合成器兼显示服务器(Wayland 会话)
│ │ │ ├─ KWin(Wayland 模式)
│ │ │ ├─ Mutter(Wayland 模式)
│ │ │ ├─ Hyprland、Niri、Sway、River、Wayfire、labwc 等
│ │ │ └─ 注:Wayland 下合成器通常同时承担显示服务器职责
│ │ └─ 传统 X11 窗口管理器(与 X Server 分离)
│ │ └─ i3、bspwm、Openbox、xfwm4 等
│ │
│ └─ 会话辅助服务
│ ├─ D-Bus、XDG Desktop Portal、Polkit
│ ├─ PipeWire(音频/屏幕共享)
│ └─ 输入法、电源管理、剪贴板管理
│
├─ L3 · 图形会话基础设施
│ │ 说明:独立于具体桌面产品,多对多关联
│ │
│ ├─ 登录与会话选择(显示管理器 / Greeter)
│ │ ├─ GDM
│ │ ├─ SDDM
│ │ ├─ LightDM
│ │ ├─ greetd
│ │ ├─ Ly
│ │ ├─ emptty
│ │ ├─ lemurs
│ │ └─ cosmic-greeter(COSMIC 相关登录组件)
│ │
│ ├─ 显示协议 / 显示服务器
│ │ ├─ Wayland 协议
│ │ │ ├─ 由各 Wayland 合成器实现
│ │ │ └─ Xwayland:Wayland 会话中兼容 X11 应用
│ │ └─ X11 / Xorg
│ │ ├─ X Server
│ │ └─ 独立窗口管理器(见 L2)
│ │
│ └─ 基础设施服务
│ ├─ D-Bus、Polkit、XDG Portal
│ ├─ PipeWire、WirePlumber
│ └─ 电源/登录/会话管理(logind 等)
│
└─ L4 · 图形栈与 NixOS 实现
│
├─ GPU 与内核驱动(Mesa、nvidia、amdgpu 等)
├─ 图形 API:OpenGL / Vulkan / EGL
├─ Nixpkgs 软件包
├─ NixOS Modules:services.desktopManager.*、programs.*、services.displayManager.*
├─ systemd 服务与会话启动
└─ Home Manager 用户级配置配置树
nixos-config/
├── flake.nix # 入口:定义所有 machine,切换方案
├── flake.lock
├── lib/ # 纯 Nix 辅助函数(如自定义的 mkSystem, mkHome 构建器)
│ └── default.nix
├── hardware/ # ---------- 硬件层 ----------
│ ├── laptop-A.nix
│ ├── server-B.nix
│ └── pad-C.nix
├── system/ # ---------- 系统层 ----------
│ ├── kernel.nix # 内核:版本、模块、参数
│ ├── setting/ # 设置
│ │ ├── nix.nix # nix.settings、GC、flakes
│ │ ├── locale.nix # 时区、locale、键盘布局
│ │ ├── users.nix # 用户组、系统用户
│ │ └── state.nix # system.stateVersion
│ ├── desktop/ # 桌面环境
│ │ ├── kde.nix
│ │ ├── gnome.nix
│ │ └── hyprland.nix
│ ├── components/ # 系统组件
│ │ ├── network.nix # NetworkManager、DNS
│ │ ├── input-method.nix # fcitx5 / ibus
│ │ ├── audio.nix # PipeWire / PulseAudio
│ │ ├── fonts.nix # 字体、字体渲染
│ │ └── power.nix # TLP、upower、电池
│ ├── packages/ # 系统级应用
│ │ ├── docker.nix # docker
│ │ └── xxxx.nix # 其它
│ ├── services/ # 系统服务
│ │ ├── sshd.nix # SSH 服务
│ │ ├── docker.nix # Docker 引擎(不碰容器)
│ │ ├── firewall.nix # 防火墙
│ │ └── cron.nix # 定时任务
│ ├── container/ # 容器
│ │ ├── vc-mysql.nix # virtualisation.oci-containers 实例:数据库
│ │ ├── vc-foregejo.nix # virtualisation.oci-containers 实例:仓库
│ │ └── dk-nginx.nix # docker 实例:Nginx
├── home/ # ---------- 用户层 ----------
│ └── userA/
│ ├── packages/ # 安装工具
│ │ ├── browsers.nix # chrome
│ │ ├── editors.nix # vscode, notepad++
│ │ ├── terminals.nix # alacritty, kitty, wezterm
│ │ └── tools.nix # 其他工具
│ └── setting/ # 设置
│ └── shell.nix # bash/zsh/fish、别名
├── overlays/ # 补丁
│ └── default.nix
└── machines/ # 机器层:完整方案组装
├── laptop-A/
│ └── default.nix
├── server-B/
│ └── default.nix
└── pad-C/
└── default.nixflake.nix 示例
{
description = "Highly modular NixOS configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# 引入 home-manager
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }@inputs: {
nixosConfigurations = {
# 桌面工作站:Hermes
hermes = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
# 将 inputs 传递给所有子模块,方便后续调用
specialArgs = { inherit inputs; };
modules = [
./machines/hermes/default.nix
];
};
# 无头服务器:Machine-A
machine-a = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs; };
modules = [
./machines/machine-a/default.nix
];
};
};
};
}