#!/usr/bin/env bash # ╔╦╗ ╦ ╦ ╔═╗ ╦ ╔═╗ # ║║║ ║ ║ ╚═╗ ║ ║ # ╩ ╩ ╚═╝ ╚═╝ ╩ ╚═╝ # author Niraj # github niraj998 # ┌─┐┌─┐┌┐┌┌─┐┬┌─┐┬ ┬┬─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐ # │ │ ││││├┤ ││ ┬│ │├┬┘├─┤ │ ││ ││││└─┐ # └─┘└─┘┘└┘└ ┴└─┘└─┘┴└─┴ ┴ ┴ ┴└─┘┘└┘└─┘ # uncomment your music players below. # Control="not_MPD" # [ -n "$(pgrep spotify)" ] && Control="spotify" [ -n "$(pgrep brave-bin)" ] && Control="brave-bin" # [ -n "$(pgrep rhythmbox)" ] && Control="rhythmbox" # [ -n "$(pgrep audacious)" ] && Control="audacious" # [ -n "$(pgrep clementine)" ] && Control="clementine" # [ -n "$(pgrep strawberry)" ] && Control="strawberry" # saves covers here Cover=/tmp/music.jpg # if cover not found in metadata use this instead bkpCover=~/.config/eww/music.png # mpd music directory mpddir="$HOME/Music/iTunes Media" # ┌─┐┬ ┌─┐┬ ┬┌─┐┬─┐┌─┐┌┬┐┬ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐ # ├─┘│ ├─┤└┬┘├┤ ├┬┘│ │ │ └─┐│ ├┬┘│├─┘ │ └─┐ # ┴ ┴─┘┴ ┴ ┴ └─┘┴└─└─┘ ┴ ┴─┘ └─┘└─┘┴└─┴┴ ┴ └─┘ ########################## Title ########################## title() { title=$(playerctl metadata --format {{title}}) [ -z "$title" ] && title="Play Something" echo "$title" } ########################## Artist ########################## artist() { artist=$(playerctl metadata --format {{artist}}) [ -z "$artist" ] && artist="Artist" echo "$artist" } ########################## Album ########################## album() { album=$(playerctl metadata --format {{album}}) [ -z "$album" ] && album="Album" echo "$album" } ########################## Status ########################## status() { status=$(playerctl status) [ -z "$status" ] && status="Stopped" echo "$status" } ########################## Time ########################## ctime() { time=$(playerctl position --format "{{ duration(position) }}") [ -z "$time" ] && time="0:00" echo "$time" } ########################## Length ########################## length() { length=$(playerctl metadata --format "{{ duration(mpris:length) }}") [ -z "$length" ] && length="0:00" echo "$length" } ########################## trackNumber ########################## playlist() { playlist=$(playerctl metadata xesam:trackNumber) [ -z "$playlist" ] && playlist="0" echo "$playlist" } ########################## Cover ########################## cover() { albumart="$(playerctl metadata mpris:artUrl | sed -e 's/open.spotify.com/i.scdn.co/g')" [ $(playerctl metadata mpris:artUrl) ] && curl -s "$albumart" --output /tmp/fuck.png || cp $bkpCover $Cover convert /tmp/fuck.png $Cover echo "$Cover" } ########################## Statusicon ########################## statusicon() { icon="" [ $(playerctl status) = "Playing" ] && icon="" [ $(playerctl status) = "Paused" ] && icon="" echo "$icon" } ########################## Lyrics ########################## lyrics() { Title=$(playerctl metadata --format {{title}}) Artist=$(playerctl metadata --format {{artist}}) URL="https://api.lyrics.ovh/v1/$Artist/$Title" lyrics=$(curl -s "$(echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics') [ "$lyrics" = "null" ] && lyrics=$(curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title") printf "$lyrics" | less } # ┌┬┐┌─┐┌┬┐ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐┌─┐ # │││├─┘ ││ └─┐│ ├┬┘│├─┘ │ └─┐ # ┴ ┴┴ ─┴┘ └─┘└─┘┴└─┴┴ ┴ └─┘ ########################## Title ########################## mpctitle() { title=$(mpc -f %title% current) [ -z "$title" ] && title="Play Something" echo "$title" } ########################## Artist ########################## mpcartist() { artist=$(mpc -f %artist% current) [ -z "$artist" ] && artist="Artist" echo "$artist" } ########################## Album ########################## mpcalbum() { album=$(mpc -f %album% current) [ -z "$album" ] && album="Album" echo "$album" } ########################## Cover ########################## mpccover() { ffmpeg -i "$mpddir"/"$(mpc current -f %file%)" "${Cover}" -y || cp $bkpCover $Cover echo "$Cover" && exit } ########################## Time ########################## mpctime() { time=$(mpc status %currenttime%) [ -z "$time" ] && time="0:00" echo "$time" } ########################## Length ########################## mpclength() { length=$(mpc status %totaltime%) [ -z "$length" ] && length="0:00" echo "$length" } ########################## Icon ########################## mpcicon() { status=$(mpc status | head -2 | tail -1 | cut -c2-7) icon="" [ "$status" = "playin" ] && icon="" [ "$status" = "paused" ] && icon="" echo "$icon" } ########################## Status ########################## mpcstatus() { stat=$(mpc status | head -2 | tail -1 | cut -c2-7) status="Stopped" [ "$stat" = "playin" ] && status="Playing" [ "$stat" = "paused" ] && status="Paused" echo "$status" } ########################## Percent ########################## mpcperc() { perc=$(mpc status %percenttime%) [ -z "$perc" ] && perc="0" echo "$perc" } ########################## Playlist ########################## mpcsongpos() { pos=$(mpc status %songpos%) allsongs=$(mpc status %length%) playlist="$pos/$allsongs" [ -z "$pos" ] && playlist="0/0" echo "$playlist" } ########################## Lyrics ########################## mpclyrics() { Title=$(mpc -f %title% current) Artist=$(mpc -f %artist% current) URL="https://api.lyrics.ovh/v1/$Artist/$Title" lyrics=$(curl -s "$(echo "$URL" | sed s/" "/%20/g | sed s/"&"/%26/g | sed s/,/%2C/g | sed s/-/%2D/g)" | jq '.lyrics') [ "$lyrics" = "null" ] && lyrics=$(curl -s --get "https://makeitpersonal.co/lyrics" --data-urlencode "artist=$Artist" --data-urlencode "title=$Title") printf "$lyrics" | less } # ┬ ┬┌─┐┬ ┌─┐ # ├─┤├┤ │ ├─┘ # ┴ ┴└─┘┴─┘┴ doc() { echo "Usage: music [Options] Options: previous previous song next next song toggle toggle between play-pause song title shows title of current song album shows album of current song artist shows artist of current song status music status (playing/paused/stopped) statusicon music status icons (playing/paused/stopped) coverloc saves cover and shows location to cover of current song showcover opens cover using feh time shows current time of song length shows length of song percent shows percent song playlist shows playlist position of current song lyrics shows lyrics" } # ┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐ # │ │├─┘ │ ││ ││││└─┐ # └─┘┴ ┴ ┴└─┘┘└┘└─┘ case $Control in MPD) case $1 in next) mpc -q next ;; previous) mpc -q prev ;; toggle) mpc -q toggle ;; title) mpctitle ;; artist) mpcartist ;; album) mpcalbum ;; status) mpcstatus ;; statusicon) mpcicon ;; player) echo "$Control" ;; coverloc) mpccover ;; showcover) mpccover | xargs feh ;; time) mpctime ;; length) mpclength ;; percent) mpcperc ;; playlist) mpcsongpos ;; lyrics) mpclyrics ;; *) doc ;; esac ;; *) case $1 in next) playerctl next ;; previous) playerctl previous ;; toggle) playerctl play-pause ;; title) title ;; artist) artist ;; album) album ;; status) status ;; statusicon) statusicon ;; player) echo "$Control" ;; coverloc) cover ;; showcover) cover | xargs feh ;; time) ctime ;; length) length ;; percent) echo "0" ;; playlist) playlist ;; lyrics) lyrics ;; *) doc ;; esac ;; esac 2>/dev/null