commit 6a776652daf2233fe3880a20818244d2166a3cfa
parent a3d413f319b5f43f695a0810b823246481311c65
Author: Michael Neuper <73108749+michaelneuper@users.noreply.github.com>
Date: Sun, 18 Dec 2022 13:04:30 +0200
Add polybar scripts
Diffstat:
3 files changed, 100 insertions(+), 1 deletion(-)
diff --git a/.config/polybar/scripts/get_mpris_status_mod.sh b/.config/polybar/scripts/get_mpris_status_mod.sh
@@ -0,0 +1,99 @@
+#!/bin/bash
+
+# The name of polybar bar which houses the main spotify module and the control modules.
+PARENT_BAR="${1:-music}"
+PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
+
+urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
+
+send_hook() {
+ [ -z "$1" ] && echo "send_hook: missing arg" && exit 1
+ polybar-msg hook mpris-play-pause "$1" 1>/dev/null 2>&1
+}
+
+
+extract_meta() {
+ grep "$1\W" <<< "$meta" | awk '{$1=$2=""; print $0}' | sed 's/^ *//; s/; */;/g' | paste -s -d/ -
+}
+
+# if "icon" given, determine icon. otherwise, print metadata
+get_info() {
+ if [ -z "$1" ]; then
+ echo "Usage: get_info PLAYER [icon]"
+ exit 1
+ fi
+
+ meta=$(playerctl -p "$1" metadata)
+
+ # get title
+ title=$(extract_meta title)
+ # if no title, try url e.g. vlc
+ if [ -z "$title" ]; then
+ title=$(extract_meta url)
+ title=$(urldecode "${title##*/}")
+ fi
+
+ # if not "icon", display information and return
+ if [ "$2" != "icon" ]; then
+ artist=$(extract_meta artist)
+ [ -z "$artist" ] && artist=$(extract_meta albumArtist)
+
+ if [ -n "$artist" ]; then
+ album=$(extract_meta album)
+ [ -n "$album" ] && echo -n " "
+
+ echo -n "$artist - "
+ fi
+
+ echo "$title"
+ return 0
+ fi
+
+ # determine icon:
+ # if player name is recognised, use it
+ case "$1" in
+ spotify* | vlc | mpv) echo "$1";;
+ kdeconnect*) echo "kdeconnect";;
+ chromium*)
+ # if a browser, search window titles:
+
+ # this tries to avoid title messing up the regex
+ regex_title=$(echo "$title" | tr "[:punct:]" ".")
+ windowname=$(xdotool search --name --class --classname "$regex_title" getwindowname 2>/dev/null)
+ case $windowname in
+ "") ;; # ignore if empty
+ *Netflix*) echo "ﱄ";;
+ *YouTube*) echo "";;
+ *"Prime Video"*) echo "";;
+ *"Corridor Digital"*) echo "corridor";;
+ *) echo "browser";;
+ esac;;
+ *) echo "none";;
+ esac
+}
+
+# manually go through players
+read -d'\n' -ra PLAYERS <<<"$(playerctl -l 2>/dev/null)"
+declare -a PAUSED
+for player in "${PLAYERS[@]}"; do
+ [ "$player" = "playerctld" ] && continue;
+
+ p_status=$(playerctl -p "$player" status 2>/dev/null)
+
+ # if we have one playing, we'll use it and EXIT
+ if [ "$p_status" = "Playing" ]; then
+ send_hook 1
+ get_info "$player" "$2"
+ exit 0;
+ fi
+
+ [ "$p_status" = "Paused" ] && PAUSED+=("$player")
+done
+
+# if we have a paused, show it otherwise assume there are no players or have all stopped
+if [ -n "${PAUSED[0]}" ]; then
+ send_hook 2
+ get_info "${PAUSED[0]}" "$2"
+else
+ [ "$2" = icon ] && echo "none" || echo " 鈴"
+fi
diff --git a/.config/polybar/scripts/scroll_mpris_status.sh b/.config/polybar/scripts/scroll_mpris_status.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-cmd="${0%/*}/get_mpris_status.sh $1"
+cmd="${0%/*}/get_mpris_status_mod.sh $1"
zscroll -l 50 \
--scroll-padding "$(printf ' %.0s' {1..8})" \
diff --git a/.config/polybar/scripts/scroll_mpris_status.sh b/.config/polybar/scripts/scroll_mpris_status_mod.sh