{ povSelf, config, lib, pkgs, ... }: let inherit (lib) types; cfg = lib.getAttrFromPath povSelf config; in { options = { enable = { type = types.bool; default = false; }; greeter = { type = types.enum [ "tuigreet" ]; default = "tuigreet"; }; autoLogin = { enable = { type = types.bool; default = false; }; user.type = types.str; command.type = types.str; }; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { security.pam.services.greetd = { fprintAuth = false; # This would break gnome-keyring auto unlocking fprintAuthSkipLidClose = false; enableGnomeKeyring = true; }; services.greetd = { enable = true; settings = { default_session.user = "greeter"; }; }; } (lib.mkIf cfg.autoLogin.enable { services.greetd.settings = { initial_session = { inherit (cfg.autoLogin) user command; }; }; }) (lib.mkIf (cfg.greeter == "tuigreet") { modules.filesystem.impermanence.system.dirs = [ { directory = "/var/cache/tuigreet"; mode = "755"; user = "greeter"; group = "greeter"; } ]; systemd.tmpfiles.settings."greetd" = { "/var/cache/tuigreet" = { d = { mode = "755"; user = "greeter"; group = "greeter"; }; }; }; services.greetd.settings = { default_session = { command = lib.concatStringsSep " " [ (lib.getExe pkgs.greetd.tuigreet) "--no-xsession-wrapper" "--remember" "--remember-session" "--time" "--user-menu" "--asterisks" "--power-shutdown" "'systemctl poweroff'" "--power-reboot" "'systemctl reboot'" ]; }; }; }) ] ); }