Skip to content

Instantly share code, notes, and snippets.

@lelanthran
Last active September 13, 2022 06:40
Show Gist options
  • Save lelanthran/bbbcf5c8b6b26c9bc0263384a22b4f61 to your computer and use it in GitHub Desktop.
Save lelanthran/bbbcf5c8b6b26c9bc0263384a22b4f61 to your computer and use it in GitHub Desktop.
basic pomodoro clock, requires wmctrl and zenity
#!/bin/bash
#
# vim: ts=3:sw=3:et
#
# Pomodoro - Basic Pomodoro Clock
# Copyright 2022 Lelanthran Manickum
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
function die () {
echo "$@"
exit 127
}
[ -z "`which zenity`" ] && die "Zenity not installed in path"
export MYMINUTES=$1
if [ -z "$MYMINUTES" ]; then
export MYMINUTES="
`zenity --entry \
--title='Pomodoro' \
--text='Enter number of minutes' \
--entry-text='25'`"
export MYMINUTES=`echo $MYMINUTES | grep -E "[0-9]"`
[ -z "$MYMINUTES" ] && die "User cancelled action"
fi
export TOTALSECONDS=$(($MYMINUTES * 60))
export MYSECONDS=$(($MYMINUTES * 60))
export PROGRESS=0;
export STICKY=0
export TITLE="Pomodoro: $TOTALSECONDS second timeout"
export EXPIRES_AT=$((`date +"%s"` + $TOTALSECONDS))
export EXPIRES_AT=`date -d "@$EXPIRES_AT" +"%R; %B-%d, %Y"`
while [ $MYSECONDS -ge 0 ]; do
if [ $PROGRESS -ge 1 ]; then
wmctrl -r "$TITLE" -b add,above
wmctrl -r "$TITLE" -t -1
fi
echo $PROGRESS
echo '# ' $MYSECONDS 'secs until ' $EXPIRES_AT
export MYSECONDS=$(($MYSECONDS - 1))
export PROGRESS=$(($TOTALSECONDS - $MYSECONDS))
export PROGRESS=$(($PROGRESS * 100))
export PROGRESS=$(($PROGRESS / $TOTALSECONDS))
sleep 1
done | zenity --progress\
--width=400\
--title="Pomodoro: $TOTALSECONDS second timeout"\
--auto-close\
--no-cancel
zenity --warning\
--width=400\
--title="Pomodoro: $TOTALSECONDS second timeout"\
--text="Pomodoro $TOTALSECONDS Expired" &
sleep 1
zenity --notification\
--title="Pomodoro: $TOTALSECONDS second timeout"\
--text="Pomodoro $TOTALSECONDS Expired"
wmctrl -a "Pomodoro: $TOTALSECONDS second timeout"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment