hypridle.nix (3481B)
1 { 2 lib, 3 pkgs, 4 5 user, 6 ... 7 }: 8 { 9 home-manager.users.${user} = 10 { config, ... }: 11 { 12 options.services.hypridle = { 13 brightnessDevice = lib.mkOption { 14 type = with lib.types; nullOr str; 15 default = null; 16 }; 17 }; 18 19 config = { 20 home.packages = [ pkgs.brightnessctl ]; 21 22 wayland.windowManager.hyprland.settings.bind = [ "$mod, Delete, exec, loginctl lock-session" ]; 23 24 services.hypridle = 25 let 26 cfg = config.services.hypridle; 27 in 28 { 29 enable = true; 30 31 settings = { 32 general = { 33 lock_cmd = builtins.toString ( 34 pkgs.writeShellScript "lock" '' 35 pidof hyprlock || hyprlock 36 '' 37 ); 38 before_sleep_cmd = "loginctl lock-session"; 39 after_sleep_cmd = "hyprctl dispatch dpms on"; 40 }; 41 42 listener = [ 43 { 44 timeout = 1; 45 on-resume = builtins.toString ( 46 pkgs.writeShellScript "dpms-on" '' 47 hyprctl dispatch dpms on 48 '' 49 ); 50 } 51 { 52 timeout = 30; 53 on-timeout = builtins.toString ( 54 pkgs.writeShellScript "manual-lock-dpms-off" '' 55 pidof hyprlock && hyprctl dispatch dpms off 56 '' 57 ); 58 } 59 { 60 timeout = 300; 61 on-timeout = builtins.toString ( 62 pkgs.writeShellScript "auto-lock" '' 63 loginctl lock-session 64 '' 65 ); 66 } 67 { 68 timeout = 330; 69 on-timeout = builtins.toString ( 70 pkgs.writeShellScript "auto-lock-dpms-off" '' 71 hyprctl dispatch dpms off 72 '' 73 ); 74 } 75 ] 76 ++ (lib.optionals (cfg.brightnessDevice != null) ( 77 let 78 dev = lib.escapeShellArg cfg.brightnessDevice; 79 in 80 [ 81 { 82 timeout = 1; 83 on-resume = builtins.toString ( 84 pkgs.writeShellScript "undim" '' 85 brightnessctl -d ${dev} -r 86 '' 87 ); 88 } 89 { 90 timeout = 10; 91 on-timeout = builtins.toString ( 92 pkgs.writeShellScript "manual-lock-dim" '' 93 save="$(brightnessctl -d ${dev} -m | awk -F, '{if ($4 != "10%") {print "-s"; exit}}')" 94 pidof hyprlock && brightnessctl -d ${dev} $save set 10% 95 '' 96 ); 97 } 98 { 99 timeout = 60; 100 on-timeout = builtins.toString ( 101 pkgs.writeShellScript "auto-dim" '' 102 save="$(brightnessctl -d ${dev} -m | awk -F, '{if ($4 != "10%") {print "-s"; exit}}')" 103 brightnessctl -d ${dev} $save set 10% 104 '' 105 ); 106 } 107 ] 108 )); 109 }; 110 }; 111 }; 112 }; 113 }