dotfiles/.local/bin/pwrate2.sh
2025-05-28 18:33:04 +02:00

87 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#######################################
# 1) Obtener el nombre del sink por defecto
#######################################
default_sink="$(pactl get-default-sink)"
if [ -z "$default_sink" ]; then
echo '{"text":"","tooltip":"No default sink"}'
exit 0
fi
#######################################
# 2) Guardar pw-dump en un JSON temporal
#######################################
tmpfile="/tmp/pwdump.json"
pw-dump > "$tmpfile" 2>/dev/null
#######################################
# 3) Hallar el ID del Node cuyo node.name == default_sink
#######################################
sink_id="$(
jq -r --arg name "$default_sink" '
.[]
| select(.info.props["node.name"] == $name)
| .id
' "$tmpfile"
)"
if [ -z "$sink_id" ] || [ "$sink_id" = "null" ]; then
echo '{"text":"","tooltip":"Default sink node not found"}'
exit 0
fi
#######################################
# 4) Extraer la tasa de muestreo desde pw-dump
#######################################
rate="$(
jq -r --argjson id "$sink_id" '
.[]
| select(.id == $id)
| (.info.params.Format[].rate // 0)
' "$tmpfile"
)"
#######################################
# 5) Obtener la info detallada del Node con pw-cli info <sink_id>
# y extraer el códec (api.bluez5.codec)
#######################################
pw_cli_info="$(pw-cli info "$sink_id" 2>/dev/null)"
codec="$(echo "$pw_cli_info" \
| grep -F 'api.bluez5.codec' \
| sed -E 's/.*= "(.*)".*/\1/'
)"
# Si no se encontró nada, marcamos como N/A
[ -z "$codec" ] && codec="N/A"
[ -z "$rate" ] && rate="0"
# Si la tasa es 0, no mostrar nada en Waybar
if [ "$rate" = "0" ]; then
echo '{"text": "", "tooltip": ""}'
exit 0
fi
#######################################
# 6) Construir el texto principal de Waybar
# Ej.: "48000 Hz (APTX)" si es aptX/LDAC; si no, "48000 Hz"
#######################################
if [[ "$codec" =~ ^(aptx|aptX|ldac|LDAC|sbc|SBC)$ ]]; then
text="${rate} Hz (${codec^^})"
else
text="${rate} Hz"
fi
#######################################
# 7) Tooltip con: "<sink_name> - <rate> - <codec>"
#######################################
tooltip="${default_sink} - ${rate} - ${codec}"
#######################################
# 8) Imprimir en formato JSON para Waybar
#######################################
echo "{\"text\":\"$text\",\"tooltip\":\"$tooltip\"}"