Merge pull request #291913 from SuperSandro2000/sddm-wayland-only

Sandro 4cc6ce45 1dd37934

+1 -1
nixos/doc/manual/configuration/modularity.section.md
···
{ config, pkgs, ... }:
{ services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
+
services.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
environment.systemPackages = [ pkgs.vim ];
}
+1 -1
nixos/doc/manual/configuration/profiles/demo.section.md
···
# Demo {#sec-profile-demo}
This profile just enables a `demo` user, with password `demo`, uid `1000`, `wheel` group and
-
[autologin in the SDDM display manager](#opt-services.xserver.displayManager.autoLogin).
+
[autologin in the SDDM display manager](#opt-services.displayManager.autoLogin).
+1 -1
nixos/doc/manual/configuration/profiles/graphical.section.md
···
graphical installation CD.
It sets [](#opt-services.xserver.enable),
-
[](#opt-services.xserver.displayManager.sddm.enable),
+
[](#opt-services.displayManager.sddm.enable),
[](#opt-services.xserver.desktopManager.plasma5.enable),
and [](#opt-services.xserver.libinput.enable) to true. It also
includes glxinfo and firefox in the system packages list.
+4 -4
nixos/doc/manual/configuration/x-windows.chapter.md
···
```nix
{
-
services.xserver.displayManager.sddm.enable = true;
+
services.displayManager.sddm.enable = true;
services.xserver.displayManager.gdm.enable = true;
}
```
···
```nix
{
-
services.xserver.displayManager.defaultSession = "none+i3";
+
services.displayManager.defaultSession = "none+i3";
}
```
···
```nix
{
services.xserver.displayManager.lightdm.enable = true;
-
services.xserver.displayManager.autoLogin.enable = true;
-
services.xserver.displayManager.autoLogin.user = "alice";
+
services.displayManager.autoLogin.enable = true;
+
services.displayManager.autoLogin.user = "alice";
}
```
+1 -1
nixos/doc/manual/configuration/xfce.chapter.md
···
```nix
{
services.xserver.desktopManager.xfce.enable = true;
-
services.xserver.displayManager.defaultSession = "xfce";
+
services.displayManager.defaultSession = "xfce";
}
```
+14 -15
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-gnome.nix
···
QT_QPA_PLATFORM = "$([[ $XDG_SESSION_TYPE = \"wayland\" ]] && echo \"wayland\")";
};
-
services.xserver.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
-
# have issues because it's inactive.
-
# See:
-
# * https://github.com/NixOS/nixpkgs/pull/63790
-
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
-
autoSuspend = false;
-
};
-
autoLogin = {
-
enable = true;
-
user = "nixos";
-
};
+
services.xserver.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
+
# have issues because it's inactive.
+
# See:
+
# * https://github.com/NixOS/nixpkgs/pull/63790
+
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
+
autoSuspend = false;
+
};
+
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = "nixos";
};
}
+9 -11
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma5.nix
···
isoImage.edition = "plasma5";
-
services.xserver = {
-
desktopManager.plasma5 = {
-
enable = true;
-
};
+
services.xserver.desktopManager.plasma5 = {
+
enable = true;
+
};
-
# Automatically login as nixos.
-
displayManager = {
-
sddm.enable = true;
-
autoLogin = {
-
enable = true;
-
user = "nixos";
-
};
+
# Automatically login as nixos.
+
services.displayManager = {
+
sddm.enable = true;
+
autoLogin = {
+
enable = true;
+
user = "nixos";
};
};
+7 -9
nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix
···
isoImage.edition = "plasma6";
-
services.xserver = {
-
desktopManager.plasma6.enable = true;
+
services.desktopManager.plasma6.enable = true;
-
# Automatically login as nixos.
-
displayManager = {
-
sddm.enable = true;
-
autoLogin = {
-
enable = true;
-
user = "nixos";
-
};
+
# Automatically login as nixos.
+
services.displayManager = {
+
sddm.enable = true;
+
autoLogin = {
+
enable = true;
+
user = "nixos";
};
};
+13 -15
nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
···
enable = true;
};
-
services.xserver.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
-
# have issues because it's inactive.
-
# See:
-
# * https://github.com/NixOS/nixpkgs/pull/63790
-
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
-
autoSuspend = false;
-
};
-
autoLogin = {
-
enable = true;
-
user = "nixos";
-
};
+
services.xserver.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
+
# have issues because it's inactive.
+
# See:
+
# * https://github.com/NixOS/nixpkgs/pull/63790
+
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
+
autoSuspend = false;
};
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = "nixos";
+
};
}
+9 -11
nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix
···
isoImage.edition = "plasma5";
-
services.xserver = {
-
desktopManager.plasma5 = {
-
enable = true;
-
};
+
services.xserver.desktopManager.plasma5 = {
+
enable = true;
+
};
-
# Automatically login as nixos.
-
displayManager = {
-
sddm.enable = true;
-
autoLogin = {
-
enable = true;
-
user = "nixos";
-
};
+
# Automatically login as nixos.
+
services.displayManager = {
+
sddm.enable = true;
+
autoLogin = {
+
enable = true;
+
user = "nixos";
};
};
+1 -1
nixos/modules/installer/virtualbox-demo.nix
···
# If you prefer another desktop manager or display manager, you may want
# to disable the default.
# services.xserver.desktopManager.plasma5.enable = lib.mkForce false;
-
# services.xserver.displayManager.sddm.enable = lib.mkForce false;
+
# services.displayManager.sddm.enable = lib.mkForce false;
# Enable GDM/GNOME by uncommenting above two lines and two lines below.
# services.xserver.displayManager.gdm.enable = true;
+3 -1
nixos/modules/module-list.nix
···
./services/development/nixseparatedebuginfod.nix
./services/development/rstudio-server/default.nix
./services/development/zammad.nix
+
./services/display-managers/default.nix
./services/display-managers/greetd.nix
+
./services/display-managers/sddm.nix
./services/editors/emacs.nix
./services/editors/haste.nix
./services/editors/infinoted.nix
···
./services/misc/gogs.nix
./services/misc/gollum.nix
./services/misc/gpsd.nix
+
./services/misc/graphical-desktop.nix
./services/misc/greenclip.nix
./services/misc/guix
./services/misc/headphones.nix
···
./services/x11/display-managers/default.nix
./services/x11/display-managers/gdm.nix
./services/x11/display-managers/lightdm.nix
-
./services/x11/display-managers/sddm.nix
./services/x11/display-managers/slim.nix
./services/x11/display-managers/startx.nix
./services/x11/display-managers/sx.nix
+1 -1
nixos/modules/programs/miriway.nix
···
programs.xwayland.enable = lib.mkDefault true;
# To make the Miriway session available if a display manager like SDDM is enabled:
-
services.xserver.displayManager.sessionPackages = [ pkgs.miriway ];
+
services.displayManager.sessionPackages = [ pkgs.miriway ];
};
meta.maintainers = with lib.maintainers; [ OPNA2608 ];
+1 -1
nixos/modules/programs/steam.nix
···
};
programs.gamescope.enable = mkDefault cfg.gamescopeSession.enable;
-
services.xserver.displayManager.sessionPackages = mkIf cfg.gamescopeSession.enable [ gamescopeSessionFile ];
+
services.displayManager.sessionPackages = mkIf cfg.gamescopeSession.enable [ gamescopeSessionFile ];
# optionally enable 32bit pulseaudio support if pulseaudio is enabled
hardware.pulseaudio.support32Bit = config.hardware.pulseaudio.enable;
+1 -1
nixos/modules/programs/wayland/cardboard.nix
···
environment.systemPackages = [ cfg.package ];
# To make a cardboard session available for certain DMs like SDDM
-
services.xserver.displayManager.sessionPackages = [ cfg.package ];
+
services.displayManager.sessionPackages = [ cfg.package ];
}
(import ./wayland-session.nix { inherit lib pkgs; })
]);
+1 -1
nixos/modules/programs/wayland/hyprland.nix
···
security.polkit.enable = true;
-
services.xserver.displayManager.sessionPackages = [ cfg.finalPackage ];
+
services.displayManager.sessionPackages = [ cfg.finalPackage ];
xdg.portal = {
enable = mkDefault true;
+1 -1
nixos/modules/programs/wayland/labwc.nix
···
xdg.portal.config.wlroots.default = lib.mkDefault [ "wlr" "gtk" ];
# To make a labwc session available for certain DMs like SDDM
-
services.xserver.displayManager.sessionPackages = [ cfg.package ];
+
services.displayManager.sessionPackages = [ cfg.package ];
}
(import ./wayland-session.nix { inherit lib pkgs; })
]);
+1 -1
nixos/modules/programs/wayland/river.nix
···
environment.systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages;
# To make a river session available if a display manager like SDDM is enabled:
-
services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ];
+
services.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ];
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050913
xdg.portal.config.river.default = mkDefault [ "wlr" "gtk" ];
+1 -1
nixos/modules/programs/wayland/sway.nix
···
xdg.portal.config.sway.default = mkDefault [ "wlr" "gtk" ];
# To make a Sway session available if a display manager like SDDM is enabled:
-
services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; }
+
services.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; }
(import ./wayland-session.nix { inherit lib pkgs; })
]);
+1 -1
nixos/modules/programs/wayland/wayfire.nix
···
finalPackage
];
-
services.xserver.displayManager.sessionPackages = [ finalPackage ];
+
services.displayManager.sessionPackages = [ finalPackage ];
xdg.portal = {
enable = lib.mkDefault true;
+1 -1
nixos/modules/rename.nix
···
The services.xserver.displayManager.auto module has been removed
because it was only intended for use in internal NixOS tests, and gave the
false impression of it being a special display manager when it's actually
-
LightDM. Please use the services.xserver.displayManager.autoLogin options
+
LightDM. Please use the services.displayManager.autoLogin options
instead, or any other display manager in NixOS as they all support auto-login.
'')
(mkRemovedOptionModule [ "services" "xserver" "multitouch" ] ''
+2 -2
nixos/modules/services/desktop-managers/plasma6.nix
···
xdg.portal.configPackages = mkDefault [kdePackages.xdg-desktop-portal-kde];
services.pipewire.enable = mkDefault true;
-
services.xserver.displayManager = {
+
services.displayManager = {
sessionPackages = [kdePackages.plasma-workspace];
defaultSession = mkDefault "plasma";
};
-
services.xserver.displayManager.sddm = {
+
services.displayManager.sddm = {
package = kdePackages.sddm;
theme = mkDefault "breeze";
wayland.compositor = "kwin";
+257
nixos/modules/services/display-managers/default.nix
···
+
{ config, lib, pkgs, ... }:
+
+
let
+
cfg = config.services.displayManager;
+
+
installedSessions = pkgs.runCommand "desktops"
+
{ # trivial derivation
+
preferLocalBuild = true;
+
allowSubstitutes = false;
+
}
+
''
+
mkdir -p "$out/share/"{xsessions,wayland-sessions}
+
+
${lib.concatMapStrings (pkg: ''
+
for n in ${lib.concatStringsSep " " pkg.providedSessions}; do
+
if ! test -f ${pkg}/share/wayland-sessions/$n.desktop -o \
+
-f ${pkg}/share/xsessions/$n.desktop; then
+
echo "Couldn't find provided session name, $n.desktop, in session package ${pkg.name}:"
+
echo " ${pkg}"
+
return 1
+
fi
+
done
+
+
if test -d ${pkg}/share/xsessions; then
+
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${pkg}/share/xsessions $out/share/xsessions
+
fi
+
if test -d ${pkg}/share/wayland-sessions; then
+
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${pkg}/share/wayland-sessions $out/share/wayland-sessions
+
fi
+
'') cfg.sessionPackages}
+
'';
+
+
dmDefault = config.services.xserver.desktopManager.default;
+
# fallback default for cases when only default wm is set
+
dmFallbackDefault = if dmDefault != null then dmDefault else "none";
+
wmDefault = config.services.xserver.windowManager.default;
+
defaultSessionFromLegacyOptions = dmFallbackDefault + lib.optionalString (wmDefault != null && wmDefault != "none") "+${wmDefault}";
+
in
+
{
+
options = {
+
services.displayManager = {
+
enable = lib.mkEnableOption "systemd's display-manager service";
+
+
preStart = lib.mkOption {
+
type = lib.types.lines;
+
default = "";
+
example = "rm -f /var/log/my-display-manager.log";
+
description = lib.mdDoc "Script executed before the display manager is started.";
+
};
+
+
execCmd = lib.mkOption {
+
type = lib.types.str;
+
example = lib.literalExpression ''"''${pkgs.lightdm}/bin/lightdm"'';
+
description = lib.mdDoc "Command to start the display manager.";
+
};
+
+
environment = lib.mkOption {
+
type = with lib.types; attrsOf unspecified;
+
default = {};
+
description = lib.mdDoc "Additional environment variables needed by the display manager.";
+
};
+
+
hiddenUsers = lib.mkOption {
+
type = with lib.types; listOf str;
+
default = [ "nobody" ];
+
description = lib.mdDoc ''
+
A list of users which will not be shown in the display manager.
+
'';
+
};
+
+
logToFile = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = lib.mdDoc ''
+
Whether the display manager redirects the output of the
+
session script to {file}`~/.xsession-errors`.
+
'';
+
};
+
+
logToJournal = lib.mkOption {
+
type = lib.types.bool;
+
default = true;
+
description = lib.mdDoc ''
+
Whether the display manager redirects the output of the
+
session script to the systemd journal.
+
'';
+
};
+
+
# Configuration for automatic login. Common for all DM.
+
autoLogin = lib.mkOption {
+
type = lib.types.submodule ({ config, options, ... }: {
+
options = {
+
enable = lib.mkOption {
+
type = lib.types.bool;
+
default = config.user != null;
+
defaultText = lib.literalExpression "config.${options.user} != null";
+
description = lib.mdDoc ''
+
Automatically log in as {option}`autoLogin.user`.
+
'';
+
};
+
+
user = lib.mkOption {
+
type = with lib.types; nullOr str;
+
default = null;
+
description = lib.mdDoc ''
+
User to be used for the automatic login.
+
'';
+
};
+
};
+
});
+
+
default = {};
+
description = lib.mdDoc ''
+
Auto login configuration attrset.
+
'';
+
};
+
+
defaultSession = lib.mkOption {
+
type = lib.types.nullOr lib.types.str // {
+
description = "session name";
+
check = d:
+
lib.assertMsg (d != null -> (lib.types.str.check d && lib.elem d config.services.displayManager.sessionData.sessionNames)) ''
+
Default graphical session, '${d}', not found.
+
Valid names for 'services.displayManager.defaultSession' are:
+
${lib.concatStringsSep "\n " cfg.displayManager.sessionData.sessionNames}
+
'';
+
};
+
default =
+
if dmDefault != null || wmDefault != null then
+
defaultSessionFromLegacyOptions
+
else
+
null;
+
defaultText = lib.literalMD ''
+
Taken from display manager settings or window manager settings, if either is set.
+
'';
+
example = "gnome";
+
description = lib.mdDoc ''
+
Graphical session to pre-select in the session chooser (only effective for GDM, LightDM and SDDM).
+
+
On GDM, LightDM and SDDM, it will also be used as a session for auto-login.
+
'';
+
};
+
+
sessionData = lib.mkOption {
+
description = lib.mdDoc "Data exported for display managers’ convenience";
+
internal = true;
+
default = {};
+
};
+
+
sessionPackages = lib.mkOption {
+
type = lib.types.listOf (lib.types.package // {
+
description = "package with provided sessions";
+
check = p: lib.assertMsg
+
(lib.types.package.check p && p ? providedSessions
+
&& p.providedSessions != [] && lib.all lib.isString p.providedSessions)
+
''
+
Package, '${p.name}', did not specify any session names, as strings, in
+
'passthru.providedSessions'. This is required when used as a session package.
+
+
The session names can be looked up in:
+
${p}/share/xsessions
+
${p}/share/wayland-sessions
+
'';
+
});
+
default = [];
+
description = lib.mdDoc ''
+
A list of packages containing x11 or wayland session files to be passed to the display manager.
+
'';
+
};
+
};
+
};
+
+
imports = [
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "autoLogin" ] [ "services" "displayManager" "autoLogin" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "defaultSession" ] [ "services" "displayManager" "defaultSession" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "environment" ] [ "services" "displayManager" "environment" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "execCmd" ] [ "services" "displayManager" "execCmd" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logToFile" ] [ "services" "displayManager" "logToFile" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logToJournal" ] [ "services" "displayManager" "logToJournal" ])
+
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "preStart" ] [ "services" "displayManager" "preStart" ])
+
];
+
+
config = lib.mkIf cfg.enable {
+
assertions = [
+
{ assertion = cfg.autoLogin.enable -> cfg.autoLogin.user != null;
+
message = ''
+
services.displayManager.autoLogin.enable requires services.displayManager.autoLogin.user to be set
+
'';
+
}
+
];
+
+
warnings =
+
lib.mkIf (dmDefault != null || wmDefault != null) [
+
''
+
The following options are deprecated:
+
${lib.concatStringsSep "\n " (map ({c, t}: t) (lib.filter ({c, t}: c != null) [
+
{ c = dmDefault; t = "- services.xserver.desktopManager.default"; }
+
{ c = wmDefault; t = "- services.xserver.windowManager.default"; }
+
]))}
+
Please use
+
services.displayManager.defaultSession = "${defaultSessionFromLegacyOptions}";
+
instead.
+
''
+
];
+
+
# Make xsessions and wayland sessions available in XDG_DATA_DIRS
+
# as some programs have behavior that depends on them being present
+
environment.sessionVariables.XDG_DATA_DIRS = lib.mkIf (cfg.sessionPackages != [ ]) [
+
"${cfg.sessionData.desktops}/share"
+
];
+
+
services.displayManager.sessionData = {
+
desktops = installedSessions;
+
sessionNames = lib.concatMap (p: p.providedSessions) config.services.displayManager.sessionPackages;
+
# We do not want to force users to set defaultSession when they have only single DE.
+
autologinSession =
+
if cfg.defaultSession != null then
+
cfg.defaultSession
+
else if cfg.sessionData.sessionNames != [] then
+
lib.head cfg.sessionData.sessionNames
+
else
+
null;
+
};
+
+
# so that the service won't be enabled when only startx is used
+
systemd.services.display-manager.enable =
+
let dmConf = config.services.xserver.displayManager;
+
noDmUsed = !(dmConf.gdm.enable
+
|| cfg.sddm.enable
+
|| dmConf.xpra.enable
+
|| dmConf.lightdm.enable);
+
in lib.mkIf noDmUsed (lib.mkDefault false);
+
+
systemd.services.display-manager = {
+
description = "Display Manager";
+
after = [ "acpid.service" "systemd-logind.service" "systemd-user-sessions.service" ];
+
restartIfChanged = false;
+
+
environment = lib.optionalAttrs config.hardware.opengl.setLdLibraryPath {
+
LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ];
+
} // cfg.environment;
+
+
preStart = cfg.preStart;
+
script = lib.mkIf (config.systemd.services.display-manager.enable == true) cfg.execCmd;
+
+
# Stop restarting if the display manager stops (crashes) 2 times
+
# in one minute. Starting X typically takes 3-4s.
+
startLimitIntervalSec = 30;
+
startLimitBurst = 3;
+
serviceConfig = {
+
Restart = "always";
+
RestartSec = "200ms";
+
SyslogIdentifier = "display-manager";
+
};
+
};
+
};
+
}
+54
nixos/modules/services/misc/graphical-desktop.nix
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}:
+
let
+
xcfg = config.services.xserver;
+
dmcfg = config.services.displayManager;
+
in
+
{
+
config = lib.mkIf (xcfg.enable || dmcfg.enable) {
+
# The default max inotify watches is 8192.
+
# Nowadays most apps require a good number of inotify watches,
+
# the value below is used by default on several other distros.
+
boot.kernel.sysctl = {
+
"fs.inotify.max_user_instances" = lib.mkDefault 524288;
+
"fs.inotify.max_user_watches" = lib.mkDefault 524288;
+
};
+
+
environment = {
+
# localectl looks into 00-keyboard.conf
+
etc."X11/xorg.conf.d/00-keyboard.conf".text = ''
+
Section "InputClass"
+
Identifier "Keyboard catchall"
+
MatchIsKeyboard "on"
+
Option "XkbModel" "${xcfg.xkb.model}"
+
Option "XkbLayout" "${xcfg.xkb.layout}"
+
Option "XkbOptions" "${xcfg.xkb.options}"
+
Option "XkbVariant" "${xcfg.xkb.variant}"
+
EndSection
+
'';
+
systemPackages = with pkgs; [
+
nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
+
xdg-utils
+
];
+
};
+
+
fonts.enableDefaultPackages = lib.mkDefault true;
+
+
hardware.opengl.enable = lib.mkDefault true;
+
+
programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3;
+
+
systemd.defaultUnit = lib.mkIf (xcfg.autorun || dmcfg.enable) "graphical.target";
+
+
xdg = {
+
autostart.enable = true;
+
menus.enable = true;
+
mime.enable = true;
+
icons.enable = true;
+
};
+
};
+
}
+1 -1
nixos/modules/services/system/nix-daemon.nix
···
users.users = nixbldUsers;
-
services.xserver.displayManager.hiddenUsers = attrNames nixbldUsers;
+
services.displayManager.hiddenUsers = attrNames nixbldUsers;
# Legacy configuration conversion.
nix.settings = mkMerge [
+1 -1
nixos/modules/services/x11/desktop-managers/budgie.nix
···
};
config = mkIf cfg.enable {
-
services.xserver.displayManager.sessionPackages = with pkgs; [
+
services.displayManager.sessionPackages = with pkgs; [
budgie.budgie-desktop
];
+1 -1
nixos/modules/services/x11/desktop-managers/cinnamon.nix
···
config = mkMerge [
(mkIf cfg.enable {
-
services.xserver.displayManager.sessionPackages = [ pkgs.cinnamon.cinnamon-common ];
+
services.displayManager.sessionPackages = [ pkgs.cinnamon.cinnamon-common ];
services.xserver.displayManager.lightdm.greeters.slick = {
enable = mkDefault true;
+2 -2
nixos/modules/services/x11/desktop-managers/deepin.nix
···
config = mkIf cfg.enable
{
-
services.xserver.displayManager.sessionPackages = [ pkgs.deepin.dde-session ];
-
services.xserver.displayManager.defaultSession = mkDefault "dde-x11";
+
services.displayManager.sessionPackages = [ pkgs.deepin.dde-session ];
+
services.displayManager.defaultSession = mkDefault "dde-x11";
# Update the DBus activation environment after launching the desktop manager.
services.xserver.displayManager.sessionCommands = ''
+1 -1
nixos/modules/services/x11/desktop-managers/default.nix
···
default = null;
example = "none";
description = lib.mdDoc ''
-
**Deprecated**, please use [](#opt-services.xserver.displayManager.defaultSession) instead.
+
**Deprecated**, please use [](#opt-services.displayManager.defaultSession) instead.
Default desktop manager loaded if none have been chosen.
'';
+1 -1
nixos/modules/services/x11/desktop-managers/enlightenment.nix
···
"/share/locale"
];
-
services.xserver.displayManager.sessionPackages = [ pkgs.enlightenment.enlightenment ];
+
services.displayManager.sessionPackages = [ pkgs.enlightenment.enlightenment ];
services.xserver.displayManager.sessionCommands = ''
if test "$XDG_CURRENT_DESKTOP" = "Enlightenment"; then
+2 -2
nixos/modules/services/x11/desktop-managers/gnome.nix
···
services.gnome.core-shell.enable = true;
services.gnome.core-utilities.enable = mkDefault true;
-
services.xserver.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ];
+
services.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ];
environment.extraInit = ''
${concatMapStrings (p: ''
···
})
(mkIf flashbackEnabled {
-
services.xserver.displayManager.sessionPackages =
+
services.displayManager.sessionPackages =
let
wmNames = map (wm: wm.wmName) flashbackWms;
namesAreUnique = lib.unique wmNames == wmNames;
+1 -1
nixos/modules/services/x11/desktop-managers/lumina.nix
···
config = mkIf cfg.enable {
-
services.xserver.displayManager.sessionPackages = [
+
services.displayManager.sessionPackages = [
pkgs.lumina.lumina
];
+2 -2
nixos/modules/services/x11/desktop-managers/mate.nix
···
config = mkMerge [
(mkIf (cfg.enable || cfg.enableWaylandSession) {
-
services.xserver.displayManager.sessionPackages = [
+
services.displayManager.sessionPackages = [
pkgs.mate.mate-session-manager
];
···
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${pkgs.mate.mate-gsettings-overrides}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
environment.systemPackages = [ pkgs.mate.mate-wayland-session ];
-
services.xserver.displayManager.sessionPackages = [ pkgs.mate.mate-wayland-session ];
+
services.displayManager.sessionPackages = [ pkgs.mate.mate-wayland-session ];
})
];
}
+2 -2
nixos/modules/services/x11/desktop-managers/pantheon.nix
···
pkgs.pantheon.pantheon-agent-geoclue2
] config.environment.pantheon.excludePackages;
-
services.xserver.displayManager.sessionPackages = [ pkgs.pantheon.elementary-session-settings ];
+
services.displayManager.sessionPackages = [ pkgs.pantheon.elementary-session-settings ];
# Ensure lightdm is used when Pantheon is enabled
# Without it screen locking will be nonfunctional because of the use of lightlocker
···
# Without this, elementary LightDM greeter will pre-select non-existent `default` session
# https://github.com/elementary/greeter/issues/368
-
services.xserver.displayManager.defaultSession = mkDefault "pantheon";
+
services.displayManager.defaultSession = mkDefault "pantheon";
services.xserver.displayManager.sessionCommands = ''
if test "$XDG_CURRENT_DESKTOP" = "Pantheon"; then
+1 -1
nixos/modules/services/x11/desktop-managers/phosh.nix
···
services.gnome.core-shell.enable = true;
services.gnome.core-os-services.enable = true;
-
services.xserver.displayManager.sessionPackages = [ cfg.package ];
+
services.displayManager.sessionPackages = [ cfg.package ];
environment.etc."phosh/phoc.ini".source =
if builtins.isPath cfg.phocConfig then cfg.phocConfig
+6 -6
nixos/modules/services/x11/desktop-managers/plasma5.nix
···
pkgs.media-player-info
];
-
services.xserver.displayManager.sddm = {
+
services.displayManager.sddm = {
theme = mkDefault "breeze";
};
···
system.nixos-generate-config.desktopConfiguration = [
''
# Enable the Plasma 5 Desktop Environment.
-
services.xserver.displayManager.sddm.enable = true;
+
services.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
''
];
-
services.xserver.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-workspace ];
+
services.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-workspace ];
# Default to be `plasma` (X11) instead of `plasmawayland`, since plasma wayland currently has
# many tiny bugs.
# See: https://github.com/NixOS/nixpkgs/issues/143272
-
services.xserver.displayManager.defaultSession = mkDefault "plasma";
+
services.displayManager.defaultSession = mkDefault "plasma";
environment.systemPackages =
with pkgs.plasma5Packages;
···
};
};
-
services.xserver.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-mobile ];
+
services.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-mobile ];
})
# Plasma Bigscreen
···
kdeconnect-kde
];
-
services.xserver.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-bigscreen ];
+
services.displayManager.sessionPackages = [ pkgs.plasma5Packages.plasma-bigscreen ];
# required for plasma-remotecontrollers to work correctly
hardware.uinput.enable = true;
+1 -1
nixos/modules/services/x11/desktop-managers/surf-display.nix
···
};
config = mkIf cfg.enable {
-
services.xserver.displayManager.sessionPackages = [
+
services.displayManager.sessionPackages = [
pkgs.surf-display
];
+8 -211
nixos/modules/services/x11/display-managers/default.nix
···
let
cfg = config.services.xserver;
-
opt = options.services.xserver;
xorg = pkgs.xorg;
fontconfig = config.fonts.fontconfig;
···
source ~/.xprofile
fi
-
${optionalString cfg.displayManager.job.logToJournal ''
+
${optionalString config.services.displayManager.logToJournal ''
if [ -z "$_DID_SYSTEMD_CAT" ]; then
export _DID_SYSTEMD_CAT=1
exec ${config.systemd.package}/bin/systemd-cat -t xsession "$0" "$@"
fi
''}
-
${optionalString cfg.displayManager.job.logToFile ''
+
${optionalString config.services.displayManager.logToFile ''
exec &> >(tee ~/.xsession-errors)
''}
···
exit 1
fi
'';
-
-
installedSessions = pkgs.runCommand "desktops"
-
{ # trivial derivation
-
preferLocalBuild = true;
-
allowSubstitutes = false;
-
}
-
''
-
mkdir -p "$out/share/"{xsessions,wayland-sessions}
-
-
${concatMapStrings (pkg: ''
-
for n in ${concatStringsSep " " pkg.providedSessions}; do
-
if ! test -f ${pkg}/share/wayland-sessions/$n.desktop -o \
-
-f ${pkg}/share/xsessions/$n.desktop; then
-
echo "Couldn't find provided session name, $n.desktop, in session package ${pkg.name}:"
-
echo " ${pkg}"
-
return 1
-
fi
-
done
-
-
if test -d ${pkg}/share/xsessions; then
-
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${pkg}/share/xsessions $out/share/xsessions
-
fi
-
if test -d ${pkg}/share/wayland-sessions; then
-
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${pkg}/share/wayland-sessions $out/share/wayland-sessions
-
fi
-
'') cfg.displayManager.sessionPackages}
-
'';
-
-
dmDefault = cfg.desktopManager.default;
-
# fallback default for cases when only default wm is set
-
dmFallbackDefault = if dmDefault != null then dmDefault else "none";
-
wmDefault = cfg.windowManager.default;
-
-
defaultSessionFromLegacyOptions = dmFallbackDefault + optionalString (wmDefault != null && wmDefault != "none") "+${wmDefault}";
-
in
{
···
'';
};
-
hiddenUsers = mkOption {
-
type = types.listOf types.str;
-
default = [ "nobody" ];
-
description = lib.mdDoc ''
-
A list of users which will not be shown in the display manager.
-
'';
-
};
-
-
sessionPackages = mkOption {
-
type = with types; listOf (package // {
-
description = "package with provided sessions";
-
check = p: assertMsg
-
(package.check p && p ? providedSessions
-
&& p.providedSessions != [] && all isString p.providedSessions)
-
''
-
Package, '${p.name}', did not specify any session names, as strings, in
-
'passthru.providedSessions'. This is required when used as a session package.
-
-
The session names can be looked up in:
-
${p}/share/xsessions
-
${p}/share/wayland-sessions
-
'';
-
});
-
default = [];
-
description = lib.mdDoc ''
-
A list of packages containing x11 or wayland session files to be passed to the display manager.
-
'';
-
};
-
session = mkOption {
default = [];
type = types.listOf types.attrs;
···
'';
};
-
sessionData = mkOption {
-
description = lib.mdDoc "Data exported for display managers’ convenience";
-
internal = true;
-
default = {};
-
apply = val: {
-
wrapper = xsessionWrapper;
-
desktops = installedSessions;
-
sessionNames = concatMap (p: p.providedSessions) cfg.displayManager.sessionPackages;
-
# We do not want to force users to set defaultSession when they have only single DE.
-
autologinSession =
-
if cfg.displayManager.defaultSession != null then
-
cfg.displayManager.defaultSession
-
else if cfg.displayManager.sessionData.sessionNames != [] then
-
head cfg.displayManager.sessionData.sessionNames
-
else
-
null;
-
};
-
};
-
-
defaultSession = mkOption {
-
type = with types; nullOr str // {
-
description = "session name";
-
check = d:
-
assertMsg (d != null -> (str.check d && elem d cfg.displayManager.sessionData.sessionNames)) ''
-
Default graphical session, '${d}', not found.
-
Valid names for 'services.xserver.displayManager.defaultSession' are:
-
${concatStringsSep "\n " cfg.displayManager.sessionData.sessionNames}
-
'';
-
};
-
default =
-
if dmDefault != null || wmDefault != null then
-
defaultSessionFromLegacyOptions
-
else
-
null;
-
defaultText = literalMD ''
-
Taken from display manager settings or window manager settings, if either is set.
-
'';
-
example = "gnome";
-
description = lib.mdDoc ''
-
Graphical session to pre-select in the session chooser (only effective for GDM, LightDM and SDDM).
-
-
On GDM, LightDM and SDDM, it will also be used as a session for auto-login.
-
'';
-
};
-
importedVariables = mkOption {
type = types.listOf (types.strMatching "[a-zA-Z_][a-zA-Z0-9_]*");
visible = false;
···
'';
};
-
job = {
-
-
preStart = mkOption {
-
type = types.lines;
-
default = "";
-
example = "rm -f /var/log/my-display-manager.log";
-
description = lib.mdDoc "Script executed before the display manager is started.";
-
};
-
-
execCmd = mkOption {
-
type = types.str;
-
example = literalExpression ''"''${pkgs.lightdm}/bin/lightdm"'';
-
description = lib.mdDoc "Command to start the display manager.";
-
};
-
-
environment = mkOption {
-
type = types.attrsOf types.unspecified;
-
default = {};
-
description = lib.mdDoc "Additional environment variables needed by the display manager.";
-
};
-
-
logToFile = mkOption {
-
type = types.bool;
-
default = false;
-
description = lib.mdDoc ''
-
Whether the display manager redirects the output of the
-
session script to {file}`~/.xsession-errors`.
-
'';
-
};
-
-
logToJournal = mkOption {
-
type = types.bool;
-
default = true;
-
description = lib.mdDoc ''
-
Whether the display manager redirects the output of the
-
session script to the systemd journal.
-
'';
-
};
-
-
};
-
-
# Configuration for automatic login. Common for all DM.
-
autoLogin = mkOption {
-
type = types.submodule ({ config, options, ... }: {
-
options = {
-
enable = mkOption {
-
type = types.bool;
-
default = config.user != null;
-
defaultText = literalExpression "config.${options.user} != null";
-
description = lib.mdDoc ''
-
Automatically log in as {option}`autoLogin.user`.
-
'';
-
};
-
-
user = mkOption {
-
type = types.nullOr types.str;
-
default = null;
-
description = lib.mdDoc ''
-
User to be used for the automatic login.
-
'';
-
};
-
};
-
});
-
-
default = {};
-
description = lib.mdDoc ''
-
Auto login configuration attrset.
-
'';
-
};
-
};
};
config = {
assertions = [
-
{ assertion = cfg.displayManager.autoLogin.enable -> cfg.displayManager.autoLogin.user != null;
-
message = ''
-
services.xserver.displayManager.autoLogin.enable requires services.xserver.displayManager.autoLogin.user to be set
-
'';
-
}
{
assertion = cfg.desktopManager.default != null || cfg.windowManager.default != null -> cfg.displayManager.defaultSession == defaultSessionFromLegacyOptions;
-
message = "You cannot use both services.xserver.displayManager.defaultSession option and legacy options (services.xserver.desktopManager.default and services.xserver.windowManager.default).";
+
message = "You cannot use both services.displayManager.defaultSession option and legacy options (services.xserver.desktopManager.default and services.xserver.windowManager.default).";
}
];
-
warnings =
-
mkIf (dmDefault != null || wmDefault != null) [
-
''
-
The following options are deprecated:
-
${concatStringsSep "\n " (map ({c, t}: t) (filter ({c, t}: c != null) [
-
{ c = dmDefault; t = "- services.xserver.desktopManager.default"; }
-
{ c = wmDefault; t = "- services.xserver.windowManager.default"; }
-
]))}
-
Please use
-
services.xserver.displayManager.defaultSession = "${defaultSessionFromLegacyOptions}";
-
instead.
-
''
-
];
+
services.displayManager.sessionData.wrapper = xsessionWrapper;
services.xserver.displayManager.xserverBin = "${xorg.xorgserver.out}/bin/X";
···
# Create desktop files and scripts for starting sessions for WMs/DMs
# that do not have upstream session files (those defined using services.{display,desktop,window}Manager.session options).
-
services.xserver.displayManager.sessionPackages =
+
services.displayManager.sessionPackages =
let
dms = filter (s: s.manage == "desktop") cfg.displayManager.session;
wms = filter (s: s.manage == "window") cfg.displayManager.session;
···
)
(cartesianProductOfSets { dm = dms; wm = wms; })
);
-
-
# Make xsessions and wayland sessions available in XDG_DATA_DIRS
-
# as some programs have behavior that depends on them being present
-
environment.sessionVariables.XDG_DATA_DIRS = lib.mkIf (cfg.displayManager.sessionPackages != [ ]) [
-
"${cfg.displayManager.sessionData.desktops}/share"
-
];
};
imports = [
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "desktopManagerHandlesLidAndPower" ]
"The option is no longer necessary because all display managers have already delegated lid management to systemd.")
-
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logsXsession" ] [ "services" "xserver" "displayManager" "job" "logToFile" ])
-
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "logToJournal" ] [ "services" "xserver" "displayManager" "job" "logToJournal" ])
-
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "extraSessionFilesPackages" ] [ "services" "xserver" "displayManager" "sessionPackages" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logsXsession" ] [ "services" "displayManager" "logToFile" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "logToJournal" ] [ "services" "displayManager" "logToJournal" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "extraSessionFilesPackages" ] [ "services" "displayManager" "sessionPackages" ])
];
}
+9 -11
nixos/modules/services/x11/display-managers/gdm.nix
···
load-module module-position-event-sounds
'';
-
defaultSessionName = config.services.xserver.displayManager.defaultSession;
+
defaultSessionName = config.services.displayManager.defaultSession;
setSessionScript = pkgs.callPackage ./account-service-util.nix { };
in
···
imports = [
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "gdm" "autoLogin" "enable" ] [
"services"
-
"xserver"
"displayManager"
"autoLogin"
"enable"
])
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "gdm" "autoLogin" "user" ] [
"services"
-
"xserver"
"displayManager"
"autoLogin"
"user"
···
services.xserver.display = null;
services.xserver.verbose = null;
-
services.xserver.displayManager.job =
+
services.displayManager =
{
environment = {
GDM_X_SERVER_EXTRA_ARGS = toString
(filter (arg: arg != "-terminate") cfg.xserverArgs);
XDG_DATA_DIRS = lib.makeSearchPath "share" [
gdm # for gnome-login.session
-
cfg.sessionData.desktops
+
config.services.displayManager.sessionData.desktops
pkgs.gnome.gnome-control-center # for accessibility icon
pkgs.gnome.adwaita-icon-theme
pkgs.hicolor-icon-theme # empty icon theme as a base
···
execCmd = "exec ${gdm}/bin/gdm";
preStart = optionalString (defaultSessionName != null) ''
# Set default session in session chooser to a specified values – basically ignore session history.
-
${setSessionScript}/bin/set-session ${cfg.sessionData.autologinSession}
+
${setSessionScript}/bin/set-session ${config.services.displayManager.sessionData.autologinSession}
'';
};
···
daemon = mkMerge [
{ WaylandEnable = cfg.gdm.wayland; }
# nested if else didn't work
-
(mkIf (cfg.autoLogin.enable && cfg.gdm.autoLogin.delay != 0 ) {
+
(mkIf (config.services.displayManager.autoLogin.enable && cfg.gdm.autoLogin.delay != 0 ) {
TimedLoginEnable = true;
-
TimedLogin = cfg.autoLogin.user;
+
TimedLogin = config.services.displayManager.autoLogin.user;
TimedLoginDelay = cfg.gdm.autoLogin.delay;
})
-
(mkIf (cfg.autoLogin.enable && cfg.gdm.autoLogin.delay == 0 ) {
+
(mkIf (config.services.displayManager.autoLogin.enable && cfg.gdm.autoLogin.delay == 0 ) {
AutomaticLoginEnable = true;
-
AutomaticLogin = cfg.autoLogin.user;
+
AutomaticLogin = config.services.displayManager.autoLogin.user;
})
];
debug = mkIf cfg.gdm.debug {
···
environment.etc."gdm/custom.conf".source = configFile;
-
environment.etc."gdm/Xsession".source = config.services.xserver.displayManager.sessionData.wrapper;
+
environment.etc."gdm/Xsession".source = config.services.displayManager.sessionData.wrapper;
# GDM LFS PAM modules, adapted somehow to NixOS
security.pam.services = {
+1 -1
nixos/modules/services/x11/display-managers/lightdm-greeters/mini.nix
···
Note that this greeter starts only the default X session.
You can configure the default X session using
-
[](#opt-services.xserver.displayManager.defaultSession).
+
[](#opt-services.displayManager.defaultSession).
'';
};
+2 -2
nixos/modules/services/x11/display-managers/lightdm-greeters/tiny.nix
···
Note that this greeter starts only the default X session.
You can configure the default X session using
-
[](#opt-services.xserver.displayManager.defaultSession).
+
[](#opt-services.displayManager.defaultSession).
'';
};
···
{
assertion = dmcfg.defaultSession != null;
message = ''
-
Please set: services.xserver.displayManager.defaultSession
+
Please set: services.displayManager.defaultSession
'';
}
];
+9 -11
nixos/modules/services/x11/display-managers/lightdm.nix
···
let
xcfg = config.services.xserver;
-
dmcfg = xcfg.displayManager;
+
dmcfg = config.services.displayManager;
xEnv = config.systemd.services.display-manager.environment;
-
cfg = dmcfg.lightdm;
+
cfg = xcfg.displayManager.lightdm;
sessionData = dmcfg.sessionData;
setSessionScript = pkgs.callPackage ./account-service-util.nix { };
···
else additionalArgs="-logfile /var/log/X.$display.log"
fi
-
exec ${dmcfg.xserverBin} ${toString dmcfg.xserverArgs} $additionalArgs "$@"
+
exec ${xcfg.displayManager.xserverBin} ${toString xcfg.displayManager.xserverArgs} $additionalArgs "$@"
'';
usersConf = writeText "users.conf"
···
autologin-user-timeout = ${toString cfg.autoLogin.timeout}
autologin-session = ${sessionData.autologinSession}
''}
-
${optionalString (dmcfg.setupCommands != "") ''
+
${optionalString (xcfg.displayManager.setupCommands != "") ''
display-setup-script=${pkgs.writeScript "lightdm-display-setup" ''
#!${pkgs.bash}/bin/bash
-
${dmcfg.setupCommands}
+
${xcfg.displayManager.setupCommands}
''}
''}
${cfg.extraSeatDefaults}
···
./lightdm-greeters/mobile.nix
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "lightdm" "autoLogin" "enable" ] [
"services"
-
"xserver"
"displayManager"
"autoLogin"
"enable"
])
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "lightdm" "autoLogin" "user" ] [
"services"
-
"xserver"
"displayManager"
"autoLogin"
"user"
···
}
{ assertion = dmcfg.autoLogin.enable -> sessionData.autologinSession != null;
message = ''
-
LightDM auto-login requires that services.xserver.displayManager.defaultSession is set.
+
LightDM auto-login requires that services.displayManager.defaultSession is set.
'';
}
{ assertion = !cfg.greeter.enable -> (dmcfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
···
# Set default session in session chooser to a specified values – basically ignore session history.
# Auto-login is already covered by a config value.
-
services.xserver.displayManager.job.preStart = optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null) ''
+
services.displayManager.preStart = optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null) ''
${setSessionScript}/bin/set-session ${dmcfg.defaultSession}
'';
# setSessionScript needs session-files in XDG_DATA_DIRS
-
services.xserver.displayManager.job.environment.XDG_DATA_DIRS = "${dmcfg.sessionData.desktops}/share/";
+
services.displayManager.environment.XDG_DATA_DIRS = "${dmcfg.sessionData.desktops}/share/";
# setSessionScript wants AccountsService
systemd.services.display-manager.wants = [
···
];
# lightdm relaunches itself via just `lightdm`, so needs to be on the PATH
-
services.xserver.displayManager.job.execCmd = ''
+
services.displayManager.execCmd = ''
export PATH=${lightdm}/sbin:$PATH
exec ${lightdm}/sbin/lightdm
'';
+36 -19
nixos/modules/services/x11/display-managers/sddm.nix nixos/modules/services/display-managers/sddm.nix
···
let
xcfg = config.services.xserver;
-
dmcfg = xcfg.displayManager;
-
cfg = dmcfg.sddm;
+
dmcfg = config.services.displayManager;
+
cfg = config.services.displayManager.sddm;
xEnv = config.systemd.services.display-manager.environment;
sddm = cfg.package.override (old: {
···
xserverWrapper = pkgs.writeShellScript "xserver-wrapper" ''
${concatMapStrings (n: "export ${n}=\"${getAttr n xEnv}\"\n") (attrNames xEnv)}
-
exec systemd-cat -t xserver-wrapper ${dmcfg.xserverBin} ${toString dmcfg.xserverArgs} "$@"
+
exec systemd-cat -t xserver-wrapper ${xcfg.displayManager.xserverBin} ${toString xcfg.displayManager.xserverArgs} "$@"
'';
Xsetup = pkgs.writeShellScript "Xsetup" ''
${cfg.setupScript}
-
${dmcfg.setupCommands}
+
${xcfg.displayManager.setupCommands}
'';
Xstop = pkgs.writeShellScript "Xstop" ''
···
Numlock = if cfg.autoNumlock then "on" else "none"; # on, off none
# Implementation is done via pkgs/applications/display-managers/sddm/sddm-default-session.patch
-
DefaultSession = optionalString (dmcfg.defaultSession != null) "${dmcfg.defaultSession}.desktop";
+
DefaultSession = optionalString (config.services.displayManager.defaultSession != null) "${config.services.displayManager.defaultSession}.desktop";
DisplayServer = if cfg.wayland.enable then "wayland" else "x11";
} // optionalAttrs (cfg.wayland.compositor == "kwin") {
···
in
{
imports = [
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "minimumUid" ] [ "services" "displayManager" "sddm" "autoLogin" "minimumUid" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "relogin" ] [ "services" "displayManager" "sddm" "autoLogin" "relogin" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoNumlock" ] [ "services" "displayManager" "sddm" "autoNumlock" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "enable" ] [ "services" "displayManager" "sddm" "enable" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "enableHidpi" ] [ "services" "displayManager" "sddm" "enableHidpi" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "extraPackages" ] [ "services" "displayManager" "sddm" "extraPackages" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "package" ] [ "services" "displayManager" "sddm" "package" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "settings" ] [ "services" "displayManager" "sddm" "settings" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "setupScript" ] [ "services" "displayManager" "sddm" "setupScript" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "stopScript" ] [ "services" "displayManager" "sddm" "stopScript" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "theme" ] [ "services" "displayManager" "sddm" "theme" ])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "wayland" "enable" ] [ "services" "displayManager" "sddm" "wayland" "enable" ])
+
(mkRemovedOptionModule
-
[ "services" "xserver" "displayManager" "sddm" "themes" ]
-
"Set the option `services.xserver.displayManager.sddm.package' instead.")
+
[ "services" "displayManager" "sddm" "themes" ]
+
"Set the option `services.displayManager.sddm.package' instead.")
(mkRenamedOptionModule
-
[ "services" "xserver" "displayManager" "sddm" "autoLogin" "enable" ]
-
[ "services" "xserver" "displayManager" "autoLogin" "enable" ])
+
[ "services" "displayManager" "sddm" "autoLogin" "enable" ]
+
[ "services" "displayManager" "autoLogin" "enable" ])
(mkRenamedOptionModule
-
[ "services" "xserver" "displayManager" "sddm" "autoLogin" "user" ]
-
[ "services" "xserver" "displayManager" "autoLogin" "user" ])
+
[ "services" "displayManager" "sddm" "autoLogin" "user" ]
+
[ "services" "displayManager" "autoLogin" "user" ])
(mkRemovedOptionModule
-
[ "services" "xserver" "displayManager" "sddm" "extraConfig" ]
-
"Set the option `services.xserver.displayManager.sddm.settings' instead.")
+
[ "services" "displayManager" "sddm" "extraConfig" ]
+
"Set the option `services.displayManager.sddm.settings' instead.")
];
options = {
-
services.xserver.displayManager.sddm = {
+
services.displayManager.sddm = {
enable = mkOption {
type = types.bool;
default = false;
···
assertions = [
{
-
assertion = xcfg.enable;
+
assertion = xcfg.enable || cfg.wayland.enable;
message = ''
-
SDDM requires services.xserver.enable to be true
+
SDDM requires either services.xserver.enable or services.displayManager.sddm.wayland.enable to be true
'';
}
{
-
assertion = dmcfg.autoLogin.enable -> autoLoginSessionName != null;
+
assertion = config.services.displayManager.autoLogin.enable -> autoLoginSessionName != null;
message = ''
-
SDDM auto-login requires that services.xserver.displayManager.defaultSession is set.
+
SDDM auto-login requires that services.displayManager.defaultSession is set.
'';
}
];
+
+
services.displayManager = {
+
enable = true;
+
execCmd = "exec /run/current-system/sw/bin/sddm";
+
};
security.pam.services = {
sddm.text = ''
···
services = {
dbus.packages = [ sddm ];
xserver = {
-
displayManager.job.execCmd = "exec /run/current-system/sw/bin/sddm";
# To enable user switching, allow sddm to allocate TTYs/displays dynamically.
tty = null;
display = null;
+1 -1
nixos/modules/services/x11/display-managers/xpra.nix
···
VideoRam 192000
'';
-
services.xserver.displayManager.job.execCmd = ''
+
services.displayManager.execCmd = ''
${optionalString (cfg.pulseaudio)
"export PULSE_COOKIE=/run/pulse/.config/pulse/cookie"}
exec ${pkgs.xpra}/bin/xpra ${if cfg.desktop == null then "start" else "start-desktop --start=${cfg.desktop}"} \
+1 -1
nixos/modules/services/x11/window-managers/default.nix
···
default = null;
example = "wmii";
description = lib.mdDoc ''
-
**Deprecated**, please use [](#opt-services.xserver.displayManager.defaultSession) instead.
+
**Deprecated**, please use [](#opt-services.displayManager.defaultSession) instead.
Default window manager loaded if none have been chosen.
'';
+1 -1
nixos/modules/services/x11/window-managers/ragnarwm.nix
···
###### implementation
config = mkIf cfg.enable {
-
services.xserver.displayManager.sessionPackages = [ cfg.package ];
+
services.displayManager.sessionPackages = [ cfg.package ];
environment.systemPackages = [ cfg.package ];
};
+5 -48
nixos/modules/services/x11/xserver.nix
···
###### implementation
config = mkIf cfg.enable {
+
services.displayManager.enable = true;
services.xserver.displayManager.lightdm.enable =
let dmConf = cfg.displayManager;
default = !(dmConf.gdm.enable
-
|| dmConf.sddm.enable
+
|| config.services.displayManager.sddm.enable
|| dmConf.xpra.enable
|| dmConf.sx.enable
|| dmConf.startx.enable
|| config.services.greetd.enable);
in mkIf (default) (mkDefault true);
-
-
# so that the service won't be enabled when only startx is used
-
systemd.services.display-manager.enable =
-
let dmConf = cfg.displayManager;
-
noDmUsed = !(dmConf.gdm.enable
-
|| dmConf.sddm.enable
-
|| dmConf.xpra.enable
-
|| dmConf.lightdm.enable);
-
in mkIf (noDmUsed) (mkDefault false);
-
-
hardware.opengl.enable = mkDefault true;
services.xserver.videoDrivers = mkIf (cfg.videoDriver != null) [ cfg.videoDriver ];
···
# -xkbdir command line option does not seems to be passed to xkbcomp.
"X11/xkb".source = "${cfg.xkb.dir}";
})
-
# localectl looks into 00-keyboard.conf
-
//{
-
"X11/xorg.conf.d/00-keyboard.conf".text = ''
-
Section "InputClass"
-
Identifier "Keyboard catchall"
-
MatchIsKeyboard "on"
-
Option "XkbModel" "${cfg.xkb.model}"
-
Option "XkbLayout" "${cfg.xkb.layout}"
-
Option "XkbOptions" "${cfg.xkb.options}"
-
Option "XkbVariant" "${cfg.xkb.variant}"
-
EndSection
-
'';
-
}
# Needed since 1.18; see https://bugs.freedesktop.org/show_bug.cgi?id=89023#c5
// (let cfgPath = "X11/xorg.conf.d/10-evdev.conf"; in
{
···
xorg.xprop
xorg.xauth
pkgs.xterm
-
pkgs.xdg-utils
xorg.xf86inputevdev.out # get evdev.4 man page
-
pkgs.nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
] config.services.xserver.excludePackages
++ optional (elem "virtualbox" cfg.videoDrivers) xorg.xrefresh;
environment.pathsToLink = [ "/share/X11" ];
-
xdg = {
-
autostart.enable = true;
-
menus.enable = true;
-
mime.enable = true;
-
icons.enable = true;
-
};
-
-
# The default max inotify watches is 8192.
-
# Nowadays most apps require a good number of inotify watches,
-
# the value below is used by default on several other distros.
-
boot.kernel.sysctl."fs.inotify.max_user_instances" = mkDefault 524288;
-
boot.kernel.sysctl."fs.inotify.max_user_watches" = mkDefault 524288;
-
-
programs.gnupg.agent.pinentryPackage = lib.mkOverride 1100 pkgs.pinentry-gnome3;
-
-
systemd.defaultUnit = mkIf cfg.autorun "graphical.target";
-
systemd.services.display-manager =
{ description = "Display Manager";
···
environment =
optionalAttrs config.hardware.opengl.setLdLibraryPath
{ LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.addOpenGLRunpath.driverLink ]; }
-
// cfg.displayManager.job.environment;
+
// config.services.displayManager.environment;
preStart =
''
-
${cfg.displayManager.job.preStart}
+
${config.services.displayManager.preStart}
rm -f /tmp/.X0-lock
'';
# TODO: move declaring the systemd service to its own mkIf
-
script = mkIf (config.systemd.services.display-manager.enable == true) "${cfg.displayManager.job.execCmd}";
+
script = mkIf (config.systemd.services.display-manager.enable == true) "${config.services.displayManager.execCmd}";
# Stop restarting if the display manager stops (crashes) 2 times
# in one minute. Starting X typically takes 3-4s.
···
${cfg.extraConfig}
'';
-
fonts.enableDefaultPackages = mkDefault true;
fonts.packages = [
(if cfg.upscaleDefaultCursor then fontcursormisc_hidpi else pkgs.xorg.fontcursormisc)
pkgs.xorg.fontmiscmisc
+1 -1
nixos/modules/testing/test-instrumentation.nix
···
# uses credentials to set passwords on users.
users.users.root.hashedPasswordFile = mkOverride 150 "${pkgs.writeText "hashed-password.root" ""}";
-
services.xserver.displayManager.job.logToJournal = true;
+
services.displayManager.logToJournal = true;
# Make sure we use the Guest Agent from the QEMU package for testing
# to reduce the closure size required for the tests.
+1 -1
nixos/release.nix
···
kde = makeClosure ({ ... }:
{ services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
+
services.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
});
+1 -1
nixos/tests/ayatana-indicators.nix
···
services.xserver = {
enable = true;
desktopManager.mate.enable = true;
-
displayManager.defaultSession = lib.mkForce "mate";
};
+
services.displayManager.defaultSession = lib.mkForce "mate";
services.ayatana-indicators = {
enable = true;
+1 -1
nixos/tests/cinnamon-wayland.nix
···
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.xserver.desktopManager.cinnamon.enable = true;
-
services.xserver.displayManager = {
+
services.displayManager = {
autoLogin.enable = true;
autoLogin.user = nodes.machine.users.users.alice.name;
defaultSession = "cinnamon-wayland";
+4 -6
nixos/tests/common/auto.nix
···
###### implementation
config = lib.mkIf cfg.enable {
-
services.xserver.displayManager = {
-
lightdm.enable = true;
-
autoLogin = {
-
enable = true;
-
user = cfg.user;
-
};
+
services.xserver.displayManager.lightdm.enable = true;
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = cfg.user;
};
# lightdm by default doesn't allow auto login for root, which is
+1 -1
nixos/tests/common/x11.nix
···
# Use IceWM as the window manager.
# Don't use a desktop manager.
-
services.xserver.displayManager.defaultSession = lib.mkDefault "none+icewm";
+
services.displayManager.defaultSession = lib.mkDefault "none+icewm";
services.xserver.windowManager.icewm.enable = true;
}
+6 -5
nixos/tests/gnome-flashback.nix
···
services.xserver.displayManager = {
gdm.enable = true;
gdm.debug = true;
-
autoLogin = {
-
enable = true;
-
user = user.name;
-
};
+
};
+
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = user.name;
};
services.xserver.desktopManager.gnome.enable = true;
services.xserver.desktopManager.gnome.debug = true;
services.xserver.desktopManager.gnome.flashback.enableMetacity = true;
-
services.xserver.displayManager.defaultSession = "gnome-flashback-metacity";
+
services.displayManager.defaultSession = "gnome-flashback-metacity";
};
testScript = { nodes, ... }: let
+6 -5
nixos/tests/gnome-xorg.nix
···
services.xserver.displayManager = {
gdm.enable = true;
gdm.debug = true;
-
autoLogin = {
-
enable = true;
-
user = user.name;
-
};
+
};
+
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = user.name;
};
services.xserver.desktopManager.gnome.enable = true;
services.xserver.desktopManager.gnome.debug = true;
-
services.xserver.displayManager.defaultSession = "gnome-xorg";
+
services.displayManager.defaultSession = "gnome-xorg";
systemd.user.services = {
"org.gnome.Shell@x11" = {
+5 -4
nixos/tests/gnome.nix
···
services.xserver.displayManager = {
gdm.enable = true;
gdm.debug = true;
-
autoLogin = {
-
enable = true;
-
user = "alice";
-
};
+
};
+
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = "alice";
};
services.xserver.desktopManager.gnome.enable = true;
+1 -1
nixos/tests/herbstluftwm.nix
···
nodes.machine = { pkgs, lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = lib.mkForce "none+herbstluftwm";
+
services.displayManager.defaultSession = lib.mkForce "none+herbstluftwm";
services.xserver.windowManager.herbstluftwm.enable = true;
environment.systemPackages = [ pkgs.dzen2 ]; # needed for upstream provided panel
};
+1 -1
nixos/tests/i3wm.nix
···
nodes.machine = { lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = lib.mkForce "none+i3";
+
services.displayManager.defaultSession = lib.mkForce "none+i3";
services.xserver.windowManager.i3.enable = true;
};
+1 -1
nixos/tests/lightdm.nix
···
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.xserver.displayManager.lightdm.enable = true;
-
services.xserver.displayManager.defaultSession = "none+icewm";
+
services.displayManager.defaultSession = "none+icewm";
services.xserver.windowManager.icewm.enable = true;
};
+6 -3
nixos/tests/maestral.nix
···
gui = { ... }: common {
services.xserver = {
enable = true;
-
displayManager.sddm.enable = true;
-
displayManager.defaultSession = "plasma";
desktopManager.plasma5.enable = true;
desktopManager.plasma5.runUsingSystemd = true;
-
displayManager.autoLogin = {
+
};
+
+
services.displayManager = {
+
sddm.enable = true;
+
defaultSession = "plasma";
+
autoLogin = {
enable = true;
user = "alice";
};
+1 -1
nixos/tests/mate-wayland.nix
···
];
services.xserver.enable = true;
-
services.xserver.displayManager = {
+
services.displayManager = {
sddm.enable = true; # https://github.com/canonical/lightdm/issues/63
sddm.wayland.enable = true;
defaultSession = "MATE";
+2 -4
nixos/tests/miriway.nix
···
user = "alice";
};
-
services.xserver = {
-
enable = true;
-
displayManager.defaultSession = lib.mkForce "miriway";
-
};
+
services.xserver.enable = true;
+
services.displayManager.defaultSession = lib.mkForce "miriway";
programs.miriway = {
enable = true;
+1 -1
nixos/tests/nimdow.nix
···
nodes.machine = { lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = lib.mkForce "none+nimdow";
+
services.displayManager.defaultSession = lib.mkForce "none+nimdow";
services.xserver.windowManager.nimdow.enable = true;
};
+3 -3
nixos/tests/plasma-bigscreen.nix
···
{
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
-
services.xserver.displayManager.defaultSession = "plasma-bigscreen-x11";
+
services.displayManager.sddm.enable = true;
+
services.displayManager.defaultSession = "plasma-bigscreen-x11";
services.xserver.desktopManager.plasma5.bigscreen.enable = true;
-
services.xserver.displayManager.autoLogin = {
+
services.displayManager.autoLogin = {
enable = true;
user = "alice";
};
+6 -3
nixos/tests/plasma5-systemd-start.nix
···
imports = [ ./common/user-account.nix ];
services.xserver = {
enable = true;
-
displayManager.sddm.enable = true;
-
displayManager.defaultSession = "plasma";
desktopManager.plasma5.enable = true;
desktopManager.plasma5.runUsingSystemd = true;
-
displayManager.autoLogin = {
+
};
+
+
services.displayManager = {
+
sddm.enable = true;
+
defaultSession = "plasma";
+
autoLogin = {
enable = true;
user = "alice";
};
+3 -3
nixos/tests/plasma5.nix
···
{
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
-
services.xserver.displayManager.defaultSession = "plasma";
+
services.displayManager.sddm.enable = true;
+
services.displayManager.defaultSession = "plasma";
services.xserver.desktopManager.plasma5.enable = true;
environment.plasma5.excludePackages = [ pkgs.plasma5Packages.elisa ];
-
services.xserver.displayManager.autoLogin = {
+
services.displayManager.autoLogin = {
enable = true;
user = "alice";
};
+4 -4
nixos/tests/plasma6.nix
···
{
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
+
services.displayManager.sddm.enable = true;
# FIXME: this should be testing Wayland
-
services.xserver.displayManager.defaultSession = "plasmax11";
-
services.xserver.desktopManager.plasma6.enable = true;
+
services.displayManager.defaultSession = "plasmax11";
+
services.desktopManager.plasma6.enable = true;
environment.plasma6.excludePackages = [ pkgs.kdePackages.elisa ];
-
services.xserver.displayManager.autoLogin = {
+
services.displayManager.autoLogin = {
enable = true;
user = "alice";
};
+1 -1
nixos/tests/ragnarwm.nix
···
nodes.machine = { pkgs, lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = lib.mkForce "ragnar";
+
services.displayManager.defaultSession = lib.mkForce "ragnar";
services.xserver.windowManager.ragnarwm.enable = true;
# Setup the default terminal of Ragnar
+4 -4
nixos/tests/sddm.nix
···
nodes.machine = { ... }: {
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager.sddm.enable = true;
-
services.xserver.displayManager.defaultSession = "none+icewm";
+
services.displayManager.sddm.enable = true;
+
services.displayManager.defaultSession = "none+icewm";
services.xserver.windowManager.icewm.enable = true;
};
···
nodes.machine = { ... }: {
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager = {
+
services.displayManager = {
sddm.enable = true;
autoLogin = {
enable = true;
user = "alice";
};
};
-
services.xserver.displayManager.defaultSession = "none+icewm";
+
services.displayManager.defaultSession = "none+icewm";
services.xserver.windowManager.icewm.enable = true;
};
+1 -1
nixos/tests/wmderland.nix
···
nodes.machine = { lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = lib.mkForce "none+wmderland";
+
services.displayManager.defaultSession = lib.mkForce "none+wmderland";
services.xserver.windowManager.wmderland.enable = true;
systemd.services.setupWmderlandConfig = {
+4 -6
nixos/tests/xfce.nix
···
];
services.xserver.enable = true;
+
services.xserver.displayManager.lightdm.enable = true;
-
services.xserver.displayManager = {
-
lightdm.enable = true;
-
autoLogin = {
-
enable = true;
-
user = "alice";
-
};
+
services.displayManager.autoLogin = {
+
enable = true;
+
user = "alice";
};
services.xserver.desktopManager.xfce.enable = true;
+1 -1
nixos/tests/xmonad-xdg-autostart.nix
···
nodes.machine = { pkgs, config, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = "none+xmonad";
+
services.displayManager.defaultSession = "none+xmonad";
services.xserver.windowManager.xmonad.enable = true;
services.xserver.desktopManager.runXdgAutostartIfNone = true;
+1 -1
nixos/tests/xmonad.nix
···
nodes.machine = { pkgs, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
-
services.xserver.displayManager.defaultSession = "none+xmonad";
+
services.displayManager.defaultSession = "none+xmonad";
services.xserver.windowManager.xmonad = {
enable = true;
enableConfiguredRecompile = true;