add spotify status to polybar

This commit is contained in:
Lucas Barbieri 2024-06-17 20:17:15 -03:00
parent 564c7bdf37
commit 479de0597d
2 changed files with 155 additions and 1 deletions

View File

@ -28,8 +28,9 @@ padding-right = 2
module-margin = 1
font-0 = CartographCF Nerd Font;2
font-1 = SauceCodePro Nerd Font:size=16;3
modules-left = xworkspaces
modules-left = xworkspaces spotify-title spotify-prev spotify-playpause spotify-next
modules-right = tray xwindow pulseaudio
modules-center = date
@ -98,4 +99,39 @@ label-foreground = ${colors.primary}
screenchange-reload = true
pseudo-transparency = true
[module/spotify-title]
type = custom/script
tail = true
format-prefix = " "
interval = 2
exec = ~/.config/polybar/spotify.sh --scroll
click-left = kitty spt
click-right = playerctl --player=spotifyd metadata --format "{{ xesam:url }}" | xclip -selection clipboard
[module/spotify-prev]
type = custom/text
content = "󰼨 "
content-padding = 0
content-spacing = 0
content-margin = 0
click-left = ~/.config/polybar/spotify.sh --previous
[module/spotify-next]
type = custom/text
content = "󰼧 "
content-padding = 0
content-spacing = 0
content-margin = 0
click-left = ~/.config/polybar/spotify.sh --next
[module/spotify-playpause]
type = custom/text
content = "󰐎 "
content-padding = 0
content-spacing = 0
content-margin = 0
click-left = ~/.config/polybar/spotify.sh --play-pause
; vim:ft=dosini

View File

@ -0,0 +1,118 @@
#!/bin/bash
# Author : https://github.com/Crash-Zeus
readonly command=$1
# Set the source audio player here.
# Examples: spotify, vlc, chrome, mpv and others.
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
readonly PLAYER="spotify"
# Delay (in seconds) for scrolling update; lower this for faster scrolling
readonly ZSCROLL_DELAY="0.3"
# Time in seconds to wait in between running update checking commands
# Make also a "pause" in scroll but its just due by playerctl hang time to get informations
readonly ZSCROLL_UPDATE_DELAY="2"
# if display text lenght > number the text is going to scroll
readonly ZSCROLL_LENGTH="20"
function get_status() {
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status)
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
STATUS=$PLAYERCTL_STATUS
else
STATUS="No player is running"
fi
}
function get_metadata() {
DATA=$(playerctl --player=$PLAYER metadata --format "$1")
echo $DATA
}
function display_data() {
if [ "$STATUS" = "Stopped" ]; then
echo "No music is playing"
elif [ "$STATUS" = "Paused" ]; then
get_metadata "Paused"
elif [ "$STATUS" = "No player is running" ]; then
echo "$STATUS"
else
get_metadata "{{ title }} by {{ artist }}"
fi
}
function display_status() {
if [ "$STATUS" = "Stopped" ]; then
echo ""
elif [ "$STATUS" = "Paused" ]; then
echo ""
elif [ "$STATUS" = "No player is running" ]; then
echo ""
else
echo ""
fi
}
function exec_player_command() {
readonly CMD=$1
playerctl --player=$PLAYER $CMD
}
case $command in
"--get-infos")
get_status
display_data
;;
"--get-status")
get_status
display_status
;;
"--scroll")
$0 --get-infos | zscroll -d $ZSCROLL_DELAY -U $ZSCROLL_UPDATE_DELAY -l $ZSCROLL_LENGTH -u true "`dirname $0`/spotify.sh --get-infos"
# -d update scroll delay
# -U launch update command delay
# -l length of scrolling text
# -u Update command
;;
"--play-pause")
get_status
if [ "$STATUS" = "Playing" ] ; then
exec_player_command pause
elif [ "$STATUS" = "Paused" ] ; then
exec_player_command play
elif [ "$STATUS" = "Stopped" ] ; then
exec_player_command play
fi
;;
"--next")
exec_player_command next
;;
"--previous")
exec_player_command previous
;;
*)
echo "No command specified."
echo ""
echo "Available commands :"
echo "--get-infos Get the song name if playing or return No playing song / Paused"
echo "--get-status Get the current status of player like Playing | Stopped | Paused but return icon"
echo "--scroll Display the song metadata with zscroll to scroll text"
echo "--play-pause Execute play or pause command (depend on playerctl status)"
echo "--next Execute next command"
echo "--previous Execute previous command"
exit 0
;;
esac