{ pkgs, ... } : { home.packages = with pkgs; [ hyprlock hypridle wlogout ]; home.file = { lock = { source = ../assets/lock.png; target = ".lock.png"; }; }; services = { # hypridle to # 150 seconds - turn of monitor # 300 seconds - lock screen # 330 seconds - turn of monitor # 30 minutes - put to sleep hypridle = { enable = true; settings = { general = { lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances. before_sleep_cmd = "loginctl lock-session"; # lock before suspend. after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display. }; listener = [ { timeout = 150; # 2.5min. on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor. on-resume = "brightnessctl -r"; # monitor backlight restore. } { timeout = 300; # 5min on-timeout = "loginctl lock-session"; # lock screen when timeout has passed } { timeout = 330; # 5.5min on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed on-resume = "hyprctl dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired. } { timeout = 1800; # 30min on-timeout = "systemctl suspend"; # suspend pc } ]; }; }; }; programs.wlogout = { enable = true; layout = [ { "label" = "lock"; "action" = "hyprlock"; "text" = "Lock"; "keybind" = "l"; } { "label" = "shutdown"; "action" = "systemctl poweroff"; "text" = "Shutdown"; "keybind" = "s"; } { "label" = "suspend"; "action" = "systemctl suspend"; "text" = "Suspend"; "keybind" = "u"; } { "label" = "reboot"; "action" = "systemctl reboot"; "text" = "Reboot"; "keybind" = "r"; } { "label" = "hibernate"; "action" = "systemctl hibernate"; "text" = "Hibernate"; "keybind" = "h"; } { "label" = "reboot"; "action" = "systemctl reboot"; "text" = "Reboot"; "keybind" = "r"; } ]; }; catppuccin.wlogout.iconStyle = "wleave"; programs.hyprlock = { enable = true; settings = { auth = { fingerprint = { enabled = true; }; }; background = { path = "~/.lock.png"; color = "$base"; }; label = { monitor = ""; text = "$TIME"; color = "$text"; font_size = 90; position = "0, 0"; halign = "center"; valign = "top"; }; input-field = { monitor = ""; size = "300, 60"; outline_thickness = 4; dots_size = 0.2; dots_spacing = 0.2; dots_center = true; outer_color = "$accent"; inner_color = "$surface0"; font_color = "$text"; fade_on_empty = true; placeholder_text = ''󰌾 Logged in as $USER''; hide_input = false; check_color = "$accent"; fail_color = "$red"; fail_text = ''$FAIL ($ATTEMPTS)''; capslock_color = "$yellow"; position = "0, -47"; halign = "center"; valign = "center"; }; }; }; catppuccin.hyprlock.enable = true; catppuccin.hyprlock.flavor = "mocha"; catppuccin.hyprlock.accent = "blue"; catppuccin.hyprlock.useDefaultConfig = false; # we use our own }