#!/bin/bash # i3blocks CPU monitor, zero-fork per invocation. # # Reads /proc/loadavg and /sys/class/hwmon/*/temp*_input directly instead # of forking `sensors | awk | tr` and `echo | bc`. Pure bash builtins. set -u # Locate AMD k10temp or Intel coretemp hwmon node. hwmon='' for d in /sys/class/hwmon/hwmon*/; do [[ -r ${d}name ]] || continue read -r n < "${d}name" case $n in k10temp | coretemp) hwmon=$d break ;; esac done temp='N/A' temp_int=-1 if [[ -n $hwmon && -r ${hwmon}temp1_input ]]; then read -r milli < "${hwmon}temp1_input" temp_int=$((milli / 1000)) temp=$temp_int fi load='N/A' load_x100=0 if [[ -r /proc/loadavg ]]; then read -r one _ < /proc/loadavg load=$one # loadavg prints two decimals, e.g. "1.23" → 123, "0.05" → 5. load_digits=${one//./} load_digits=${load_digits##0} load_x100=$((10#${load_digits:-0})) fi color='#FFFFFF' if ((temp_int >= 0)); then if ((temp_int < 65)); then color='#50FA7B' elif ((temp_int < 85)); then color='#F1FA8C' else color='#FF5555' fi elif ((load_x100 > 0)); then if ((load_x100 < 100)); then color='#50FA7B' elif ((load_x100 < 200)); then color='#F1FA8C' else color='#FF5555' fi fi # CPU icon. Plain Unicode, not a Font Awesome PUA codepoint: the fonts named # in the i3 bar's pango string are not installed, so PUA glyphs fall through to # whatever random font claims them (this one used to render as a tiny box). printf '🖥 %s°C, %s\n' "$color" "$temp" "$load"