dotfiles

Linux and macOS dotfiles
git clone https://github.com/michaelneuper/dotfiles.git
README | Files | Log | Refs

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:
A.config/polybar/scripts/get_mpris_status_mod.sh | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M.config/polybar/scripts/scroll_mpris_status.sh | 2+-
C.config/polybar/scripts/scroll_mpris_status.sh -> .config/polybar/scripts/scroll_mpris_status_mod.sh | 0
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