1 files changed,
74 insertions(+),
0 deletions(-)
A
bin/pomodoro
ยทยทยท 1 +#!/usr/bin/bash 2 +# credits: https://github.com/gpanders/dotfiles/blob/master/.local/bin/pomodoro 3 + 4 +usage() { 5 + echo "Usage: $(basename "$0") [focus time] [short break] [long break]" 6 +} 7 + 8 +if [ "$1" = "-h" ]; then 9 + usage 10 + exit 0 11 +fi 12 + 13 +focus_time=${1:-25} 14 +short_break=${2:-5} 15 +long_break=${3:-15} 16 + 17 +# Ensure all arguments are numbers 18 +case $focus_time$short_break$long_break in 19 + *[!0-9]*) 20 + echo "Arguments must be positive integer numbers" >&2 21 + usage >&2 22 + exit 1 23 + ;; 24 +esac 25 + 26 +notify() { 27 + echo "$1" 28 + if command -v terminal-notifier >/dev/null 2>&1; then 29 + terminal-notifier -title 'Pomodoro' -message "$1" 30 + elif command -v notify-send >/dev/null 2>&1; then 31 + notify-send "$1" 32 + fi 33 +} 34 + 35 +countdown() { 36 + timer=$(($1 * 60)) 37 + while true; do 38 + minutes=$((timer / 60)) 39 + seconds=$((timer - 60*minutes)) 40 + printf '\e[0K\r' # Clear current line 41 + printf 'Remaining: %02d:%02d' "$minutes" "$seconds" 42 + 43 + [ $timer -eq 0 ] && break 44 + timer=$((timer - 1)) 45 + sleep 1 46 + done 47 + printf '\n' 48 +} 49 + 50 +while true; do 51 + notify "Focus for $focus_time minutes" 52 + countdown "$focus_time" 53 + 54 + notify "Take a short break for $short_break minutes (1/4)" 55 + countdown "$short_break" 56 + 57 + notify "Focus for $focus_time minutes" 58 + countdown "$focus_time" 59 + 60 + notify "Take a short break for $short_break minutes (2/4)" 61 + countdown "$short_break" 62 + 63 + notify "Focus for $focus_time minutes" 64 + countdown "$focus_time" 65 + 66 + notify "Take a short break for $short_break minutes (3/4)" 67 + countdown "$short_break" 68 + 69 + notify "Focus for $focus_time minutes" 70 + countdown "$focus_time" 71 + 72 + notify "Take a long break for $long_break minutes (4/4)" 73 + countdown "$long_break" 74 +done