made a sensible music menu that works with pretty much any audio playback

main
spinach 2 years ago
parent 0786c86b63
commit 538770226e

@ -1 +0,0 @@
../scripts/mpd/mpd.sh

@ -0,0 +1 @@
../scripts/music/music.sh

@ -1,145 +0,0 @@
#!/usr/bin/env bash
## Author : Aditya Shakya (adi1090x)
## Github : @adi1090x
## Modified : spinach
#
## Applets : MPD (music)
## Available Types
## dropdown full-menu
theme="dropdown"
# override
if [[ -n "$1" ]] ; then
theme="$1"
fi
## Available Styles
## square round rounded
style="rounded.rasi"
# override
if [[ -n "$1" ]] ; then
theme="$1"
fi
theme="$HOME/.config/rofi/scripts/mpd/$theme/$style"
# Theme Elements
status="`mpc status`"
if [[ -z "$status" ]]; then
prompt='Offline'
mesg="MPD is Offline"
else
prompt="`mpc -f "%artist%" current`"
mesg="`mpc -f "%title%" current` :: `mpc status | grep "#" | awk '{print $3}'`"
fi
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
if [[ ${status} == *"repeat: on"* ]]; then
active="-a 4"
elif [[ ${status} == *"repeat: off"* ]]; then
urgent="-u 4"
else
option_5="󰑖 Parsing Error"
fi
# Random
if [[ ${status} == *"random: on"* ]]; then
[ -n "$active" ] && active+=",5" || active="-a 5"
elif [[ ${status} == *"random: 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}
}
# Pass variables to rofi dmenu
run_rofi() {
echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd
}
# Execute Command
run_cmd() {
if [[ "$1" == '--opt1' ]]; then
mpc -q toggle && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt2' ]]; then
mpc -q stop
elif [[ "$1" == '--opt3' ]]; then
mpc -q prev && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt4' ]]; then
mpc -q next && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt5' ]]; then
mpc -q repeat
elif [[ "$1" == '--opt6' ]]; then
mpc -q random
fi
}
# Actions
chosen="$(run_rofi)"
case ${chosen} in
$option_1)
run_cmd --opt1
;;
$option_2)
run_cmd --opt2
;;
$option_3)
run_cmd --opt3
;;
$option_4)
run_cmd --opt4
;;
$option_5)
run_cmd --opt5
;;
$option_6)
run_cmd --opt6
;;
esac

@ -0,0 +1,195 @@
#!/usr/bin/env bash
## inspired by Aditya Shakya (adi1090x)
#
## Available themes
## dropdown full-menu
usage() {
cat <<EOF
usage $0 [-h][-s ICON][-m TYPE]
Options:
-s, --style change icon style
available ICON: round, rounded, or square
-m, --menu change menu type
available TYPE: full-menu or dropdown
-h, --help print this mesage
EOF
exit $1
}
# check playerctl installed, required for control
if ! command -v playerctl>/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/mpd/$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
Loading…
Cancel
Save