核验范围:2026 年 10 月查询的 nixpkgs
nixos-unstable模块与上游文档。分组列表、包数和服务默认值会随 revision 改变;部署时应以项目锁定的 nixpkgs 和 Home Manager 源码为准。本文没有构建、激活或桌面运行测试。
模块真源:nixos/modules/services/desktop-managers/gnome.nix(主模块)+ nixos/modules/services/desktops/gnome/*.nix(服务开关)。配套官方文档 gnome.md 在主模块同一目录。这份参考把 services.desktopManager.gnome.*、services.gnome.*、environment.gnome.* 的主要公开接口和当时的服务开关列出,标注默认值——标注"由 GNOME 自动开启"的,是该服务开关真正的生效默认,手动改可能破坏桌面。
一、入口与桌面管理选项:services.desktopManager.gnome.*#
| 选项 | 类型 | 默认值 | 作用 |
|---|---|---|---|
enable |
bool | false | 启用 GNOME 桌面管理器;GDM 推荐但需单独声明启用 |
sessionPath |
listOf package | [] |
附加到会话搜索路径的包(Shell 扩展、GSettings 条件 autostart 用)。官方备注:last resort,能打补丁就别用它 |
favoriteAppsOverride |
lines | 内置默认 dock | 设置 org.gnome.shell.favorite-apps 的默认值。internal 选项(标记为 messy),NixOS 不承诺稳定 |
extraGSettingsOverrides |
lines | "" |
附加的 GSettings vendor overrides(INI 格式,[schema] + key=value) |
extraGSettingsOverridePackages |
listOf path | [] |
被 override 的 schema 所属包(如 pkgs.gsettings-desktop-schemas、pkgs.gnome-shell) |
debug |
bool | false | 开启 gnome-session debug 消息(设 GNOME_SESSION_DEBUG=1) |
flashback.enableMetacity |
bool | false | 标准 GNOME Flashback 会话(Metacity 窗口管理器) |
flashback.customSessions |
listOf submodule | [] |
自定义 Flashback 会话,替换 Metacity 为其他 WM |
flashback.panelModulePackages |
listOf package | [ pkgs.gnome-applets ] |
提供给 gnome-panel 的模块包(通常装到 $out/lib/gnome-panel/modules) |
flashback.customSessions 每个条目是 submodule,含四个字段:
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
wmName |
str([a-zA-Z0-9_-]+) |
必填 | WM 唯一标识符 |
wmLabel |
str | 必填 | 会话选择器里显示的名字 |
wmCommand |
str | 必填 | WM 可执行文件路径 |
enableGnomePanel |
bool | true | 该会话是否启用 GNOME 面板 |
extraGSettingsOverrides 原理 主模块把
extraGSettingsOverrides+extraGSettingsOverridePackages+favoriteAppsOverride组装进pkgs.gnome.nixos-gsettings-overrides包,生成share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/,再经NIX_GSETTINGS_OVERRIDES_DIR环境变量注入会话——所以它是"系统默认值"层,用户 dconf 已有值优先。详见 NixOS GSettings 与 dconf 设置管理。
二、分组开关:services.gnome.*(5 个)#
| 开关 | 生效默认 | 管什么 |
|---|---|---|
core-os-services.enable |
启用 GNOME 时强制 true | 服务底座:dconf、polkit、accounts-daemon、NetworkManager、power-profiles-daemon、xdg portal、蓝牙、输入法(默认 ibus)等 |
core-shell.enable |
启用 GNOME 时强制 true | GNOME Shell 本体 + 配套服务(colord、geoclue、gvfs、GNOME 设置 daemon…) |
core-apps.enable |
true(mkDefault) |
完整应用套件(nautilus、epiphany、gnome-console、text-editor、maps…) |
games.enable |
false | 小游戏(aisleriot、gnome-chess、gnome-mines…) |
core-developer-tools.enable |
false | 开发者工具(gnome-builder、dconf-editor、devhelp、d-spy、sysprof) |
分组开关的默认结构
core-os-services和core-shell是普通优先级赋值 true(主模块lib.mkIf里直接= true),关掉它们=拆桌面。core-apps用mkDefault true(用户可= false覆盖成极简 GNOME)。games/dev-tools 默认就是 false,开了才装。详见 GNOME 声明式管理。
三、服务开关:services.gnome.*(16 个,模块在 services/desktops/gnome/)#
大多数只有 enable 一个 bool 选项;带额外选项的已注明。默认列 = 实际生效默认(含 GNOME 各分组自动开启的情况)。
| 服务 | 默认 | 作用 |
|---|---|---|
at-spi2-core |
GNOME 自动 true | 辅助技术总线(org.a11y.Bus)。报 The name org.a11y.Bus was not provided by any .service files 就启用 |
evolution-data-server |
GNOME 自动 true | 通讯录/日历数据服务。额外选项 plugins(listOf package,默认 []) |
gcr-ssh-agent |
GNOME core-os-services 以 mkDefault 开启,独立模块默认还需核对 | GCR SSH agent(ssh key 密钥管理) |
glib-networking |
GNOME 自动 true | GLib 网络扩展(TLS、代理等) |
gnome-browser-connector |
GNOME 自动 true | 浏览器扩展原生 host,让浏览器能装 GNOME Shell 扩展 |
gnome-initial-setup |
GNOME 自动 true | 首次启动向导 |
gnome-keyring |
GNOME 自动 true | 密钥环 daemon(登录凭据) |
gnome-online-accounts |
GNOME 自动 true | 单点登录框架 |
gnome-remote-desktop |
GNOME 自动 true | 基于 PipeWire 的远程桌面 |
gnome-settings-daemon |
GNOME 自动 true | 设置 daemon(core-shell 的核心依赖) |
gnome-software |
flatpak 启用时才装 | 软件中心(PackageKit 不支持 Nix,需 flatpak) |
gnome-user-share |
GNOME 自动 true | 用户级文件共享(WebDAV) |
localsearch |
GNOME 自动 true | LocalSearch 索引服务(TinySPARQL 前端,GNOME Music 依赖它) |
rygel |
GNOME 自动 true | UPnP 媒体服务器。额外选项 package(默认 pkgs.rygel) |
sushi |
GNOME 自动 true | nautilus 快速预览器 |
tinysparql |
GNOME 自动 true | TinySPARQL 搜索引擎/元数据存储 |
关服务 = 拆功能 官方文档明说:关这些服务不受支持,可能弄坏应用。经典例子:
tinysparql+localsearch一起关会干掉 GNOME 搜索;GNOME Music 没有 TinySPARQL 直接罢工。已移除:
gnome-online-miners(mkRemovedOptionModule,broken for a while now)。
四、排除机制:environment.gnome.excludePackages#
environment.gnome.excludePackages = [ pkgs.epiphany ]; # 从默认 GNOME 环境剔除- 类型
listOf package,默认[]。按包名匹配,从 core-apps / games / core-developer-tools 的environment.systemPackages里剔除(主模块removeExcluded/notExcluded) - 主要用于排除这三个分组的包;实际源码也过滤 core-shell 的 optionalPackages(core-shell 里大部分是强制包,只有 optionalPackages 能排)。Epiphany 排除后 webkitgtk 大包通常随之离开系统 closure
- 排除包的同时会连带跳过对应程序模块(如排除
sushi→ 不启用 sushi 服务;排除gnome-disk-utility→ 不启programs.gnome-disks)
五、各分组默认装了什么#
core-apps(25 个):baobab、decibels、epiphany、gnome-text-editor、gnome-calculator、gnome-calendar、gnome-characters、gnome-clocks、gnome-console、gnome-contacts、gnome-font-viewer、gnome-logs、gnome-maps、gnome-music、gnome-system-monitor、gnome-tecla、gnome-weather、loupe、nautilus、papers、gnome-connections、showtime、simple-scan、snapshot、yelp。
games(20 个):aisleriot、atomix、five-or-more、four-in-a-row、gnome-2048、gnome-chess、gnome-klotski、gnome-mahjongg、gnome-mines、gnome-nibbles、gnome-robots、gnome-sudoku、gnome-taquin、gnome-tetravex、hitori、iagno、lightsoff、quadrapassel、swell-foop、tali。
core-developer-tools(5 个):dconf-editor、devhelp、d-spy、gnome-builder、sysprof。
core-shell 中可被排除的部分 optional 包(以锁定源码为准):adwaita-icon-theme、gnome-backgrounds、gnome-bluetooth、gnome-color-manager、gnome-control-center、gnome-tour、gnome-user-docs、gnome-menus、xdg-user-dirs、xdg-user-dirs-gtk。
只加不减 vs 只减不加 想多装 GNOME 生态包(如
pkgs.gpaste、pkgs.gnomeExtensions.*)直接加environment.systemPackages;想少装用excludePackages。NixOS 没有"从 GNOME 里加自定义包"的专门选项——分组列表是写死的,自定义只能走 systemPackages。
关联#
- GNOME 声明式管理 — 五个分组开关的实际用法与配置示例
- NixOS GSettings 与 dconf 设置管理 — extraGSettingsOverrides 的三层优先级
- NixOS GNOME 配置:diff 导出、查键、装扩展 — 扩展安装与包名查找
参考与延伸
根据技术笔记重新整理,示例使用通用名称。