OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 075

GNOME 的声明式桌面管理

用模块分组组织桌面、登录、主题和输入法的配置责任。

所在专题NixOS 上的 GNOME 声明式桌面 ↗
约 6 分钟阅读开始阅读

核验范围:2026 年 10 月查询的 nixpkgs nixos-unstable 模块与上游文档。分组列表、包数和服务默认值会随 revision 改变;部署时应以项目锁定的 nixpkgs 和 Home Manager 源码为准。本文没有构建、激活或桌面运行测试。

声明式启用#

services.desktopManager.gnome.enable = true;
services.displayManager.gdm.enable = true;

但这组声明背后是一整套分组开关——GNOME 在 NixOS 里被拆成了可独立开关的包组。

模块分组开关(services.gnome.*)#

开关 默认 管什么
core-os-services 强制 true 服务底座:dconf、polkit、accounts-daemon、NetworkManager、xdg portal、power-profiles
core-shell 强制 true GNOME Shell 本体:gnome-session + gnome-shell(systemd 单元)、control-center、settings-daemon
core-apps true 默认应用套件(例如:nautilus、epiphany、calculator、weather、console…)
games false 小游戏(扫雷、数独、国际象棋…)
core-developer-tools false 开发者工具(gnome-builder、dconf-editor、sysprof…)

所以:

  • 极简 GNOME = core-apps.enable = false + exclude gnome-tour/gnome-user-docs(这俩在 core-shell optionalPackages,不在 core-apps)
  • 较完整的 GNOME = 启用 core-apps 与所需开发工具/游戏(games 可按需保持关闭)

webkitgtk 大包 core-apps 里的 Epiphany(浏览器)依赖 webkitgtk——一个巨大的包,首次构建/下载很慢。极简配置省掉它;全量要接受这个代价。

GDM 与现有登录架构#

  • GDM 默认 Wayland,GNOME 50 起不可禁用 Wayland(选项被移除)
  • GDM 与 kmscon 不硬冲突:当前 nixpkgs 里 GDM 启用时 kmscon 自动不占 tty1(模块 mkIf (!displayManager.enable))
  • GDM 读取已注册的 wayland-sessions/*.desktop;Hyprland、niri 等模块提供 sessionPackages 时,才会出现在登录屏。安装单个二进制不保证注册会话。
  • 可用 specialisation 划分系统变体(见 NixOS Specialisation 系统变体),kmscon 主流程不动

主题统一管理#

主题包、dconf 设置和深色模式调度需要明确的配置所有权,避免桌面模块、Home Manager 与外部调度程序反复写同一个键。例如:

  • home/theme.nix 统一管理 GTK 主题、图标和光标包,并声明需要在 activation 写入的 dconf 键。
  • 若使用 Noctalia 等调度器在运行时切换深色模式,应明确由它负责 color-scheme,或接受后续 Home Manager activation 会重新写回声明值。
  • GNOME specialisation 若继承同一 Home Manager profile,可以共享主题;用户 HOME 和 dconf 状态也仍然共享。

这样多桌面配置能复用主题声明,同时知道每次设置改变由哪一层触发。

输入法(fcitx5)#

  • GNOME Wayland 走 text-input-v3,不要设 GTK_IM_MODULE(官方建议,GTK 用原生协议);旧版 Qt 或不能用原生协议的应用使用 QT_IM_MODULE=fcitx;新版 Qt 的协议支持要按实际版本核对,XWayland 使用 XMODIFIERS=@im=fcitx
  • 部分工具包/输入法模块路径的候选窗定位受 GNOME Shell 限制,可使用 kimpanel 扩展(pkgs.gnomeExtensions.kimpanel,装完在 Extensions 应用手动启用)
  • GNOME 模块默认 i18n.inputMethod.type = mkDefault "ibus",你显式写 "fcitx5" 会胜出

分组设计的实际价值#

GNOME 的桌面入口、服务模块和应用列表分开声明,可以按需求安装默认应用、开发工具或扩展。模块化方便追踪配置所有权和依赖,但不证明某个桌面一定比其他桌面更稳定。比较 GNOME、COSMIC 或其他桌面时,应记录具体版本、登录路径、功能需求和运行证据,而不是从仓库组织方式直接推断稳定性。

关联#

参考与延伸

  1. Nixpkgs GNOME 模块 ↗
  2. Nixpkgs GNOME 文档 ↗
  3. Fcitx Wayland 官方说明 ↗
  4. GDM 模块 ↗
  5. kmscon 模块 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

NixOS 上的 GNOME 声明式桌面

  1. 01GNOME 的声明式桌面管理
  2. 02GNOME 模块选项参考
  3. 03管理 GSettings 默认值与 dconf 状态
  4. 04从设置 diff 到声明与扩展
  5. 05用 Specialisation 构建 GNOME 变体
  6. 06Wayland 会话中的 kmscon 与 uwsm
CONTINUE READING / 下一篇GNOME 模块选项参考

沿模块源码查清桌面入口、服务开关、应用分组和排除机制。