diff --git a/nixos/doc/manual/configuration/profiles/demo.xml b/nixos/doc/manual/configuration/profiles/demo.xml
index 395a5ec357c9..bc801bb3dc5b 100644
--- a/nixos/doc/manual/configuration/profiles/demo.xml
+++ b/nixos/doc/manual/configuration/profiles/demo.xml
@@ -9,7 +9,6 @@
This profile just enables a demo
user, with password demo, uid 1000,
wheel group and
- autologin
- in the SDDM display manager.
+ autologin in the SDDM display manager.
diff --git a/nixos/doc/manual/configuration/x-windows.xml b/nixos/doc/manual/configuration/x-windows.xml
index ca93026d8654..18f0be5e7f39 100644
--- a/nixos/doc/manual/configuration/x-windows.xml
+++ b/nixos/doc/manual/configuration/x-windows.xml
@@ -90,10 +90,9 @@
using lightdm for a user alice:
= true;
- = true;
- = "alice";
+ = true;
+ = "alice";
- The options are named identically for all other display managers.
diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml
index 393a9286ca4f..0e9ba027a382 100644
--- a/nixos/doc/manual/release-notes/rl-2003.xml
+++ b/nixos/doc/manual/release-notes/rl-2003.xml
@@ -792,7 +792,7 @@ users.users.me =
The module has been removed.
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 options instead,
+ Please use the options instead,
or any other display manager in NixOS as they all support auto-login. If you used this module specifically
because it permitted root auto-login you can override the lightdm-autologin pam module like:
diff --git a/nixos/doc/manual/release-notes/rl-2009.xml b/nixos/doc/manual/release-notes/rl-2009.xml
index 152c2ba6248e..688671efffc4 100644
--- a/nixos/doc/manual/release-notes/rl-2009.xml
+++ b/nixos/doc/manual/release-notes/rl-2009.xml
@@ -519,6 +519,12 @@ systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www" ];
automatically if stateVersion is 20.09 or higher.
+
+
+ We now have a unified option interface
+ to be used for every display-manager in NixOS.
+
+
diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
index 3707c4b7ec62..8c98691116dc 100644
--- a/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
+++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
@@ -11,15 +11,17 @@ with lib;
services.xserver.desktopManager.gnome3.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;
+ 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";
diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix
index e76e06654aca..098c2b2870b0 100644
--- a/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix
+++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix
@@ -16,8 +16,8 @@ with lib;
};
# Automatically login as nixos.
- displayManager.sddm = {
- enable = true;
+ displayManager = {
+ sddm.enable = true;
autoLogin = {
enable = true;
user = "nixos";
diff --git a/nixos/modules/profiles/demo.nix b/nixos/modules/profiles/demo.nix
index 18f190071bad..4e8c74deedba 100644
--- a/nixos/modules/profiles/demo.nix
+++ b/nixos/modules/profiles/demo.nix
@@ -11,9 +11,11 @@
uid = 1000;
};
- services.xserver.displayManager.sddm.autoLogin = {
- enable = true;
- relogin = true;
- user = "demo";
+ services.xserver.displayManager = {
+ autoLogin = {
+ enable = true;
+ user = "demo";
+ };
+ sddm.autoLogin.relogin = true;
};
}
diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix
index 1dc7f8533176..cfe216d512b9 100644
--- a/nixos/modules/rename.nix
+++ b/nixos/modules/rename.nix
@@ -39,7 +39,7 @@ with lib;
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.lightdm.autoLogin options
+ LightDM. Please use the services.xserver.displayManager.autoLogin options
instead, or any other display manager in NixOS as they all support auto-login.
'')
(mkRemovedOptionModule [ "services" "dnscrypt-proxy" ] "Use services.dnscrypt-proxy2 instead")
diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix
index aa6a5ec42be8..e990a66d198f 100644
--- a/nixos/modules/services/x11/display-managers/default.nix
+++ b/nixos/modules/services/x11/display-managers/default.nix
@@ -332,12 +332,45 @@ in
};
+ # Configuration for automatic login. Common for all DM.
+ autoLogin = mkOption {
+ type = types.submodule {
+ options = {
+ enable = mkOption {
+ type = types.bool;
+ default = cfg.displayManager.autoLogin.user != null;
+ description = ''
+ Automatically log in as .
+ '';
+ };
+
+ user = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ User to be used for the automatic login.
+ '';
+ };
+ };
+ };
+
+ default = {};
+ description = ''
+ 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).";
diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix
index 622ea62f3a91..573049ab07af 100644
--- a/nixos/modules/services/x11/display-managers/gdm.nix
+++ b/nixos/modules/services/x11/display-managers/gdm.nix
@@ -37,6 +37,22 @@ let
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"
+ ])
+ ];
meta = {
maintainers = teams.gnome.members;
@@ -56,40 +72,13 @@ in
debugging messages in GDM
'';
- autoLogin = mkOption {
- default = {};
+ # Auto login options specific to GDM
+ autoLogin.delay = mkOption {
+ type = types.int;
+ default = 0;
description = ''
- Auto login configuration attrset.
+ Seconds of inactivity after which the autologin will be performed.
'';
-
- type = types.submodule {
- options = {
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Automatically log in as the sepecified .
- '';
- };
-
- user = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- User to be used for the autologin.
- '';
- };
-
- delay = mkOption {
- type = types.int;
- default = 0;
- description = ''
- Seconds of inactivity after which the autologin will be performed.
- '';
- };
-
- };
- };
};
wayland = mkOption {
@@ -128,12 +117,6 @@ in
config = mkIf cfg.gdm.enable {
- assertions = [
- { assertion = cfg.gdm.autoLogin.enable -> cfg.gdm.autoLogin.user != null;
- message = "GDM auto-login requires services.xserver.displayManager.gdm.autoLogin.user to be set";
- }
- ];
-
services.xserver.displayManager.lightdm.enable = false;
users.users.gdm =
@@ -287,14 +270,14 @@ in
environment.etc."gdm/custom.conf".text = ''
[daemon]
WaylandEnable=${if cfg.gdm.wayland then "true" else "false"}
- ${optionalString cfg.gdm.autoLogin.enable (
+ ${optionalString cfg.autoLogin.enable (
if cfg.gdm.autoLogin.delay > 0 then ''
TimedLoginEnable=true
- TimedLogin=${cfg.gdm.autoLogin.user}
+ TimedLogin=${cfg.autoLogin.user}
TimedLoginDelay=${toString cfg.gdm.autoLogin.delay}
'' else ''
AutomaticLoginEnable=true
- AutomaticLogin=${cfg.gdm.autoLogin.user}
+ AutomaticLogin=${cfg.autoLogin.user}
'')
}
diff --git a/nixos/modules/services/x11/display-managers/lightdm.nix b/nixos/modules/services/x11/display-managers/lightdm.nix
index 678cade44427..3bee21fa822e 100644
--- a/nixos/modules/services/x11/display-managers/lightdm.nix
+++ b/nixos/modules/services/x11/display-managers/lightdm.nix
@@ -53,8 +53,8 @@ let
${optionalString cfg.greeter.enable ''
greeter-session = ${cfg.greeter.name}
''}
- ${optionalString cfg.autoLogin.enable ''
- autologin-user = ${cfg.autoLogin.user}
+ ${optionalString dmcfg.autoLogin.enable ''
+ autologin-user = ${dmcfg.autoLogin.user}
autologin-user-timeout = ${toString cfg.autoLogin.timeout}
autologin-session = ${sessionData.autologinSession}
''}
@@ -82,6 +82,20 @@ in
./lightdm-greeters/enso-os.nix
./lightdm-greeters/pantheon.nix
./lightdm-greeters/tiny.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"
+ ])
];
options = {
@@ -149,39 +163,13 @@ in
description = "Extra lines to append to SeatDefaults section.";
};
- autoLogin = mkOption {
- default = {};
+ # Configuration for automatic login specific to LightDM
+ autoLogin.timeout = mkOption {
+ type = types.int;
+ default = 0;
description = ''
- Configuration for automatic login.
+ Show the greeter for this many seconds before automatic login occurs.
'';
-
- type = types.submodule {
- options = {
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Automatically log in as the specified .
- '';
- };
-
- user = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- User to be used for the automatic login.
- '';
- };
-
- timeout = mkOption {
- type = types.int;
- default = 0;
- description = ''
- Show the greeter for this many seconds before automatic login occurs.
- '';
- };
- };
- };
};
};
@@ -195,17 +183,12 @@ in
LightDM requires services.xserver.enable to be true
'';
}
- { assertion = cfg.autoLogin.enable -> cfg.autoLogin.user != null;
- message = ''
- LightDM auto-login requires services.xserver.displayManager.lightdm.autoLogin.user to be set
- '';
- }
- { assertion = cfg.autoLogin.enable -> sessionData.autologinSession != null;
+ { assertion = dmcfg.autoLogin.enable -> sessionData.autologinSession != null;
message = ''
LightDM auto-login requires that services.xserver.displayManager.defaultSession is set.
'';
}
- { assertion = !cfg.greeter.enable -> (cfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
+ { assertion = !cfg.greeter.enable -> (dmcfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
message = ''
LightDM can only run without greeter if automatic login is enabled and the timeout for it
is set to zero.
@@ -218,7 +201,7 @@ in
# 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 (!cfg.autoLogin.enable && dmcfg.defaultSession != null) ''
+ services.xserver.displayManager.job.preStart = optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null) ''
${setSessionScript}/bin/set-session ${dmcfg.defaultSession}
'';
diff --git a/nixos/modules/services/x11/display-managers/sddm.nix b/nixos/modules/services/x11/display-managers/sddm.nix
index 2f42271da872..e63bb2e44539 100644
--- a/nixos/modules/services/x11/display-managers/sddm.nix
+++ b/nixos/modules/services/x11/display-managers/sddm.nix
@@ -61,9 +61,9 @@ let
EnableHidpi=${if cfg.enableHidpi then "true" else "false"}
SessionDir=${dmcfg.sessionData.desktops}/share/wayland-sessions
- ${optionalString cfg.autoLogin.enable ''
+ ${optionalString dmcfg.autoLogin.enable ''
[Autologin]
- User=${cfg.autoLogin.user}
+ User=${dmcfg.autoLogin.user}
Session=${autoLoginSessionName}.desktop
Relogin=${boolToString cfg.autoLogin.relogin}
''}
@@ -78,6 +78,20 @@ in
imports = [
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "sddm" "themes" ]
"Set the option `services.xserver.displayManager.sddm.package' instead.")
+ (mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "enable" ] [
+ "services"
+ "xserver"
+ "displayManager"
+ "autoLogin"
+ "enable"
+ ])
+ (mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "user" ] [
+ "services"
+ "xserver"
+ "displayManager"
+ "autoLogin"
+ "user"
+ ])
];
options = {
@@ -153,40 +167,14 @@ in
'';
};
- autoLogin = mkOption {
- default = {};
+ # Configuration for automatic login specific to SDDM
+ autoLogin.relogin = mkOption {
+ type = types.bool;
+ default = false;
description = ''
- Configuration for automatic login.
+ If true automatic login will kick in again on session exit (logout), otherwise it
+ will only log in automatically when the display-manager is started.
'';
-
- type = types.submodule {
- options = {
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Automatically log in as .
- '';
- };
-
- user = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- User to be used for the automatic login.
- '';
- };
-
- relogin = mkOption {
- type = types.bool;
- default = false;
- description = ''
- If true automatic login will kick in again on session exit (logout), otherwise it
- will only log in automatically when the display-manager is started.
- '';
- };
- };
- };
};
};
@@ -201,12 +189,7 @@ in
SDDM requires services.xserver.enable to be true
'';
}
- { assertion = cfg.autoLogin.enable -> cfg.autoLogin.user != null;
- message = ''
- SDDM auto-login requires services.xserver.displayManager.sddm.autoLogin.user to be set
- '';
- }
- { assertion = cfg.autoLogin.enable -> autoLoginSessionName != null;
+ { assertion = dmcfg.autoLogin.enable -> autoLoginSessionName != null;
message = ''
SDDM auto-login requires that services.xserver.displayManager.defaultSession is set.
'';
diff --git a/nixos/tests/common/auto.nix b/nixos/tests/common/auto.nix
index 2c21a8d51673..da6b14e9f160 100644
--- a/nixos/tests/common/auto.nix
+++ b/nixos/tests/common/auto.nix
@@ -41,8 +41,8 @@ in
config = mkIf cfg.enable {
- services.xserver.displayManager.lightdm = {
- enable = true;
+ services.xserver.displayManager = {
+ lightdm.enable = true;
autoLogin = {
enable = true;
user = cfg.user;
diff --git a/nixos/tests/gnome3-xorg.nix b/nixos/tests/gnome3-xorg.nix
index b59badcd5de4..61fcc9302832 100644
--- a/nixos/tests/gnome3-xorg.nix
+++ b/nixos/tests/gnome3-xorg.nix
@@ -12,8 +12,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : {
services.xserver.enable = true;
- services.xserver.displayManager.gdm = {
- enable = true;
+ services.xserver.displayManager = {
+ gdm.enable = true;
autoLogin = {
enable = true;
user = user.name;
diff --git a/nixos/tests/gnome3.nix b/nixos/tests/gnome3.nix
index 17e72c5f6510..509792515ce3 100644
--- a/nixos/tests/gnome3.nix
+++ b/nixos/tests/gnome3.nix
@@ -11,8 +11,8 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : {
services.xserver.enable = true;
- services.xserver.displayManager.gdm = {
- enable = true;
+ services.xserver.displayManager = {
+ gdm.enable = true;
autoLogin = {
enable = true;
user = "alice";
diff --git a/nixos/tests/plasma5.nix b/nixos/tests/plasma5.nix
index 2eccfdf47f59..5a603f8cbfb5 100644
--- a/nixos/tests/plasma5.nix
+++ b/nixos/tests/plasma5.nix
@@ -14,7 +14,7 @@ import ./make-test-python.nix ({ pkgs, ...} :
services.xserver.displayManager.sddm.enable = true;
services.xserver.displayManager.defaultSession = "plasma5";
services.xserver.desktopManager.plasma5.enable = true;
- services.xserver.displayManager.sddm.autoLogin = {
+ services.xserver.displayManager.autoLogin = {
enable = true;
user = "alice";
};
diff --git a/nixos/tests/sddm.nix b/nixos/tests/sddm.nix
index a145705250f7..f9b961163c3c 100644
--- a/nixos/tests/sddm.nix
+++ b/nixos/tests/sddm.nix
@@ -44,8 +44,8 @@ let
machine = { ... }: {
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
- services.xserver.displayManager.sddm = {
- enable = true;
+ services.xserver.displayManager = {
+ sddm.enable = true;
autoLogin = {
enable = true;
user = "alice";
diff --git a/nixos/tests/xfce.nix b/nixos/tests/xfce.nix
index 99065669661a..99e30342e593 100644
--- a/nixos/tests/xfce.nix
+++ b/nixos/tests/xfce.nix
@@ -11,8 +11,8 @@ import ./make-test-python.nix ({ pkgs, ...} : {
services.xserver.enable = true;
- services.xserver.displayManager.lightdm = {
- enable = true;
+ services.xserver.displayManager = {
+ lightdm.enable = true;
autoLogin = {
enable = true;
user = "alice";