#!/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 # 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: " - - " ####################################### tooltip="${default_sink} - ${rate} - ${codec}" ####################################### # 8) Imprimir en formato JSON para Waybar ####################################### echo "{\"text\":\"$text\",\"tooltip\":\"$tooltip\"}"