dot

NixOS dotfiles
git clone https://git.echoz.io/dot.git
Log | Files | Refs

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 }