Created
January 4, 2023 16:28
-
Star
(259)
You must be signed in to star a gist -
Fork
(30)
You must be signed in to fork a gist
-
-
Save bashbunni/3880e4194e3f800c4c494de286ebc1d7 to your computer and use it in GitHub Desktop.
CLI Pomodoro for Linux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# study stream aliases | |
# Requires https://github.com/caarlos0/timer to be installed. spd-say should ship with your distro | |
declare -A pomo_options | |
pomo_options["work"]="45" | |
pomo_options["break"]="10" | |
pomodoro () { | |
if [ -n "$1" -a -n "${pomo_options["$1"]}" ]; then | |
val=$1 | |
echo $val | lolcat | |
timer ${pomo_options["$val"]}m | |
spd-say "'$val' session done" | |
fi | |
} | |
alias wo="pomodoro 'work'" | |
alias br="pomodoro 'break'" |
How can i add this to my timer, i.e. where should i place this file?
I modified the script a bit just to adjust the duration and added a custom .wav that you could replace with whatever you wanted.
Not sure if this was the best way to go about it all so if I have done anything in a long winded way I would love some feedback.
I made an adjusted version, so you do not have to restart the timer manually and after 4 iterations a longer break is set - and you get notifications :)
pomodoro() {
typeset -A pomo_options
pomo_options["work"]=${1:-25}
pomo_options["break"]=${2:-5}
pomo_options["long_break"]=${3:-15}
local current_phase="work"
if [[ "$1" == "break" ]]; then
current_phase="break"
fi
local pomodoro_count=0
trap - INT
while true; do
local duration_key
local notification_title
local notification_text
local notification_speaker
if [[ "$current_phase" == "work" ]]; then
pomodoro_count=$((pomodoro_count + 1))
duration_key="work"
notification_title="🍅 Session done"
notification_text="It is now time to take a <b>BREAK</b>!"
notification_speaker="Break time"
else
if (( (pomodoro_count % 4) == 0 && pomodoro_count > 0 )); then
echo "Taking a LONG BREAK!" | lolcat
duration_key="long_break"
else
duration_key="break"
fi
notification_title="🧘 Break over"
notification_text="Time to get back to <b>WORK</b>"
notification_speaker="Work time"
fi
echo "$current_phase" | lolcat
timer ${pomo_options["$duration_key"]}m
local timer_exit_status=$?
if [[ "$timer_exit_status" -ne 0 ]]; then
echo "Pomodoro stopped."
break
fi
notify-send -u normal -t 3000 -i alarm "$notification_title" "$notification_text"
spd-say -t male3 -r -10 -p -100 "$notification_speaker"
if [[ "$current_phase" == "work" ]]; then
current_phase="break"
else
current_phase="work"
fi
done
exit
}
alias pomo="pomodoro"
alias wo="pomodoro"
alias br="pomodoro break"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is quite good.
Also, a suggestion of mine is that it would be nice if we can add like a "TODO" list along with it.