Waybar timer

Hey,
I recently made a timer script for my waybar. Maybe someone else may want to use it, so here it is.
Also, is there maybe another way of doing it or does anyone have suggestions on how to make it a bit better?

Put this inside the waybar config file:

"custom/timer": {
    "tooltip": false,
    "min-length": 5,
    "exec": "$HOME/.config/waybar/modules/timer.sh",
    "on-click": "date --date='5 minutes' +%s > /var/tmp/waybar_timer",
    "on-click-right": "echo READY > /var/tmp/waybar_timer",
    "on-click-middle": "date --date='1 minute' +%s > /var/tmp/waybar_timer",
    "on-scroll-up": "date --date='5 seconds' +%s > /var/tmp/waybar_timer",
    "on-scroll-down": "date --date='30 minutes' +%s > /var/tmp/waybar_timer",
    "interval": 1
}

Put this into $HOME/.config/waybar/modules/timer.sh or make changes according to another path inside the waybar config file. Also you need a timer.wav sound file.

#!/bin/sh

CUR_TIME=$(date +%s)
STATUS=$(cat /var/tmp/waybar_timer)

if [ $STATUS == "READY" ]; then
	echo ""
elif [ $STATUS == "FINISHED" ]; then
    mpv $HOME/.config/waybar/modules/timer.wav &
	echo "READY" > /var/tmp/waybar_timer
	echo ""
elif [[ $STATUS > $CUR_TIME ]]; then
	DIFF=$(( (STATUS - CUR_TIME) ))
	echo $( date -d @$DIFF +%M:%S )
else
	if [ -f "/var/tmp/waybar_timer" ]; then
		echo "FINISHED" > /var/tmp/waybar_timer
		echo ""
	else
		echo "READY" > /var/tmp/waybar_timer
		echo ""
	fi
fi
4 Likes

Here is a suggestion for improvement from me. To use the mouse scroll keys for a gradual increase (in my case in 5 minute increments) create the following additional script waybar-timer-steps.sh

#!/bin/bash

TIMER_FILE="/var/tmp/waybar_timer"

case "$1" in
    up)
        if [ -f "$TIMER_FILE" ] && [ "$(cat "$TIMER_FILE")" != "READY" ]; then
           
            CURRENT_TIMER=$(cat "$TIMER_FILE")
        else

            CURRENT_TIMER=$(date +%s)
        fi

        if [ "$CURRENT_TIMER" != "READY" ]; then
            NEW_TIMER=$((CURRENT_TIMER + 5 * 60))
     
            echo $NEW_TIMER > "$TIMER_FILE"
        fi

        echo $(date -d @$CURRENT_TIMER +%M:%S)
        ;;

    down)

        if [ -f "$TIMER_FILE" ] && [ "$(cat "$TIMER_FILE")" != "READY" ]; then

            CURRENT_TIMER=$(cat "$TIMER_FILE")
        else

            CURRENT_TIMER=$(date +%s)
        fi

        NEW_TIMER=$((CURRENT_TIMER - 5 * 60))

        if [ "$NEW_TIMER" -lt "$CURRENT_TIMER" ]; then

            echo "$NEW_TIMER" > "$TIMER_FILE"
           
            echo $(date -d @"$NEW_TIMER" +%M:%S)
        else
            
            echo "READY" > "$TIMER_FILE"
        fi
        ;;

    *)
        echo "Ungültige Option ausgewählt. Bitte wähle up oder down."
        ;;
esac

And change your waybar module configuration like this:

"custom/timer": {
    "tooltip": false,
    "min-length": 5,
    "exec": "$HOME/.config/waybar/modules/timer.sh",
    "on-click": "date --date='30 minutes' +%s > /var/tmp/waybar_timer",
    "on-click-right": "echo READY > /var/tmp/waybar_timer",
    "on-click-middle": "date --date='1 minute' +%s > /var/tmp/waybar_timer",
    "on-scroll-up": "$HOME/.config/waybar/modules/waybar-timer-steps.sh up",
    "on-scroll-down": "$HOME/.config/waybar/modules/waybar-timer-steps.sh down",
    "interval": 1
},
1 Like