mirror of
https://github.com/gburd/nix-config.git
synced 2024-11-20 10:36:25 +00:00
55 lines
2 KiB
Nix
55 lines
2 KiB
Nix
|
{ pkgs, lib, config, ... }:
|
||
|
|
||
|
let
|
||
|
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
|
||
|
pgrep = "${pkgs.procps}/bin/pgrep";
|
||
|
pactl = "${pkgs.pulseaudio}/bin/pactl";
|
||
|
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
|
||
|
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
|
||
|
|
||
|
isLocked = "${pgrep} -x ${swaylock}";
|
||
|
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
|
||
|
|
||
|
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
|
||
|
afterLockTimeout = { timeout, command, resumeCommand ? null }: [
|
||
|
{ timeout = lockTime + timeout; inherit command resumeCommand; }
|
||
|
{ command = "${isLocked} && ${command}"; inherit resumeCommand timeout; }
|
||
|
];
|
||
|
in
|
||
|
{
|
||
|
services.swayidle = {
|
||
|
enable = true;
|
||
|
systemdTarget = "graphical-session.target";
|
||
|
timeouts =
|
||
|
# Lock screen
|
||
|
[{
|
||
|
timeout = lockTime;
|
||
|
command = "${swaylock} -i ${config.wallpaper} --daemonize";
|
||
|
}] ++
|
||
|
# Mute mic
|
||
|
(afterLockTimeout {
|
||
|
timeout = 10;
|
||
|
command = "${pactl} set-source-mute @DEFAULT_SOURCE@ yes";
|
||
|
resumeCommand = "${pactl} set-source-mute @DEFAULT_SOURCE@ no";
|
||
|
}) ++
|
||
|
# Turn off RGB
|
||
|
(lib.optionals config.services.rgbdaemon.enable (afterLockTimeout {
|
||
|
timeout = 20;
|
||
|
command = "systemctl --user stop rgbdaemon";
|
||
|
resumeCommand = "systemctl --user start rgbdaemon";
|
||
|
})) ++
|
||
|
# Turn off displays (hyprland)
|
||
|
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
|
||
|
timeout = 40;
|
||
|
command = "${hyprctl} dispatch dpms off";
|
||
|
resumeCommand = "${hyprctl} dispatch dpms on";
|
||
|
})) ++
|
||
|
# Turn off displays (sway)
|
||
|
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
|
||
|
timeout = 40;
|
||
|
command = "${swaymsg} 'output * dpms off'";
|
||
|
resumeCommand = "${swaymsg} 'output * dpms on'";
|
||
|
}));
|
||
|
};
|
||
|
}
|