
CLI Pomodoro App
Bash
A simple bash pomodoro script for productivity. Feature a clean minimal CLI UI, with progress bar and progress %
Use:
Can be initiated with the following commands:
- ./pomodoro "d" | for default settings (25min work interval, 5min break, 20min long break)
- ./pomodoro [work interval (min)] [break interval (mins)] [long break interval (mins)]
- ./pomodoro | Will prompt you to enter in work/break/long break intervals
- Default settings can be changed by editting global DEFAULT variables
- Intervals can be changed during breaks once a pomodoro sesion has started
Development + Implementation
During my time coding in the terminal with NeoVim, I thought that it would be nice to have my pomodoro app also run within the terminal.
Thus I created a simple CLI pomodoro app with bash, so that it could be used within any linux distro without different exports
#!/bin/bash# Bash Pomodoro Timer by Bob Pham# Inputs to be inputed as either 'd' for default or 'timer_length' 'break_length'# Time in minutes for readabilityDEFAULT_LENGTH=25DEFAULT_BREAK=5DEFAULT_LONG_BREAK=20DEFAULT_FOR_LONG_BREAK=4DEFAULT_TIMER_CHARACTER="d"DEFAULT_BREAK_CHARACTER="s"TIMER_LENGTH=1BREAK_LENGTH=1LONG_BREAK=1COUNT=1function timer () { SLEEP_TIME=$(( $TIMER_LENGTH/100 )) for (( i=1; i <= 99 ; i++ )) do echo -n "Pomodoro in Progress... [" for (( j=0; j<=$i; j++ )) do echo -n "█" done for (( j=$i; j<=99;j++ )) do echo -n " " done echo -n "]" $i "% Done" $'\r' sleep $SLEEP_TIME done REMAINDER=$(( $(( $TIMER_LENGTH%100 )) + $SLEEP_TIME )) echo -n "Pomodoro in Progress... [" for (( j=0; j<=99; j++ )) do echo -n "█" done echo -n " ] 99% Done" $'\r' sleep $REMAINDER echo -n "Pomodoro in Progress... [" for (( j=0; j<=100; j++ )) do echo -n "█" done echo -n "] 100% Done!" $'\r' COUNT=$(( $COUNT+1 )) pomodoro_break_prompt}function break_timer () { SLEEP_TIME=$(( $1/100 )) for (( i=1; i <= 99 ; i++ )) do echo -n "Break in Progress... [" for (( j=0; j<=$i; j++ )) do echo -n "█" done for (( j=$i; j<=99;j++ )) do echo -n " " done echo -n "]" $i "% Done" $'\r' sleep $SLEEP_TIME done REMAINDER=$(( $(( $1%100 )) + $SLEEP_TIME )) echo -n "Break in Progress... [" for (( j=0; j<=99; j++ )) do echo -n "█" done echo -n " ] 99% Done" $'\r' sleep $REMAINDER echo -n "Break in Progress... [" for (( j=0; j<=100; j++ )) do echo -n "█" done echo -n "] 100% Done!" $'\r' clear pomodoro_start_prompt}function pomodoro_start_prompt () { while true do read -p "Enter 's' to start your pomodoro timer " INPUT if [ $INPUT == $DEFAULT_BREAK_CHARACTER ] then break fi echo "Invalid Input" done clear timer}function pomodoro_break_prompt () { clear echo $COUNT while true do read -p "Enter 's' to start your break " INPUT if [ $INPUT == $DEFAULT_BREAK_CHARACTER ] then break fi echo "Invalid Input" done if [ $COUNT -eq $DEFAULT_FOR_LONG_BREAK ] then COUNT=1 clear echo "RUNNING" break_timer $LONG_BREAK else clear break_timer $BREAK_LENGTH fi}function pomodoro_init () { read -p "Enter 'd' for default time or 'timer_length' 'break_length' " VAR1 VAR2 VAR3 if [[ $VAR1 == $DEFAULT_TIMER_CHARACTER ]] then TIMER_LENGTH=$(($DEFAULT_LENGTH*60)) BREAK_LENGTH=$(($DEFAULT_BREAK*60)) LONG_BREAK=$(($DEFAULT_LONG_BREAK*60)) else TIMER_LENGTH= $(($VAR1*60)) BREAK_LENGTH=$(($VAR2*60)) LONG_BREAK=$(($VAR3*60)) fi clear pomodoro_start_prompt}if [[ $1 == $DEFAULT_TIMER_CHARACTER ]]then TIMER_LENGTH=$(($DEFAULT_LENGTH*60)) BREAK_LENGTH=$(($DEFAULT_BREAK*60)) LONG_BREAK=$(($DEFAULT_LONG_BREAK*60)) timerelif [[ "$1" -eq 0 ]] && [[ "$2" -eq 0 ]];then pomodoro_initelse TIMER_LENGTH=$(($1*60)) BREAK_LENGTH=$(($2*60)) LONG_BREAK=$(($3*60)) timerfi