{ config, lib, inputs, pkgs, options, ... }: { options.mods = { greetd = { enable = lib.mkOption { default = true; example = false; type = lib.types.bool; description = '' Enables the greetd login manager. ''; }; monitor = lib.mkOption { default = "${config.conf.monitor}"; example = "eDP-1"; type = lib.types.str; description = '' main monitor for the login screen. By default the main monitor is used. ''; }; scale = lib.mkOption { default = "${config.conf.scale}"; example = "1.5"; type = lib.types.str; description = '' Scale used by the monitor in the login screen. By default the scale of the main monitor is used. ''; }; resolution = lib.mkOption { default = "auto"; example = "3440x1440@180"; type = lib.types.str; description = '' Resolution/refreshrate used by the monitor in the login screen. ''; }; environments = lib.mkOption { default = '' Hyprland ''; # no idea if these are written correctly example = '' Niri River ''; type = lib.types.lines; description = '' List of environments that should be available in the login prompt. ''; }; }; }; config = let username = config.conf.username; session = { command = "${ lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland } --config /etc/greetd/hyprgreet.conf"; user = username; }; in lib.mkIf config.mods.greetd.enable ( lib.optionalAttrs (options ? environment) { services.xserver.displayManager.session = [ { manage = "desktop"; name = "Hyprland"; start = '' ${lib.getExe pkgs.hyprland} & waitPID=$! ''; } ]; # greetd display manager programs.hyprland.enable = true; services.greetd = { enable = true; settings = { terminal.vt = 1; default_session = session; }; }; environment.etc."greetd/environments".text = config.mods.greetd.environments; # should technically be the same, but this is configured instead in order to provide a decent out of the box login experience. environment.etc."greetd/hyprgreet.conf".text = '' exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale} monitor=,disable input { kb_layout = ${config.mods.xkb.layout} kb_variant = ${config.mods.xkb.variant} force_no_accel = true } cursor { enable_hyprcursor = false } misc { disable_splash_rendering = false disable_hyprland_logo = false } env=XCURSOR_THEME,${config.mods.stylix.cursor.name} env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size} exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css; hyprctl dispatch exit ''; # unlock GPG keyring on login security.pam.services.greetd.enableGnomeKeyring = true; } ); }