Add hypridle and hyprlock

This commit is contained in:
alejandro-angulo 2025-08-17 22:27:12 -07:00
parent e19b036d3f
commit 389b051a7a
Signed by: alejandro-angulo
GPG key ID: 75579581C74554B6
4 changed files with 246 additions and 1 deletions

View file

@ -0,0 +1,110 @@
{
config,
pkgs,
lib,
namespace,
...
}:
let
inherit (lib)
mkIf
mkEnableOption
mkOption
types
;
cfg = config.${namespace}.services.hypridle;
in
{
options.${namespace}.services.hypridle = {
enable = mkEnableOption "hypridle";
lockTimeout = mkOption {
type = types.int;
default = 300;
description = ''
Timeout in seconds before locking the screen
'';
};
displayTimeout = mkOption {
type = types.int;
default = 330;
description = ''
Timeout in seconds before turning off the display
'';
};
suspendTimeout = mkOption {
type = types.int;
default = 1800;
description = ''
Timeout in seconds before suspending the system
'';
};
brightnessTimeout = mkOption {
type = types.int;
default = 150;
description = ''
Timeout in seconds before dimming screen brightness
'';
};
lockCommand = mkOption {
type = types.str;
default = "${pkgs.hyprlock}/bin/hyprlock";
description = ''
Command to run when locking the screen
'';
};
};
config = mkIf cfg.enable {
home.packages = [ pkgs.hypridle ];
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || ${cfg.lockCommand}";
before_sleep_cmd = "loginctl lock-session";
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
ignore_systemd_inhibit = false;
};
listener = [
# Dim screen brightness
{
timeout = cfg.brightnessTimeout;
on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -s set 10";
on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -r";
}
# Turn off keyboard backlight (if available)
{
timeout = cfg.brightnessTimeout;
on-timeout = "${pkgs.brightnessctl}/bin/brightnessctl -sd rgb:kbd_backlight set 0";
on-resume = "${pkgs.brightnessctl}/bin/brightnessctl -rd rgb:kbd_backlight";
}
# Lock screen
{
timeout = cfg.lockTimeout;
on-timeout = "loginctl lock-session";
}
# Turn off display
{
timeout = cfg.displayTimeout;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on && ${pkgs.brightnessctl}/bin/brightnessctl -r";
}
# Suspend system
{
timeout = cfg.suspendTimeout;
on-timeout = "systemctl suspend";
}
];
};
};
};
}