#!/usr/bin/env bash cache_dir=~/.cache/tmux cache_file=$cache_dir/system-info # Make sure the output directory exists. if [ ! -d $cache_dir ]; then mkdir -p $cache_dir fi # Cleanup cache file when interrupted. trap '[ -f $cache_file ] && rm $cache_file; exit' INT trap '[ -f $cache_file ] && rm $cache_file; exit' TERM if cat /proc/cpuinfo | grep -i intel > /dev/null; then cpu_temp_sensor="/intelcpu/0/temperature/0" elif cat /proc/cpuinfo | grep -i amd > /dev/null; then cpu_temp_sensor="/amdcpu/0/temperature/0" else return 1 fi while true; do # Assumes OpenHardwareMonitor is running and emitting data to WMI so we can # access it via the Windows hosts powershell.exe. raw_cpu_temp=$(powershell.exe -NoProfile \ "(Get-WmiObject -Namespace \"root/OpenHardwareMonitor\" -Query 'select Value from Sensor WHERE Identifier LIKE \"$cpu_temp_sensor\"').Value" \ | sed 's/\r//') cpu_temp=$(printf "%.1f°C" "$raw_cpu_temp") cpu_load=" `mpstat -P ALL -n 1 -u 1 -o JSON | \ jq '.sysstat.hosts[0].statistics[0]["cpu-load"][1:]|.[].idle' | \ awk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 11), 1) }'`" raw_battery=$(powershell.exe -NoProfile \ "(Get-WmiObject win32_battery).EstimatedChargeRemaining" \ | sed 's/\r//') if [ "" != "$raw_battery" ]; then battery=$(printf "%3d%%" "$raw_battery") fi echo "$cpu_temp$cpu_load$battery" > $cache_file # echo -e "HTTP/1.1 200 OK\n\n$cpu_temp $cpu_load" | nc -l -k -p 8080 -q 1; sleep 2 done