CLI Pomodoro App

CLI Pomodoro App

GithubGithub
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 readability
DEFAULT_LENGTH=25
DEFAULT_BREAK=5
DEFAULT_LONG_BREAK=20
DEFAULT_FOR_LONG_BREAK=4
DEFAULT_TIMER_CHARACTER="d"
DEFAULT_BREAK_CHARACTER="s"
TIMER_LENGTH=1
BREAK_LENGTH=1
LONG_BREAK=1
COUNT=1
function 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))
	timer
elif [[ "$1" -eq 0 ]] && [[ "$2" -eq 0 ]];
then
	pomodoro_init
else 
	TIMER_LENGTH=$(($1*60))
	BREAK_LENGTH=$(($2*60))
	LONG_BREAK=$(($3*60))
	timer
fi