#!/usr/bin/env bash # --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- # Player selection — prefer actively playing player player=$(playerctl -l 2>/dev/null | while read -r p; do st=$(playerctl --player="$p" status 2>/dev/null) [ "$st" = "Playing" ] && echo "$p" && break done) [ -z "$player" ] && player=$(playerctl -l 2>/dev/null | head -n1) if [ -z "$player" ]; then jq -c -n '{text: "", tooltip: "", class: "inactive"}' exit 0 fi status=$(playerctl --player="$player" status 2>/dev/null) if [ "$status" != "Playing" ] && [ "$status" != "Paused" ]; then jq -c -n '{text: "", tooltip: "", class: "inactive"}' exit 0 fi artist=$(playerctl --player="$player" metadata artist 2>/dev/null) title=$(playerctl --player="$player" metadata title 2>/dev/null) album=$(playerctl --player="$player" metadata album 2>/dev/null) art=$(playerctl --player="$player" metadata mpris:artUrl 2>/dev/null) length=$(playerctl --player="$player" metadata mpris:length 2>/dev/null) position=$(playerctl --player="$player" position 2>/dev/null) # Progress percentage — pure bash, no bc needed if [ -n "$length" ] && [ -n "$position" ] && [ "$length" -gt 0 ] 2>/dev/null; then pos_us=$(echo "$position" | awk '{printf "%d", $1 * 1000000}') progress=$(( pos_us * 100 / length )) else progress=0 fi # Spotify device device="" if [[ "$player" == *"spotify"* ]]; then device=$(playerctl --player="$player" metadata xesam:url 2>/dev/null | grep -o 'device=[^&]*' | cut -d= -f2) fi # Icon if [ "$status" = "Paused" ]; then icon="⏸ " else icon="▶ " fi # Scrolling ticker CACHE_FILE="/tmp/waybar_media_scroll_${player//\//_}" full_text="${artist} — ${title}" text_len=${#full_text} display_len=30 # Reset scroll offset when track changes TRACK_FILE="/tmp/waybar_media_track_${player//\//_}" last_track="" [ -f "$TRACK_FILE" ] && last_track=$(cat "$TRACK_FILE") if [ "$full_text" != "$last_track" ]; then echo "0" > "$CACHE_FILE" echo "$full_text" > "$TRACK_FILE" fi if [ "$text_len" -le "$display_len" ]; then text="$full_text" else offset=0 [ -f "$CACHE_FILE" ] && offset=$(cat "$CACHE_FILE") padded="${full_text} ${full_text}" text="${padded:$offset:$display_len}" next_offset=$(( (offset + 1) % (text_len + 4) )) echo "$next_offset" > "$CACHE_FILE" fi # Build tooltip tooltip="Artist: ${artist} Title: ${title} Album: ${album}" if [ -n "$device" ]; then tooltip="${tooltip} 󰓻 ${device}" fi tooltip="${tooltip}" jq -c -n \ --arg text "${icon}${text}" \ --arg tooltip "$tooltip" \ --arg class "$player" \ --arg art "$art" \ '{text: $text, tooltip: $tooltip, class: $class, alt: $art}'