143 lines
4.4 KiB
Nix
143 lines
4.4 KiB
Nix
{
|
|
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.defaultMonitor}";
|
|
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.defaultMonitorScale}";
|
|
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 = "${config.conf.defaultMonitorMode}";
|
|
example = "3440x1440@180";
|
|
type = lib.types.str;
|
|
description = ''
|
|
Resolution/refreshrate used by the monitor in the login screen.
|
|
'';
|
|
};
|
|
environments = lib.mkOption {
|
|
default = [
|
|
inputs.hyprland.packages.${config.conf.system}.hyprland
|
|
];
|
|
# no idea if these are written correctly
|
|
example = [
|
|
pkgs.niri
|
|
pkgs.river
|
|
pkgs.swayfx
|
|
];
|
|
type = with lib.types; listOf package;
|
|
description = ''
|
|
List of environments that should be available in the login prompt.
|
|
'';
|
|
};
|
|
regreet = {
|
|
customSettings = lib.mkOption {
|
|
default = {};
|
|
example = {};
|
|
type = with lib.types; attrsOf anything;
|
|
description = ''
|
|
Custom regret settings. See https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml for more information.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
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 = ''
|
|
${inputs.hyprland.packages.${config.conf.system}.hyprland} & waitPID=$!
|
|
'';
|
|
}
|
|
];
|
|
|
|
# greetd display manager
|
|
programs.hyprland.enable = true;
|
|
services = {
|
|
displayManager.sessionPackages = config.mods.greetd.environments;
|
|
greetd = {
|
|
enable = true;
|
|
settings = {
|
|
terminal.vt = 1;
|
|
default_session = session;
|
|
};
|
|
};
|
|
};
|
|
|
|
# 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 = ''
|
|
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
|
|
}
|
|
|
|
misc {
|
|
disable_splash_rendering = false
|
|
disable_hyprland_logo = false
|
|
}
|
|
|
|
env="HYPRCURSOR_THEME,${config.mods.stylix.cursor.name}"
|
|
env="HYPRCURSOR_SIZE,${toString config.mods.stylix.cursor.size}"
|
|
env=XCURSOR_THEME,${config.mods.stylix.cursor.name}
|
|
env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size}
|
|
env=QT_QPA_PLATFORMTHEME,qt5ct
|
|
|
|
exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css --config /home/${username}/.config/regreet/regreet.toml; hyprctl dispatch exit
|
|
'';
|
|
|
|
# unlock GPG keyring on login
|
|
security.pam.services.greetd.enableGnomeKeyring = true;
|
|
security.pam.services.greetd.sshAgentAuth = true;
|
|
security.pam.sshAgentAuth.enable = true;
|
|
}
|
|
// lib.optionalAttrs (options ? home) {
|
|
xdg.configFile."regreet/regreet.toml".source =
|
|
(pkgs.formats.toml {}).generate "regreet"
|
|
config.mods.greetd.regreet.customSettings;
|
|
}
|
|
);
|
|
}
|