at master 4.0 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 utils, 6 ... 7}: 8{ 9 options.services.logind = { 10 settings.Login = lib.mkOption { 11 description = '' 12 Settings option for systemd-logind. 13 See {manpage}`logind.conf(5)` for available options. 14 ''; 15 type = lib.types.submodule { 16 freeformType = lib.types.attrsOf utils.systemdUtils.unitOptions.unitOption; 17 options.KillUserProcesses = lib.mkOption { 18 default = false; 19 type = lib.types.bool; 20 description = '' 21 Specifies whether the processes of a user should be killed 22 when the user logs out. If true, the scope unit corresponding 23 to the session and all processes inside that scope will be 24 terminated. If false, the scope is "abandoned" 25 (see {manpage}`systemd.scope(5)`), 26 and processes are not killed. 27 28 See {manpage}`logind.conf(5)` for more details. 29 30 Defaulted to false in nixpkgs because many tools that rely on 31 persistent user processeslike `tmux`, `screen`, `mosh`, `VNC`, 32 `nohup`, and more would break by the systemd-default behavior. 33 ''; 34 }; 35 }; 36 default = { }; 37 example = { 38 KillUserProcesses = false; 39 HandleLidSwitch = "ignore"; 40 }; 41 }; 42 }; 43 44 config = { 45 systemd.additionalUpstreamSystemUnits = [ 46 "systemd-logind.service" 47 "autovt@.service" 48 "systemd-user-sessions.service" 49 ] 50 ++ lib.optionals config.systemd.package.withImportd [ 51 "dbus-org.freedesktop.import1.service" 52 ] 53 ++ lib.optionals config.systemd.package.withMachined [ 54 "dbus-org.freedesktop.machine1.service" 55 ] 56 ++ lib.optionals config.systemd.package.withPortabled [ 57 "dbus-org.freedesktop.portable1.service" 58 ] 59 ++ [ 60 "dbus-org.freedesktop.login1.service" 61 "user@.service" 62 "user-runtime-dir@.service" 63 ]; 64 65 environment.etc."systemd/logind.conf".text = '' 66 [Login] 67 ${utils.systemdUtils.lib.attrsToSection config.services.logind.settings.Login} 68 ''; 69 70 # Restarting systemd-logind breaks X11 71 # - upstream commit: https://cgit.freedesktop.org/xorg/xserver/commit/?id=dc48bd653c7e101 72 # - systemd announcement: https://github.com/systemd/systemd/blob/22043e4317ecd2bc7834b48a6d364de76bb26d91/NEWS#L103-L112 73 # - this might be addressed in the future by xorg 74 #systemd.services.systemd-logind.restartTriggers = [ config.environment.etc."systemd/logind.conf".source ]; 75 systemd.services.systemd-logind.restartIfChanged = false; 76 systemd.services.systemd-logind.stopIfChanged = false; 77 78 # The user-runtime-dir@ service is managed by systemd-logind we should not touch it or else we break the users' sessions. 79 systemd.services."user-runtime-dir@".stopIfChanged = false; 80 systemd.services."user-runtime-dir@".restartIfChanged = false; 81 }; 82 83 imports = 84 let 85 settingsRename = 86 old: new: 87 lib.mkRenamedOptionModule 88 [ "services" "logind" old ] 89 [ "services" "logind" "settings" "Login" new ]; 90 in 91 [ 92 (lib.mkRemovedOptionModule [ 93 "services" 94 "logind" 95 "extraConfig" 96 ] "Use services.logind.settings.Login instead.") 97 98 (settingsRename "killUserProcesses" "KillUserProcesses") 99 (settingsRename "powerKey" "HandlePowerKey") 100 (settingsRename "powerKeyLongPress" "HandlePowerKeyLongPress") 101 (settingsRename "rebootKey" "HandleRebootKey") 102 (settingsRename "rebootKeyLongPress" "HandleRebootKeyLongPress") 103 (settingsRename "suspendKey" "HandleSuspendKey") 104 (settingsRename "suspendKeyLongPress" "HandleSuspendKeyLongPress") 105 (settingsRename "hibernateKey" "HandleHibernateKey") 106 (settingsRename "hibernateKeyLongPress" "HandleHibernateKeyLongPress") 107 (settingsRename "lidSwitch" "HandleLidSwitch") 108 (settingsRename "lidSwitchExternalPower" "HandleLidSwitchExternalPower") 109 (settingsRename "lidSwitchDocked" "HandleLidSwitchDocked") 110 ]; 111}