{ lib, config, pkgs, ... }: with lib; let cfg = config.modules.desktop.regreet; in { options.modules.desktop.regreet = { enable = mkEnableOption "Enable regreet, a clean and customizable greeter for greetd"; # TODO: add packages here? }; config = mkIf cfg.enable { services.displayManager.enable = true; services.greetd = { enable = true; settings = { # TODO: fix focus requiring a mouse click default_session = let swaymsg = "${pkgs.sway}/bin/swaymsg"; swayConfig = let monitors = config.modules.desktop.monitors; monitorConfig = if monitors.enable && (builtins.length monitors.monitors > 0) then let firstMonitor = builtins.head monitors.monitors; in '' output "${firstMonitor.name}" scale ${toString firstMonitor.scale} workspace 1 output "${firstMonitor.name}" for_window [all] move container to workspace 1 '' else ""; in command: pkgs.writeText "kiosk-sway-config" '' ${monitorConfig} xwayland disable exec '${swaymsg} workspace 1; ${command}; ${swaymsg} exit' ''; swayKiosk = command: "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.sway} --unsupported-gpu --config ${swayConfig command}"; in { command = swayKiosk (lib.getExe pkgs.regreet); }; }; }; programs.regreet = { enable = true; settings = { background = { path = "${../../assets/lockscreen.png}"; fit = "Cover"; }; }; font = with config.modules.desktop.fonts.fonts.sansSerif; { inherit size package; name = family; }; }; }; }