nixos/gnome & nixos/gdm: move out of x11

Since DEs like KDE Plasma 6, GNOME and COSMIC are not designed to be X11-exclusive, putting them under `services.xserver` is misleading. In particular, GNOME defaults to Wayland these days and X11 support is going to be dropped in near future.

Let’s follow Plasma and move GNOME NixOS options out of `xserver` attribute.

This patch does not include any changes to X11 support itself.

Signed-off-by: John Titor <50095635+JohnRTitor@users.noreply.github.com>

hand7s c464c44a bfbf67f8

+1 -1
.github/labeler.yml
···
- any-glob-to-any-file:
- doc/languages-frameworks/gnome.section.md
- nixos/modules/services/desktops/gnome/**/*
-
- nixos/modules/services/x11/desktop-managers/gnome.nix
+
- nixos/modules/services/desktop-managers/gnome.nix
- nixos/tests/gnome-xorg.nix
- nixos/tests/gnome.nix
- pkgs/desktops/gnome/**/*
+2 -2
nixos/doc/manual/configuration/x-windows.chapter.md
···
{
services.xserver.desktopManager.plasma5.enable = true;
services.xserver.desktopManager.xfce.enable = true;
-
services.xserver.desktopManager.gnome.enable = true;
+
services.desktopManager.gnome.enable = true;
services.xserver.desktopManager.mate.enable = true;
services.xserver.windowManager.xmonad.enable = true;
services.xserver.windowManager.twm.enable = true;
···
```nix
{
services.displayManager.sddm.enable = true;
-
services.xserver.displayManager.gdm.enable = true;
+
services.displayManager.gdm.enable = true;
}
```
+1 -1
nixos/doc/manual/release-notes/rl-2505.section.md
···
- GNOME has been updated to version 48.
- `decibels` music player is now installed by default. You can disable it using [](#opt-environment.gnome.excludePackages).
-
- `gnome-shell-extensions` extension collection (which included GNOME Classic extensions, Apps Menu, and User Themes, among others) are no longer installed by default. You can install them again with [](#opt-services.xserver.desktopManager.gnome.sessionPath).
+
- `gnome-shell-extensions` extension collection (which included GNOME Classic extensions, Apps Menu, and User Themes, among others) are no longer installed by default. You can install them again with {option}`services.xserver.desktopManager.gnome.sessionPath`.
- Option [](#opt-services.gnome.core-developer-tools.enable) now also installs `sysprof` and `d-spy`.
- Option `services.gnome.core-utilities.enable` has been renamed to [](#opt-services.gnome.core-apps.enable).
- `cantarell-fonts`, `source-code-pro` and `source-sans` fonts are no longer installed by default. They have been replaced by `adwaita-fonts`.
+2 -2
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix
···
isoImage.edition = lib.mkDefault "gnome";
-
services.xserver.desktopManager.gnome = {
+
services.desktopManager.gnome = {
# Add Firefox and other tools useful for installation to the launcher
favoriteAppsOverride = ''
[org.gnome.shell]
···
QT_QPA_PLATFORM = "$([[ $XDG_SESSION_TYPE = \"wayland\" ]] && echo \"wayland\")";
};
-
services.xserver.displayManager.gdm = {
+
services.displayManager.gdm = {
enable = true;
# autoSuspend makes the machine automatically suspend after inactivity.
# It's possible someone could/try to ssh'd into the machine and obviously
+2 -2
nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
···
isoImage.edition = lib.mkDefault "gnome";
-
services.xserver.desktopManager.gnome = {
+
services.desktopManager.gnome = {
# Add Firefox and other tools useful for installation to the launcher
favoriteAppsOverride = ''
[org.gnome.shell]
···
enable = true;
};
-
services.xserver.displayManager.gdm = {
+
services.displayManager.gdm = {
enable = true;
# autoSuspend makes the machine automatically suspend after inactivity.
# It's possible someone could/try to ssh'd into the machine and obviously
+1 -1
nixos/modules/module-list.nix
···
./services/development/zammad.nix
./services/display-managers/cosmic-greeter.nix
./services/display-managers/default.nix
+
./services/display-managers/gdm.nix
./services/display-managers/greetd.nix
./services/display-managers/ly.nix
./services/display-managers/sddm.nix
···
./services/x11/colord.nix
./services/x11/desktop-managers/default.nix
./services/x11/display-managers/default.nix
-
./services/x11/display-managers/gdm.nix
./services/x11/display-managers/lightdm.nix
./services/x11/display-managers/slim.nix
./services/x11/display-managers/startx.nix
+1 -1
nixos/modules/programs/gpaste.nix
···
services.dbus.packages = [ pkgs.gpaste ];
systemd.packages = [ pkgs.gpaste ];
# gnome-control-center crashes in Keyboard Shortcuts pane without the GSettings schemas.
-
services.xserver.desktopManager.gnome.sessionPath = [ pkgs.gpaste ];
+
services.desktopManager.gnome.sessionPath = [ pkgs.gpaste ];
# gpaste-reloaded applet doesn't work without the typelib
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gpaste ];
};
+1 -1
nixos/modules/programs/nautilus-open-any-terminal.nix
···
nautilus-open-any-terminal
];
-
environment.sessionVariables = lib.mkIf (!config.services.xserver.desktopManager.gnome.enable) {
+
environment.sessionVariables = lib.mkIf (!config.services.desktopManager.gnome.enable) {
NAUTILUS_4_EXTENSION_DIR = "${pkgs.nautilus-python}/lib/nautilus/extensions-4";
};
+1 -1
nixos/modules/programs/zoom-us.nix
···
# Support GNOME desktop environment if it's enabled on the system.
gnomeXdgDesktopPortalSupport =
-
prev.gnomeXdgDesktopPortalSupport or config.services.xserver.desktopManager.gnome.enable;
+
prev.gnomeXdgDesktopPortalSupport or config.services.desktopManager.gnome.enable;
# Support Hyprland desktop for Wayland if it's enabled on the system.
hyprlandXdgDesktopPortalSupport =
+1 -1
nixos/modules/services/display-managers/default.nix
···
dmConf = config.services.xserver.displayManager;
noDmUsed =
!(
-
dmConf.gdm.enable || cfg.sddm.enable || dmConf.xpra.enable || dmConf.lightdm.enable || cfg.ly.enable
+
cfg.gdm.enable || cfg.sddm.enable || dmConf.xpra.enable || dmConf.lightdm.enable || cfg.ly.enable
);
in
lib.mkIf noDmUsed (lib.mkDefault false);
+1 -1
nixos/modules/services/x11/desktop-managers/default.nix
···
./lumina.nix
./lxqt.nix
./enlightenment.nix
-
./gnome.nix
./retroarch.nix
./kodi.nix
./mate.nix
···
./deepin.nix
../../desktop-managers/lomiri.nix
../../desktop-managers/cosmic.nix
+
../../desktop-managers/gnome.nix
];
options = {
+8 -8
nixos/modules/services/x11/desktop-managers/gnome.md nixos/modules/services/desktop-managers/gnome.md
···
```nix
{
-
services.xserver.desktopManager.gnome.enable = true;
-
services.xserver.displayManager.gdm.enable = true;
+
services.desktopManager.gnome.enable = true;
+
services.displayManager.gdm.enable = true;
}
```
···
```nix
{
-
services.xserver.desktopManager.gnome.flashback.enableMetacity = true;
+
services.desktopManager.gnome.flashback.enableMetacity = true;
}
```
-
It is also possible to create custom sessions that replace Metacity with a different window manager using [](#opt-services.xserver.desktopManager.gnome.flashback.customSessions).
+
It is also possible to create custom sessions that replace Metacity with a different window manager using [](#opt-services.desktopManager.gnome.flashback.customSessions).
The following example uses `xmonad` window manager:
```nix
{
-
services.xserver.desktopManager.gnome.flashback.customSessions = [
+
services.desktopManager.gnome.flashback.customSessions = [
{
wmName = "xmonad";
wmLabel = "XMonad";
···
:::
You can override the default GSettings values using the
-
[](#opt-services.xserver.desktopManager.gnome.extraGSettingsOverrides) option.
+
[](#opt-services.desktopManager.gnome.extraGSettingsOverrides) option.
Take note that whatever packages you want to override GSettings for, you need to add them to
-
[](#opt-services.xserver.desktopManager.gnome.extraGSettingsOverridePackages).
+
[](#opt-services.desktopManager.gnome.extraGSettingsOverridePackages).
You can use `dconf-editor` tool to explore which GSettings you can set.
···
```nix
{
-
services.xserver.desktopManager.gnome = {
+
services.desktopManager.gnome = {
extraGSettingsOverrides = ''
# Change default background
[org.gnome.desktop.background]
+38 -6
nixos/modules/services/x11/desktop-managers/gnome.nix nixos/modules/services/desktop-managers/gnome.nix
···
literalExpression
;
-
cfg = config.services.xserver.desktopManager.gnome;
+
cfg = config.services.desktopManager.gnome;
serviceCfg = config.services.gnome;
# Prioritize nautilus by default when opening directories
···
in
{
-
meta = {
doc = ./gnome.md;
maintainers = lib.teams.gnome.members;
···
imports = [
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "enable" ]
+
[ "services" "desktopManager" "gnome" "enable" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverrides" ]
+
[ "services" "desktopManager" "gnome" "extraGSettingsOverrides" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverridePackages" ]
+
[ "services" "desktopManager" "gnome" "extraGSettingsOverridePackages" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "debug" ]
+
[ "services" "desktopManager" "gnome" "debug" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "sessionPath" ]
+
[ "services" "desktopManager" "gnome" "sessionPath" ]
+
)
+
# flashback options
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "flashback" "customSessions" ]
+
[ "services" "desktopManager" "gnome" "flashback" "customSessions" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "flashback" "enableMetacity" ]
+
[ "services" "desktopManager" "gnome" "flashback" "enableMetacity" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "desktopManager" "gnome" "flashback" "panelModulePackages" ]
+
[ "services" "desktopManager" "gnome" "flashback" "panelModulePackages" ]
+
)
+
(lib.mkRenamedOptionModule
[ "services" "gnome" "core-utilities" "enable" ]
[ "services" "gnome" "core-apps" "enable" ]
)
···
games.enable = mkEnableOption "GNOME games";
};
-
services.xserver.desktopManager.gnome = {
+
services.desktopManager.gnome = {
enable = mkOption {
type = types.bool;
default = false;
···
system.nixos-generate-config.desktopConfiguration = [
''
# Enable the GNOME Desktop Environment.
-
services.xserver.displayManager.gdm.enable = true;
-
services.xserver.desktopManager.gnome.enable = true;
+
services.displayManager.gdm.enable = true;
+
services.desktopManager.gnome.enable = true;
''
];
···
})
(lib.mkIf serviceCfg.core-shell.enable {
-
services.xserver.desktopManager.gnome.sessionPath = [
+
services.desktopManager.gnome.sessionPath = [
pkgs.gnome-shell
];
+47 -17
nixos/modules/services/x11/display-managers/gdm.nix nixos/modules/services/display-managers/gdm.nix
···
let
-
cfg = config.services.xserver.displayManager;
+
cfg = config.services.displayManager.gdm;
gdm = pkgs.gdm;
+
xdmcfg = config.services.xserver.displayManager;
pamLogin = config.security.pam.services.login;
settingsFormat = pkgs.formats.ini { };
-
configFile = settingsFormat.generate "custom.conf" cfg.gdm.settings;
+
configFile = settingsFormat.generate "custom.conf" cfg.settings;
xSessionWrapper =
-
if (cfg.setupCommands == "") then
+
if (xdmcfg.setupCommands == "") then
null
else
pkgs.writeScript "gdm-x-session-wrapper" ''
#!${pkgs.bash}/bin/bash
-
${cfg.setupCommands}
+
${xdmcfg.setupCommands}
exec "$@"
'';
···
defaultSessionName = config.services.displayManager.defaultSession;
-
setSessionScript = pkgs.callPackage ./account-service-util.nix { };
+
setSessionScript = pkgs.callPackage ../x11/display-managers/account-service-util.nix { };
in
{
···
"gdm"
"nvidiaWayland"
] "We defer to GDM whether Wayland should be enabled.")
+
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "enable" ]
+
[ "services" "displayManager" "gdm" "enable" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "debug" ]
+
[ "services" "displayManager" "gdm" "debug" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "banner" ]
+
[ "services" "displayManager" "gdm" "banner" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "settings" ]
+
[ "services" "displayManager" "gdm" "settings" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "wayland" ]
+
[ "services" "displayManager" "gdm" "wayland" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "autoSuspend" ]
+
[ "services" "displayManager" "gdm" "autoSuspend" ]
+
)
+
(lib.mkRenamedOptionModule
+
[ "services" "xserver" "displayManager" "gdm" "autoLogin" "delay" ]
+
[ "services" "displayManager" "gdm" "autoLogin" "delay" ]
+
)
];
meta = {
···
options = {
-
services.xserver.displayManager.gdm = {
+
services.displayManager.gdm = {
enable = lib.mkEnableOption "GDM, the GNOME Display Manager";
···
###### implementation
-
config = lib.mkIf cfg.gdm.enable {
+
config = lib.mkIf cfg.enable {
services.xserver.displayManager.lightdm.enable = false;
···
environment =
{
-
GDM_X_SERVER_EXTRA_ARGS = toString (lib.filter (arg: arg != "-terminate") cfg.xserverArgs);
+
GDM_X_SERVER_EXTRA_ARGS = toString (lib.filter (arg: arg != "-terminate") xdmcfg.xserverArgs);
XDG_DATA_DIRS = lib.makeSearchPath "share" [
gdm # for gnome-login.session
config.services.displayManager.sessionData.desktops
···
systemd.user.services.dbus.wantedBy = [ "default.target" ];
programs.dconf.profiles.gdm.databases =
-
lib.optionals (!cfg.gdm.autoSuspend) [
+
lib.optionals (!cfg.autoSuspend) [
{
settings."org/gnome/settings-daemon/plugins/power" = {
sleep-inactive-ac-type = "nothing";
···
};
}
]
-
++ lib.optionals (cfg.gdm.banner != null) [
+
++ lib.optionals (cfg.banner != null) [
{
settings."org/gnome/login-screen" = {
banner-message-enable = true;
-
banner-message-text = cfg.gdm.banner;
+
banner-message-text = cfg.banner;
};
}
]
···
# Use AutomaticLogin if delay is zero, because it's immediate.
# Otherwise with TimedLogin with zero seconds the prompt is still
# presented and there's a little delay.
-
services.xserver.displayManager.gdm.settings = {
+
services.displayManager.gdm.settings = {
daemon = lib.mkMerge [
-
{ WaylandEnable = cfg.gdm.wayland; }
+
{ WaylandEnable = cfg.wayland; }
# nested if else didn't work
-
(lib.mkIf (config.services.displayManager.autoLogin.enable && cfg.gdm.autoLogin.delay != 0) {
+
(lib.mkIf (config.services.displayManager.autoLogin.enable && cfg.autoLogin.delay != 0) {
TimedLoginEnable = true;
TimedLogin = config.services.displayManager.autoLogin.user;
-
TimedLoginDelay = cfg.gdm.autoLogin.delay;
+
TimedLoginDelay = cfg.autoLogin.delay;
})
-
(lib.mkIf (config.services.displayManager.autoLogin.enable && cfg.gdm.autoLogin.delay == 0) {
+
(lib.mkIf (config.services.displayManager.autoLogin.enable && cfg.autoLogin.delay == 0) {
AutomaticLoginEnable = true;
AutomaticLogin = config.services.displayManager.autoLogin.user;
})
];
-
debug = lib.mkIf cfg.gdm.debug {
+
debug = lib.mkIf cfg.debug {
Enable = true;
};
};
+1 -1
nixos/modules/services/x11/terminal-server.nix
···
services.xserver.videoDrivers = [ ];
# Enable GDM. Any display manager will do as long as it supports XDMCP.
-
services.xserver.displayManager.gdm.enable = true;
+
services.displayManager.gdm.enable = true;
systemd.sockets.terminal-server = {
description = "Terminal Server Socket";
+1 -1
nixos/modules/services/x11/xserver.nix
···
dmConf = cfg.displayManager;
default =
!(
-
dmConf.gdm.enable
+
config.services.displayManager.gdm.enable
|| config.services.displayManager.sddm.enable
|| dmConf.xpra.enable
|| dmConf.sx.enable
+2 -2
nixos/release.nix
···
{ ... }:
{
services.xserver.enable = true;
-
services.xserver.displayManager.gdm.enable = true;
-
services.xserver.desktopManager.gnome.enable = true;
+
services.displayManager.gdm.enable = true;
+
services.desktopManager.gnome.enable = true;
}
);
+2 -2
nixos/tests/gnome-extensions.nix
···
};
# Configure Gnome
-
services.xserver.desktopManager.gnome.enable = true;
-
services.xserver.desktopManager.gnome.debug = true;
+
services.desktopManager.gnome.enable = true;
+
services.desktopManager.gnome.debug = true;
systemd.user.services = {
"org.gnome.Shell@wayland" = {
+6 -6
nixos/tests/gnome-flashback.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager = {
-
gdm.enable = true;
-
gdm.debug = true;
+
services.displayManager.gdm = {
+
enable = true;
+
debug = true;
};
services.displayManager.autoLogin = {
···
user = user.name;
};
-
services.xserver.desktopManager.gnome.enable = true;
-
services.xserver.desktopManager.gnome.debug = true;
-
services.xserver.desktopManager.gnome.flashback.enableMetacity = true;
+
services.desktopManager.gnome.enable = true;
+
services.desktopManager.gnome.debug = true;
+
services.desktopManager.gnome.flashback.enableMetacity = true;
services.displayManager.defaultSession = "gnome-flashback-metacity";
};
+5 -5
nixos/tests/gnome-xorg.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager = {
-
gdm.enable = true;
-
gdm.debug = true;
+
services.displayManager.gdm = {
+
enable = true;
+
debug = true;
};
services.displayManager.autoLogin = {
···
user = user.name;
};
-
services.xserver.desktopManager.gnome.enable = true;
-
services.xserver.desktopManager.gnome.debug = true;
+
services.desktopManager.gnome.enable = true;
+
services.desktopManager.gnome.debug = true;
services.displayManager.defaultSession = "gnome-xorg";
systemd.user.services = {
+5 -5
nixos/tests/gnome.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager = {
-
gdm.enable = true;
-
gdm.debug = true;
+
services.displayManager.gdm = {
+
enable = true;
+
debug = true;
};
services.displayManager.autoLogin = {
···
user = "alice";
};
-
services.xserver.desktopManager.gnome.enable = true;
-
services.xserver.desktopManager.gnome.debug = true;
+
services.desktopManager.gnome.enable = true;
+
services.desktopManager.gnome.debug = true;
systemd.user.services = {
"org.gnome.Shell@wayland" = {
+3 -3
nixos/tests/nixos-generate-config.nix
···
system.nixos-generate-config.desktopConfiguration = [
''
# DESKTOP
-
services.xserver.displayManager.gdm.enable = true;
-
services.xserver.desktopManager.gnome.enable = true;
+
services.displayManager.gdm.enable = true;
+
services.desktopManager.gnome.enable = true;
''
];
};
···
# Test if the Perl variable $desktopConfiguration is spliced correctly
machine.succeed(
-
"grep 'services\\.xserver\\.desktopManager\\.gnome\\.enable = true;' /etc/nixos/configuration.nix"
+
"grep 'services\\.desktopManager\\.gnome\\.enable = true;' /etc/nixos/configuration.nix"
)
machine.succeed("rm -rf /etc/nixos")
+1 -1
pkgs/by-name/gd/gdm/package.nix
···
})
# The following patches implement certain environment variables in GDM which are set by
-
# the gdm configuration module (nixos/modules/services/x11/display-managers/gdm.nix).
+
# the gdm configuration module (gdm.nix).
./gdm-x-session_extra_args.patch
+1 -1
pkgs/by-name/ne/nemo-seahorse/package.nix
···
libcryptui
];
-
services.xserver.desktopManager.gnome.extraGSettingsOverridePackages = with pkgs; [
+
services.desktopManager.gnome.extraGSettingsOverridePackages = with pkgs; [
nemo
gcr
libcryptui