2025-06-24 20:14:07 +02:00

87 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
STATE_FILE="/tmp/waybar_temp_mode"
MODES=("cpu" "igpu" "dgpu")
# ¿Está activa la dGPU?
dgpu_is_active() {
# Comprueba el estado de energía de la NVIDIA
local status
status=$(cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status 2>/dev/null)
[[ "$status" == "active" ]]
}
get_dgpu_temp() {
if dgpu_is_active; then
# Usa nvidia-smi si la dGPU está activada
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits 2>/dev/null \
|| echo "N/A"
else
echo "N/A"
fi
}
get_cpu_temp() {
sensors \
| awk '/^Tctl:/ {print $2; exit}' \
| sed 's/+//;s/°C//'
}
get_igpu_temp() {
sensors \
| awk '/amdgpu/ {found=1} found && /edge:/ {print $2; exit}' \
| sed 's/+//;s/°C//'
}
get_nvme_temp() {
sensors \
| awk '/nvme/ {found=1} found && /Composite:/ {print $2; exit}' \
| sed 's/+//;s/°C//'
}
get_board_temp() {
# Temperatura de placa/ambiente (acpitz temp1)
sensors \
| awk '/acpitz-acpi-0/ {flag=1} flag && /temp1:/ {print $2; exit}' \
| sed 's/+//;s/°C//'
}
# --- Leer/rotar modo ---
current_mode="cpu"
[[ -f "$STATE_FILE" ]] && current_mode=$(<"$STATE_FILE")
if [[ "$1" == "click" ]]; then
for i in "${!MODES[@]}"; do
if [[ "${MODES[$i]}" == "$current_mode" ]]; then
next=$(( (i + 1) % ${#MODES[@]} ))
echo "${MODES[$next]}" > "$STATE_FILE"
exit 0
fi
done
fi
# --- Obtener todas las temperaturas ---
cpu=$(get_cpu_temp) && cpu=${cpu:-N/A}
igpu=$(get_igpu_temp) && igpu=${igpu:-N/A}
dgpu=$(get_dgpu_temp) && dgpu=${dgpu:-N/A}
nvme=$(get_nvme_temp) && nvme=${nvme:-N/A}
board=$(get_board_temp) && board=${board:-N/A}
# --- Escoge qué mostrar según modo ---
case "$current_mode" in
cpu) icon="CPU"; temp="$cpu" ;;
igpu) icon="iGPU"; temp="$igpu" ;;
dgpu) icon="dGPU"; temp="$dgpu" ;;
esac
# --- Tooltip multilínea ---
tooltip=$(printf \
"CPU: %sº\niGPU: %sº\ndGPU: %sº\nNVMe: %sº\nBoard: %sº" \
"$cpu" "$igpu" "$dgpu" "$nvme" "$board")
tooltip_escaped=$(printf "%s" "$tooltip" | jq -Rs .)
# --- Salida JSON para Waybar ---
echo "{\"text\": \"$icon: ${temp}º\", \"tooltip\": ${tooltip_escaped}}"