diff --git a/nixos/modules/services/remEYEnder/default.nix b/nixos/modules/services/remEYEnder/default.nix index 4d3b5cd..c4708ae 100644 --- a/nixos/modules/services/remEYEnder/default.nix +++ b/nixos/modules/services/remEYEnder/default.nix @@ -2,8 +2,6 @@ let cfg = config.sisyphus.services.remEYEnder; - - icon = ./vecteezy_eyes-line-icon-vector-isolated_13932670.jpg; in { options.sisyphus.services.remEYEnder.enable = lib.mkEnableOption "Eye reminder"; @@ -13,10 +11,10 @@ in { enable = true; description = "Send an eye reminder"; serviceConfig.Type = "oneshot"; - script = '' - # Display reminder for 20 seconds. - ${pkgs.libnotify}/bin/notify-send -t 20000 --icon=${icon} "RemEYEnder" "Look away from your screen :)" - ''; + script = builtins.readFile ./remEYEnder.sh; + path = with pkgs; [ + libnotify + ]; }; timers.remEYEnder = { enable = true; diff --git a/nixos/modules/services/remEYEnder/remEYEnder.sh b/nixos/modules/services/remEYEnder/remEYEnder.sh new file mode 120000 index 0000000..57d41ce --- /dev/null +++ b/nixos/modules/services/remEYEnder/remEYEnder.sh @@ -0,0 +1 @@ +../../../../scripts/remEYEnder.sh \ No newline at end of file diff --git a/scripts/remEYEnder.sh b/scripts/remEYEnder.sh new file mode 100644 index 0000000..c6dd482 --- /dev/null +++ b/scripts/remEYEnder.sh @@ -0,0 +1,30 @@ +DURATION=20 # How long it takes to progress the bar fully +STEPS=100 # In how many steps to progress (> 0) + +# Trick to fake decimals +EXP=3 +interval_ms="$(( "${DURATION}" * ( 10 ** "${EXP}" ) / "${STEPS}" ))" +padded_interval_ms="$(printf "%0${EXP}d" "${interval_ms}")" +interval_s="${padded_interval_ms:0:-${EXP}}.${padded_interval_ms:-${EXP}}" + +end_time="$(( "$( date '+%s' )" + "${DURATION}" + 1 ))" + +# notify-send args +replace_id="${end_time}" +expire_time="$(( "${interval_ms}" + 1 ))" # To avoid flickering + +counter=0 +while [[ "${end_time}" -gt "$( date '+%s' )" ]]; do + # Remap to [0, 100] + remaining_part="$(( ("${STEPS}" - "${counter}") * 100 / "${STEPS}" ))" + + notify-send \ + 'Look away from your screen :)' 'RemEYEnder' \ + --hint="int:value:${remaining_part}" \ + --category='sysinfo' \ + --replace-id="${replace_id}" \ + --expire-time="${expire_time}" + + counter="$(( "${counter}" + 1 ))" + sleep "${interval_s}" +done