#!/usr/bin/env bash ## inspired by Aditya Shakya (adi1090x) # ## Available themes ## dropdown full-menu usage() { cat </dev/null ; then echo "Install playerctl" exit 1 fi get_info() { # loads info from playerctl status="`playerctl status`" # Playing Paused or error # getting vars title="`playerctl metadata title`" artist="`playerctl metadata artist`" timestamp="`playerctl metadata --format '{{duration(position)}}'`" length="`playerctl metadata --format '{{duration(mpris:length)}}'`" if [[ "$status" == "Paused" || "$status" == "Playing" ]] ; then prompt=$(printf '%s' "$artist") mesg=$(printf '%s :: %s/%s' "$title" "$timestamp" "$length") else # nothing active echo "$status" exit 0 fi } load_theme() { ## Available Types: full-menu dropdown ## Available Styles: square round rounded if [[ -z "$menu" ]] ; then menu="full-menu" # default fi if [[ -z "$style" ]] ; then style="rounded" # override fi # setting theme theme="$HOME/.config/rofi/scripts/music/$menu/$style.rasi" # setting layout if [[ ( "$theme" == *'dropdown'* ) ]]; then list_col='1' list_row='6' elif [[ ( "$theme" == *'full-menu'* ) ]]; then list_col='6' list_row='1' fi # Options layout=`cat ${theme} | grep 'USE_ICON' | cut -d'=' -f2` if [[ "$layout" == 'NO' ]]; then if [[ "$status" == "Playing" ]]; then option_1=" Pause" else option_1=" Play" fi option_2=" Stop" option_3="󰼨 Previous" option_4="󰼧 Next" option_5="󰑖 Repeat" option_6="󰒝 Random" else if [[ "$status" == "Playing" ]]; then option_1="" else option_1="" fi option_2="" option_3="󰼨" option_4="󰼧" option_5="󰑖" option_6="󰒝" fi # Toggle Actions active='' urgent='' # Repeat loop="`playerctl loop`" if [[ $loop == "Playlist" ]]; then active="-a 4" elif [[ $loop == "None" ]]; then urgent="-u 4" else option_5="󰑖 Parsing Error" fi # Random shuffle="`playerctl shuffle`" if [[ "$shuffle" == "On" ]]; then [ -n "$active" ] && active+=",5" || active="-a 5" elif [[ "$shuffle" == "Off" ]]; then [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" else option_6="󰒝 Parsing Error" fi } # Rofi CMD rofi_cmd() { rofi -theme-str "listview {columns: $list_col; lines: $list_row;}" \ -theme-str 'textbox-prompt-colon {str: "";}' \ -dmenu \ -p "$prompt" \ -mesg "$mesg" \ ${active} ${urgent} \ -markup-rows \ -theme ${theme} } disp_menu() { # displays rofi menu get_info # load theme based on info load_theme # display menu and get selection chosen=$(echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd) # take action based on selection case ${chosen} in $option_1) playerctl play-pause ;; $option_2) playerctl stop ;; $option_3) playerctl previous ;; $option_4) playerctl next ;; $option_5) if [[ "$loop" == "Playlist" ]] ; then playerctl loop None else playerctl loop Playlist fi ;; $option_6) playerctl shuffle Toggle ;; esac } # parsing args for arg in "$@"; do shift case "$arg" in '--help') set -- "$@" '-h' ;; '--menu') set -- "$@" '-m' ;; '--style') set -- "$@" '-s' ;; *) set -- "$@" "$arg" ;; esac done while getopts "hm:s:" opt ; do case "$opt" in 'h' ) usage 0 ;; 'm' ) menu="$OPTARG" ;; 's' ) style="$OPTARG" ;; '?' ) usage 1 ;; esac done disp_menu