diff options
Diffstat (limited to '.config/waybar/scripts/catloop.sh')
| -rwxr-xr-x | .config/waybar/scripts/catloop.sh | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/.config/waybar/scripts/catloop.sh b/.config/waybar/scripts/catloop.sh new file mode 100755 index 0000000..1de3bb8 --- /dev/null +++ b/.config/waybar/scripts/catloop.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +set -euo pipefail + +CPU_USAGE=0.0 +SLEEP_AFTER=4 + +AWAKE_FRAMES=($(eval echo {A..E})) +SLEEP_FRAMES=($(eval echo {G..N})) + +COUNT=0 + +read_cpu() { + awk '/^cpu /{ + user=$2; nice=$3; sys=$4; idle=$5; + active = user + nice + sys; + total = active + idle; + printf "%d %d\n", active, total; + exit + }' /proc/stat +} + +read prev_active prev_total < <(read_cpu) + +while true; do + + read active total < <(read_cpu) + + delta_active=$((active - prev_active)) + delta_total=$((total - prev_total)) + + if [ "$delta_total" -le 0 ] || [ "$delta_active" -lt 0 ]; then + utilization="0.0000" + else + utilization=$(awk -v a="$delta_active" -v t="$delta_total" 'BEGIN { printf "%.4f", (a / t) }') + fi + + CPU_USAGE=$utilization + + SPEED=$(awk -v u="$CPU_USAGE" 'BEGIN { printf "%.2f", 1 / (4 + (u * 100)) }') + # clip minimum speed + if (( $(echo "$SPEED < 0.03" | bc -l) )); then + SPEED=0.03 + fi + + ### MAKE THE CAT SLEEP IF CPU USAGE IS LOW after SLEEP_AFTER ### + if (( $(echo "$CPU_USAGE < 0.02" | bc -l) )); then + COUNT=$((COUNT + 1)) + else + COUNT=0 + fi + + ### CAT IS SLEEPING ### + if [ $COUNT -ge $SLEEP_AFTER ]; then + for s in "${SLEEP_FRAMES[@]}";do + echo $s + sleep $SPEED + done + + ### CAT IS AWAKE ### + else + for i in "${AWAKE_FRAMES[@]}";do + echo $i + sleep $SPEED + done + + fi + + prev_active=$active + prev_total=$total +done + +# vim: set ts=2 sw=2 |
