blob: eeb6e55ab21bcc86da3c288d29fbc749229cd64d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/bin/bash
# THE FINAL SOLUTION
# DEPENDENCIES: sox, cmus
# ANOTHER OPTION WOULD BE TO DMENU ALL THE OPTIONS, SO IT CAN BE RUN WITH ONLY ONE KEYBOARD SHORTCUT
# AND I CAN'T HELP BUT THINK THAT THERE'S SOME WAY TO UNIFY THE PLAYLIST TYPES AND THE SINGLE-SONG BRANCH AND USE ONLY FLAGS INSTEAD OF IF
# ALSO IT WOULD PROBABLY RUN FASTER IF I REPLACED EVERY FIND WITH LOCATE
# OH WELL
# look into types of parentheses, $(( )) is math for example
# shuf is a thing
# also xargs -r is a thing
# [ "$(printf "Yes\\nNo" | dmenu -l 2 -i -p "Send $file to the trash?")" = "Yes" ]
[[ ! $(pgrep -x cmus) ]] && xfce4-terminal -e cmus && exit
SHORTCUTS=(
'FUNCTION | TERMINAL EQUIVALENT | RECOMMENDED KEYBIND'
'------------------------------------------------------------------------------------------'
'Play Song | play.sh | F8'
'Queue Song | play.sh -q | F9'
'Notify-send Queue | play.sh -n | F10'
'Play/Pause Song | cmus-remote -u | Shift+F8'
'Skip to Next Song | cmus-remote --next | Shift+F9'
'Toggle Autoplay | cmus-remote -C "toggle continue" | Ctrl+F9'
'Play Playlist | play.sh -l | Ctrl+Shift+F8'
'Queue Playlist | play.sh -lq | Ctrl+Shift+F9'
'Clear Playlist | play.sh -c | Ctrl+Shift+F10'
'Increase Volume | cmus-remote -v +5% | Shift+Upper side mouse button'
'Decrease Volume | cmus-remote -v -5% | Shift+Lower side mouse button'
)
playlist_flag=false
queue_flag=false
clear_flag=false
current_song=$(cmus-remote -Q | grep file | sed "s|file ||g")
MUSIC="$HOME/music"
SONG=""
SED_STRING="s|^|player-play |"
ROFI_THEME="BernBlue"
#E0E04B
#AAAA00
while getopts "hnlqc" opt; do
case $opt in
h) echo -e "usage: $0 [-h help] [-n notify-send queue] [-l list] [-q queue] [-c clear]\n\nSuggested Keyboard Shortcuts:\n"; printf '%s\n' "${SHORTCUTS[@]}"; exit ;; # PRINT HELP IN TERMINAL
# n) notify-send -u low -t 15000 -i $HOME/stuf/rikanom.png "Songs currently in queue:" "$(cmus-remote -C 'save -q -' | sed -r 's|^\/([^\/]+\/)+||g' )"; exit ;; # NOTIFY-SEND QUEUE
n) "$HOME/stuf/scripts/notification_wrapper.sh" "\n> $( echo $current_song | sed -r 's|^\/([^\/]+\/)+||g' ) \n$( cmus-remote -C 'save -q -' | sed -r 's|^\/([^\/]+\/)+||g' | head -n 50 )" "UNIVPLAY" ; exit ;; # NOTIFY-SEND QUEUE VIA OWN WRAPPER
l) playlist_flag=true; ROFI_THEME="BernViolet" ;; # SET PLAYLIST FLAG, CHANGE DMENU COLOR
q) queue_flag=true; SED_STRING="s|^|add -q |"; ROFI_THEME="${ROFI_THEME}Queue" ;; # SET QUEUE FLAG, CHANGE DMENU TEXT
c) clear_flag=true; ROFI_THEME="BernRed" ;; # SET CLEAR FLAG, CHANGE DMENU COLOR/TEXT
?) echo "error: option -$OPTARG is not implemented"; exit ;;
esac
done
if $clear_flag ; then
CHOICE=$(echo -e "1. Keep only the currently playing song\n2. Clear everything\n3. Abort" \
| rofi -dmenu -i -no-custom -p "" -theme "$ROFI_THEME" -async-pre-read 3 -no-click-to-exit )
echo "$CHOICE" | grep "1" &> /dev/null && cmus-remote -q -c
# fuck you cmus
echo "$CHOICE" | grep "2" &> /dev/null && cmus-remote -q -c && sox -n -r 44100 -c 2 /tmp/silence.wav trim 0.0 0.5 && cmus-remote -C "player-play /tmp/silence.wav" && rm /tmp/silence.wav && cmus-remote -C "set continue=false"
exit
fi
if $playlist_flag ; then
# FIND EVERY DIRECTORY WITH AN AUDIO FILE IN IT AND PIPE IT INTO DMENU
PL_DIR=$(find $MUSIC -type f -iregex ".*\.\(mp3\|flac\|m4a\|ogg\)$" -printf '%h/\n' | uniq \
| rofi -dmenu -i -no-custom -p "" -theme "$ROFI_THEME" -async-pre-read 15 -no-click-to-exit )
if [[ -n $PL_DIR ]]; then
$queue_flag || cmus-remote -q -c # || OPERATOR; IF QUEUE FLAG IS FALSE, THEN CLEAR THE QUEUE
find "$PL_DIR" -maxdepth 1 -type f | sort | sed "s|^|add -q |" | sed -r "s|'|\\\'|g" | xargs -I{} cmus-remote -C "{}" # FIND EVERY SONG IN THE DIRECTORY (IGNORING ANY NESTED DIRECTORIES) AND PIPE THEM INTO CMUS-REMOTE
$queue_flag || cmus-remote -q --next # || OPERATOR; IF QUEUE FLAG IS FALSE, PUSH THE FIRST-QUEUED SONG
$queue_flag || cmus-remote -p # || OPERATOR; IF QUEUE FLAG IS FALSE, PLAY THE PUSHED SONG
cmus-remote -C "set continue=true" # ENABLE AUTOPLAY
cmus-remote -C "set play_library=false" # DISABLE ORDINARY PLAYLIST PLAYBACK JUST IN CASE
fi
else
# FIND EVERY AUDIO FILE AND PIPE IT INTO ROFI, IN TWO LINES
SONG=$( find $MUSIC -type f -iregex ".*\.\(mp3\|flac\|m4a\|ogg\)$" -printf '/%P\n' | sort --version-sort | sed -r "s|(^\/([^\/]+\/)+)(([^\/])+$)|\1\n\3\x0f|g; $ s|.{1}$||" | paste -sd '\n\0' \
| rofi -dmenu -sep '\x0f' -eh 2 -i -no-custom -p "" -theme "$ROFI_THEME" -async-pre-read 15 -no-click-to-exit | paste -sd '' )
[[ -n $SONG ]] && [[ -n "$current_song" ]] && ! $queue_flag && cmus-remote -C "add -Q $current_song" # IF QUEUE FLAG IS FALSE, PLACE CURRENTLY PLAYING SONG AT THE END OF THE QUEUE
[[ -n $SONG ]] && echo "${MUSIC}${SONG}" | sed "$SED_STRING" | cmus-remote # MUCH CLEANER THAN DMENU
[[ -n $SONG ]] && cmus-remote -C "set continue=$queue_flag" # TOGGLE AUTOPLAY BASED ON CIRCUMSTANCES
fi
|