{ pkgs , config , lib , ... }: with lib; let cfg = config.eboskma.greetd; steamCfg = config.programs.steam; style = builtins.readFile ./greetd.css; swaySession = pkgs.writeShellScript "sway-session" '' ${pkgs.sway}/bin/sway --unsupported-gpu ''; steam-gamescope = let exports = builtins.attrValues (builtins.mapAttrs (n: v: "export ${n}=${v}") steamCfg.gamescopeSession.env); in pkgs.writeShellScriptBin "steam-gamescope" '' ${builtins.concatStringsSep "\n" exports} gamescope --steam ${toString steamCfg.gamescopeSession.args} -- steam -tenfoot -pipewire-dmabuf ''; envVars = concatStringsSep " " (builtins.attrNames config.environment.sessionVariables); in { options.eboskma.greetd = { enable = mkEnableOption "enable greetd"; sway = mkEnableOption "sway"; steam = mkEnableOption "steam"; wayvnc = mkEnableOption "wayvnc"; wallpaper = mkOption { description = "Path to an image to use as wallpaper"; type = types.path; }; }; config = mkIf cfg.enable { services.greetd = { enable = true; restart = true; settings = { default_session = { command = "${pkgs.sway}/bin/sway --unsupported-gpu --config /etc/greetd/sway-config"; }; }; }; programs.regreet = { enable = false; settings = { background = { path = cfg.wallpaper; fit = "Cover"; }; GTK = { application_prefer_dark_theme = true; theme_name = "elementary"; cursor_theme = "elementary"; icon_theme_name = "elementary"; font_name = "Iosevka Aile 16"; }; commands = { reboot = [ "systemctl" "reboot" ]; poweroff = [ "systemctl" "poweroff" ]; }; }; }; security.pam.services.greetd.u2fAuth = false; # exec "${pkgs.greetd.regreet}/bin/regreet; swaymsg exit" networking.firewall.allowedTCPPorts = lib.mkIf cfg.wayvnc [ 5900 ]; environment = { systemPackages = with pkgs; [ pantheon.elementary-gtk-theme pantheon.elementary-icon-theme ]; etc = { "greetd/sway-config" = { text = lib.concatStringsSep "\n" ((lib.optional cfg.wayvnc "exec ${pkgs.wayvnc}/bin/wayvnc -g 0.0.0.0") ++ [ '' exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l -s /etc/greetd/gtkgreet.css -b ${cfg.wallpaper}; swaymsg exit" include /etc/sway/config.d/* '' ]); user = "greeter"; group = "greeter"; }; "greetd/environments" = { text = concatStringsSep "\n" ((optional cfg.sway "${swaySession}") ++ (optional cfg.steam "${steam-gamescope}") ++ [ "${pkgs.bash}/bin/bash" ]); user = "greeter"; group = "greeter"; }; "greetd/gtkgreet.css" = { text = style; user = "greeter"; group = "greeter"; }; "sway/config.d/systemd-env.conf" = { text = '' exec_always --no-startup-id systemctl --user import-environment ${envVars} exec_always --no-startup-id dbus-update-activation-environment --systemd ${envVars} ''; }; "xdg/gtk-3.0/settings.ini" = { text = generators.toINI { } { Settings = { gtk-theme-name = "elementary"; gtk-icon-theme-name = "elementary"; gtk-cursor-theme-name = "elementary"; gtk-application-prefer-dark-theme = "true"; }; }; }; "xdg/gtk-4.0/settings.ini" = { text = generators.toINI { } { Settings = { gtk-theme-name = "elementary"; gtk-icon-theme-name = "elementary"; gtk-cursor-theme-name = "elementary"; gtk-application-prefer-dark-theme = "true"; }; }; }; }; }; }; }