nixos-configs/modules/greetd/default.nix

127 lines
3.1 KiB
Nix
Raw Normal View History

2023-11-22 15:33:16 -05:00
{
lib,
pkgs,
config,
...
2024-01-22 11:09:37 -05:00
}: let
2024-02-05 12:00:25 -05:00
inherit (lib) optionals readFile;
inherit (config.vars) mainUser greetdDupe mainMonitor;
# Nix stuff
isNvidia = config.hardware.nvidia.modesetting.enable;
isTouchscreen = config.hardware.sensor.iio.enable;
2023-11-25 03:24:12 -05:00
2023-12-09 20:29:33 -05:00
hyprland =
config
.home-manager
.users
.${mainUser}
.wayland
.windowManager
.hyprland
.finalPackage;
hyprBin = "${hyprland}/bin";
2024-02-05 12:00:25 -05:00
ags = config.home-manager.users.${mainUser}.programs.ags.package;
agsBin = "${ags}/bin";
# Show Regreet on all monitors
dupeMonitors = pkgs.writeShellScriptBin "dupeMonitors" ''
main="${mainMonitor}"
names=($(${hyprBin}/hyprctl -j monitors | ${pkgs.jq}/bin/jq -r '.[] .description'))
if [[ "$main" == "null" ]]; then
main="''${names[0]}"
fi
for (( i=0; i<''${#names[@]}; i++ )); do
name=$(echo "''${names[$i]}" | sed 's/.*(\(.*\))/\1/')
desc=$(echo "''${names[$i]}" | sed 's/ (.*//')
if [[ "$name" != "$main" && "desc:$desc" != "$main" ]]; then
${hyprBin}/hyprctl keyword monitor "$name",preferred,auto,1,mirror,"$main"
fi
done
'';
2024-02-05 12:00:25 -05:00
# Check if user wants the greeter only on main monitor
setupMonitors =
if (mainMonitor != "null" && !greetdDupe)
then "${hyprBin}/hyprctl dispatch focusmonitor ${mainMonitor}"
else "${dupeMonitors}/bin/dupeMonitors";
2024-02-05 12:00:25 -05:00
# Setup Hyprland as the greeter's compositor
hyprConf =
pkgs.writeText "greetd-hypr-config"
(lib.strings.concatStrings ((optionals isNvidia [
"env = LIBVA_DRIVER_NAME,nvidia\n"
"env = XDG_SESSION_TYPE,wayland\n"
"env = GBM_BACKEND,nvidia-drm\n"
"env = __GLX_VENDOR_LIBRARY_NAME,nvidia\n"
"env = WLR_NO_HARDWARE_CURSORS,1\n"
])
++ [
"exec-once = ${setupMonitors} && sleep 0.1 &&"
2024-02-05 12:00:25 -05:00
" swww init --no-cache &&"
" swww img -t none ${pkgs.dracula-theme}/wallpapers/waves.png\n"
"${readFile ./hyprland.conf}\n"
2023-10-19 17:05:13 -04:00
"exec-once = ${agsBin}/ags -b greeter --config ${./greetd.js};"
" ${hyprBin}/hyprctl dispatch exit"
]));
2023-10-19 17:05:13 -04:00
in {
2024-02-05 12:00:25 -05:00
# Add home folder for home-manager to work
users.users.greeter = {
home = "/var/lib/greeter";
createHome = true;
};
2024-02-05 12:00:25 -05:00
home-manager.users.greeter = {
imports = [
../../common/vars
../../home/theme.nix
];
2024-02-05 12:00:25 -05:00
home.packages = with pkgs; [
swww
gtk3
glib
];
2023-10-19 17:05:13 -04:00
2024-02-05 12:00:25 -05:00
vars = config.vars;
home.stateVersion = "24.05";
2023-10-19 17:05:13 -04:00
};
services = {
xserver = {
displayManager = {
sessionPackages = [hyprland];
};
libinput.enable = true;
wacom.enable = isTouchscreen;
};
greetd = {
enable = true;
settings = {
default_session = {
command = "${hyprBin}/Hyprland --config ${hyprConf}";
user = "greeter";
};
initial_session = {
command = "${hyprBin}/Hyprland";
user = mainUser;
};
2023-10-19 17:05:13 -04:00
};
};
};
# unlock GPG keyring on login
services.gnome.gnome-keyring.enable = true;
security.pam.services.greetd.enableGnomeKeyring = true;
}