Last active
February 24, 2024 09:27
-
-
Save nicholascw/945d5ddc3b6724ef186de5a2697fe41e to your computer and use it in GitHub Desktop.
i3bar MPRIS control using zsh and playerctl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mpris_bar () { | |
echo '{"version":1, "click_events":true}' | |
echo '[' | |
echo '[]' | |
mpris_cur_player=0 | |
while :; | |
do | |
mpris_players=( $(playerctl -l) ) | |
num_of_players=$#mpris_players | |
if [[ $num_of_players -eq 0 ]]; then | |
echo ",[{\"full_text\":\"Nothing playing!\"}]" | |
sleep 1 | |
continue | |
fi | |
let 'mpris_cur_player %= num_of_players' | |
mpris_cur_player_name=${mpris_players[@]:$mpris_cur_player:1} | |
mpris_status=$(playerctl -p $mpris_cur_player_name metadata -f '{{status}}: {{ duration(position) }} / {{ duration(mpris:length) }}' | tr -d '\n' | jq -Rs) | |
mpris_playing=$(playerctl -p $mpris_cur_player_name status) | |
mpris_loop=$(playerctl -p $mpris_cur_player_name loop) | |
mpris_shuffle=$(playerctl -p $mpris_cur_player_name shuffle) | |
mpris_title=$(playerctl -p $mpris_cur_player_name metadata title | tr -d '\n' | jq -Rs) | |
mpris_artist=$(playerctl -p $mpris_cur_player_name metadata artist | tr -d '\n' | jq -Rs) | |
mpris_album=$(playerctl -p $mpris_cur_player_name metadata album | tr -d '\n' | jq -Rs) | |
#mpris_url=$(playerctl -p $mpris_cur_player_name metadata xesam:url) | |
playpause_txt="play!" | |
if [[ $mpris_playing = "Playing" ]] playpause_txt="pause" | |
player_name_output="Player: $mpris_cur_player_name ($(($mpris_cur_player+1))/$num_of_players)" | |
echo ",[" | |
echo "{\"name\":\"player\",\"full_text\":$(printf $player_name_output | tr -d '\n' | jq -Rs)}," | |
echo "{\"name\":\"status\",\"full_text\":$mpris_status}," | |
echo "{\"name\":\"title\",\"full_text\":$mpris_title}," | |
echo "{\"name\":\"album\",\"full_text\":$mpris_album}," | |
echo "{\"name\":\"artist\",\"full_text\":$mpris_artist}," | |
echo "{\"name\":\"playpause\",\"full_text\":\"$playpause_txt\"}," | |
echo "{\"name\":\"prev\",\"full_text\":\"prev\"}," | |
echo "{\"name\":\"next\",\"full_text\":\"next\"}," | |
echo "{\"name\":\"loop\",\"full_text\":\"loop: $mpris_loop\"}," | |
echo "{\"name\":\"shuffle\",\"full_text\":\"shuffle: $mpris_shuffle\"}" | |
echo "]" | |
clickevent="" | |
read -t 1 clickevent | |
event_name=$(echo $clickevent | grep -o '{.*' | jq '.name' | grep -Eo '[^"]*') | |
if [[ $event_name = "player" ]]; then | |
echo $clickevent >> /tmp/cur | |
mpris_players=( $(playerctl -l) ) | |
num_of_players=$#mpris_players | |
let 'mpris_cur_player += 1' | |
let 'mpris_cur_player %= num_of_players' | |
fi | |
if [[ $event_name = "status" ]]; then | |
playerctl -p $mpris_cur_player_name play-pause | |
fi | |
if [[ $event_name = "playpause" ]]; then | |
playerctl -p $mpris_cur_player_name play-pause | |
fi | |
if [[ $event_name = "prev" ]]; then | |
playerctl -p $mpris_cur_player_name previous | |
fi | |
if [[ $event_name = "next" ]]; then | |
playerctl -p $mpris_cur_player_name next | |
fi | |
if [[ $event_name = "loop" ]]; then | |
playerctl -p $mpris_cur_player_name loop toggle | |
fi | |
if [[ $event_name = "shuffle" ]]; then | |
playerctl -p $mpris_cur_player_name shuffle toggle | |
fi | |
#if [[ $event_name = "title" && ! -z $mpris_url ]]; then | |
# i3-msg exec firefox - $mpris_url | |
#fi | |
#if [[ $event_name = "album" && ! -z $mpris_url ]]; then | |
# i3-msg exec firefox - $mpris_url | |
#fi | |
#if [[ $event_name = "artist" && ! -z $mpris_url ]]; then | |
# i3-msg exec firefox - $mpris_url | |
#fi | |
#if [[ $event_name = "title" && ! -z $mpris_url ]]; then | |
# i3-msg exec firefox - $mpris_url | |
#fi | |
done | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment