#!/bin/sh NOW=$(date +%s) debounce () { local -n VAR_REFERENCE=$1 # Funky Bash Pass-by-reference here! VAR_NAME="$1" DEBOUNCE_TIME="$2" FUNCTION=$3 FALLBACK=$4 if [ ! -f "/tmp/debounce-$VAR_NAME" ]; then VAR_REFERENCE="$FUNCTION" echo "$(date +%s)" > "/tmp/debounce-$VAR_NAME" else LAST_CHECK=$(cat "/tmp/debounce-$VAR_NAME") if [ $(($NOW - $LAST_CHECK)) -gt $DEBOUNCE_TIME ]; then VAR_REFERENCE="$FUNCTION" echo "$(date +%s)" > "/tmp/debounce-$VAR_NAME" else VAR_REFERENCE="$FALLBACK" fi fi } get_mouse_text () { MOUSE_DETAILS=$(rivalcfg --battery-level) MOUSE_STATUS=$(echo $MOUSE_DETAILS | cut -d' ' -f1) MOUSE_BATTERY=$(echo $MOUSE_DETAILS | cut -d']' -f2 | tr -d '[:space:]') if [ "$MOUSE_STATUS" != 'Discharging' ] && [ "$MOUSE_STATUS" != 'Charging' ]; then cat /tmp/last-mouse-level else if [ $MOUSE_STATUS == 'Discharging' ]; then MOUSE_STATUS_EMOJI='🐁' else MOUSE_STATUS_EMOJI='⚡' fi echo "$MOUSE_STATUS_EMOJI $MOUSE_BATTERY" > /tmp/last-mouse-level cat /tmp/last-mouse-level fi } get_monero_text () { MONERO_DETAILS=$(monerod status | grep "Height") MONERO_PERCENT=$(echo $MONERO_DETAILS | cut -d" " -f3 | tr -d "()") if [ -n "$MONERO_DETAILS" ]; then echo "🟢 $MONERO_PERCENT" > /tmp/last-monero-value else echo "🔴" > /tmp/last-monero-value fi cat /tmp/last-monero-value } debounce MOUSE_STRING 3600 \ "$(get_mouse_text)" \ "$(cat /tmp/last-mouse-level || get_mouse_text)"; debounce MONERO_STRING 60 \ "$(get_monero_text)" \ "$(cat /tmp/last-monero-value || get_monero_text)"; echo "| $MOUSE_STRING | $MONERO_STRING |"