diff options
Diffstat (limited to '.local/bin/caffeine')
-rwxr-xr-x | .local/bin/caffeine | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/.local/bin/caffeine b/.local/bin/caffeine new file mode 100755 index 0000000..10b26e0 --- /dev/null +++ b/.local/bin/caffeine @@ -0,0 +1,118 @@ +#!/bin/sh + +cfpid="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/caffeine.pid" + +usage() +{ + cat <<- EOF + Usage: ${0##*/} [ -s ] [ -t timeout ] + Keep your computer awake + + Options: + -s silent or quiet mode + -t <timeout in minutes> + + EOF +} + +note() +{ + command -v notify-send > /dev/null && + notify-send " caffeine" "$1" +} + +die() +{ + note "err: $1" + printf "\033[31;1merr: %b\033[0m\n" "$1" 1>&2 + exit "${2:-1}" +} + +dep_check() +{ + : "${1:?}" + + for dep; do + command -v "$dep" > /dev/null || + die "${dep} not installed" + done + + unset dep +} + +set_menu() +{ + if [ -n "$WAYLAND_DISPLAY" ]; then + menu="wmenu" + elif [ -n "$DISPLAY" ]; then + menu="dmenu" + else + die "can't be ran from tty, setup xorg or wayland" + fi +} + +caf_time() +{ + dep_check "$menu" + + printf "1\n3\n5\n10\n15\n30" | "$menu" -p " sleep after " +} + +drink() +{ + # usage: drink <time in mins> + : "${1:?}" + disp= + + dep_check swayidle wlr-randr brightnessctl swaylock + + [ -s "$cfpid" ] && + kill "$(cat "$cfpid")" + + disp="$(wlr-randr | grep -om1 '^[^ ]*')" + swayidle \ + timeout "$(($1 - 5))" "brightnessctl --save; brightnessctl set 10%-" \ + resume "brightnessctl --restore" \ + timeout "$1" "wlr-randr --output ${disp} --off; swaylock" \ + resume "wlr-randr --output ${disp} --on --adaptive-sync enabled" & + echo $! > "$cfpid" + + [ "$silent" != true ] && + note "$(uname -n) will sleep after $(($1 / 60)) m of inactivity" +} + +######## +# MAIN # +######## + +timeout= +silent= +menu= + +set_menu + +while getopts "t:sh" f; do + case "$f" in + t) + timeout="$OPTARG" + ;; + s) + silent=true + ;; + h) + usage + exit + ;; + ?) + printf "try '%s -h' for more information\n" "${0##*/}" + exit 1 + ;; + esac +done + +[ -z "$timeout" ] && + timeout="$(caf_time)" +[ "$((timeout))" -le 0 ] && + die "invalid input time" + +drink "$((timeout * 60))" |