diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix
index 6c3c52730863..245c18ee2d96 100644
--- a/nixos/modules/services/x11/display-managers/gdm.nix
+++ b/nixos/modules/services/x11/display-managers/gdm.nix
@@ -18,14 +18,42 @@ in
services.xserver.displayManager.gdm = {
- enable = mkOption {
- type = types.bool;
- default = false;
- example = true;
- description = ''
- Whether to enable GDM as the display manager.
- GDM is very experimental and may render system unusable.
- '';
+ enable = mkEnableOption ''
+ Whether to enable GDM as the display manager.
+ GDM is very experimental and may render system unusable.
+ '';
+
+ autoLogin = mkOption {
+ default = {};
+
+ 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.
+ '';
+ };
+
+ };
+ };
};
};
@@ -71,6 +99,25 @@ in
programs.dconf.profiles.gdm = "${gdm}/share/dconf/profile/gdm";
+ environment.etc."gdm/custom.conf".text = ''
+ [daemon]
+ ${optionalString cfg.gdm.autoLogin.enable ''
+ TimedLoginEnable=true
+ TimedLogin=${cfg.gdm.autoLogin.user}
+ TimedLoginDelay=${toString cfg.gdm.autoLogin.delay}
+ ''}
+
+ [security]
+
+ [xdmcp]
+
+ [greeter]
+
+ [chooser]
+
+ [debug]
+ '';
+
# GDM LFS PAM modules, adapted somehow to NixOS
security.pam.services = {
gdm-launch-environment.text = ''
@@ -89,7 +136,7 @@ in
session optional pam_permit.so
'';
- gdm.text = ''
+ gdm.text = ''
auth requisite pam_nologin.so
auth required pam_env.so