Add dzadd script
This commit is contained in:
parent
76855bedf9
commit
62bd9e6676
|
@ -41,6 +41,8 @@ create_scripts
|
||||||
volumesh = [ pulseaudio libnotify ];
|
volumesh = [ pulseaudio libnotify ];
|
||||||
pulse_sink = [ pulseaudio pamixer final.wdmenu ];
|
pulse_sink = [ pulseaudio pamixer final.wdmenu ];
|
||||||
color_picker = [ grim slurp wl-clipboard libnotify imagemagick ];
|
color_picker = [ grim slurp wl-clipboard libnotify imagemagick ];
|
||||||
|
dzadd = [ procps libnotify final.wdmenu jq mpv pqiv python3Packages.deemix mpc-cli final.mpdDup ];
|
||||||
|
mpdDup = [ mpc-cli perl ];
|
||||||
} // lib.mapAttrs import_script {
|
} // lib.mapAttrs import_script {
|
||||||
wdmenu = ./wdmenu.nix;
|
wdmenu = ./wdmenu.nix;
|
||||||
wlauncher = ./wlauncher.nix;
|
wlauncher = ./wlauncher.nix;
|
||||||
|
|
176
scripts/dzadd
Executable file
176
scripts/dzadd
Executable file
|
@ -0,0 +1,176 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
tmpf=$(mktemp /tmp/dzadd.XXXXXX)
|
||||||
|
|
||||||
|
clean() {
|
||||||
|
test "$?" -eq "0" ||
|
||||||
|
notify-send "Exiting with error"
|
||||||
|
|
||||||
|
set +e
|
||||||
|
kill "$mpvPid"
|
||||||
|
rm -f "$tmpf"
|
||||||
|
}
|
||||||
|
|
||||||
|
trap clean EXIT
|
||||||
|
|
||||||
|
main() {
|
||||||
|
sType=$(printf "Track\nAlbum\nArtist" | wdmenu | tr '[:upper:]' '[:lower:]')
|
||||||
|
test -n "$sType" || exit 1
|
||||||
|
|
||||||
|
query=$(echo -n | wdmenu | sed 's/[^ a-z0-9]//g;s/ /+/g')
|
||||||
|
test -n "$query" || exit 1
|
||||||
|
|
||||||
|
case "$sType" in
|
||||||
|
track)
|
||||||
|
deezer_category="track"
|
||||||
|
jqFilter='.data[]| "\(.title) - \(.album.title) - \(.artist.name) |\(.id)"'
|
||||||
|
;;
|
||||||
|
album)
|
||||||
|
deezer_category="album"
|
||||||
|
jqFilter='.data[]| "\(.nb_tracks) - \(.title) - \(.artist.name) |\(.id)"'
|
||||||
|
;;
|
||||||
|
artist)
|
||||||
|
deezer_category="artist"
|
||||||
|
jqFilter='.data[]| "\(.nb_fan) - \(.name) |\(.id)"'
|
||||||
|
;;
|
||||||
|
top50)
|
||||||
|
deezer_category="artist"
|
||||||
|
jqFilter='.data[]| "\(.nb_fan) - \(.name) |\(.id)"'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
curl -m30 -s "api.deezer.com/search/${deezer_category}?q=${query}" |
|
||||||
|
sed 's/|//g' |
|
||||||
|
jq -r "$jqFilter" >"$tmpf"
|
||||||
|
|
||||||
|
pick_song
|
||||||
|
}
|
||||||
|
|
||||||
|
pick_song() {
|
||||||
|
choice=$(cat "$tmpf" | cut -d\| -f1 | wdmenu)
|
||||||
|
choice=$(grep "$choice" "$tmpf" | head -n 1)
|
||||||
|
choiceId=$(printf "%s" "$choice" | cut -d\| -f2)
|
||||||
|
|
||||||
|
case "$sType" in
|
||||||
|
top50)
|
||||||
|
choiceUrl="http://deezer.com/${deezer_category}/${choiceId}/top?=limit=50"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
choiceUrl="http://deezer.com/${deezer_category}/${choiceId}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
pick_action "$choiceUrl"
|
||||||
|
}
|
||||||
|
|
||||||
|
pick_action() {
|
||||||
|
|
||||||
|
choiceUrl="$1"
|
||||||
|
|
||||||
|
COMMON_CHOISES="View Image\nDownload\nCopy URL\nAnother"
|
||||||
|
choice=$(printf "Preview\n${COMMON_CHOISES}" | wdmenu)
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
|
||||||
|
"Preview")
|
||||||
|
common_preview
|
||||||
|
;;
|
||||||
|
|
||||||
|
"View Image")
|
||||||
|
common_art
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Download")
|
||||||
|
common_download
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Copy URL")
|
||||||
|
wl-copy
|
||||||
|
;;
|
||||||
|
|
||||||
|
"Another")
|
||||||
|
pick_song
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
common_preview() {
|
||||||
|
|
||||||
|
case "$sType" in
|
||||||
|
track)
|
||||||
|
;;
|
||||||
|
album)
|
||||||
|
preview_suffix=tracks
|
||||||
|
;;
|
||||||
|
artist)
|
||||||
|
preview_suffix=top
|
||||||
|
;;
|
||||||
|
top50)
|
||||||
|
preview_suffix=top
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
choicePreview=$(
|
||||||
|
curl -m30 -s "http://api.deezer.com/${deezer_category}/${choiceId}/${preview_suffix}" |
|
||||||
|
jq -r '.preview, .data[0].preview | select(. != null)'
|
||||||
|
)
|
||||||
|
|
||||||
|
mpv --quiet --volume=50 --no-resume-playback "$choicePreview" &
|
||||||
|
mpvPid="$!"
|
||||||
|
choice=$(printf "$COMMON_CHOISES" | wdmenu -p 'Download?')
|
||||||
|
kill "$mpvPid" || true
|
||||||
|
}
|
||||||
|
|
||||||
|
common_art() {
|
||||||
|
|
||||||
|
case "$sType" in
|
||||||
|
track)
|
||||||
|
image_filter='.album.cover_big'
|
||||||
|
;;
|
||||||
|
album)
|
||||||
|
image_filter='.cover_big'
|
||||||
|
;;
|
||||||
|
artist)
|
||||||
|
image_filter='.picture_big'
|
||||||
|
;;
|
||||||
|
top50)
|
||||||
|
image_filter='.picture_big'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
curl -m30 -s "api.deezer.com/${deezer_category}/${choiceId}" |
|
||||||
|
jq -r "$image_filter" |
|
||||||
|
xargs curl -m30 -s |
|
||||||
|
pqiv -
|
||||||
|
|
||||||
|
pick_action
|
||||||
|
}
|
||||||
|
|
||||||
|
common_download() {
|
||||||
|
notify-send "Starting Download"
|
||||||
|
deemix "$choiceUrl" </dev/null &&
|
||||||
|
notify-send "Download Successful" ||
|
||||||
|
notify-send "Download Failed"
|
||||||
|
mpc add /
|
||||||
|
mpdDup
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
5
scripts/mpdDup
Executable file
5
scripts/mpdDup
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
mpc playlist -f '%position%\t%file%' |
|
||||||
|
sort -k 2 |
|
||||||
|
perl -ne 'm/(.*)\t(.*)/; print "$1\n" if $2 eq $prev; $prev=$2' |
|
||||||
|
mpc del
|
|
@ -20,5 +20,8 @@
|
||||||
};
|
};
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
musmenu
|
musmenu
|
||||||
|
python3Packages.deemix
|
||||||
|
dzadd
|
||||||
|
mpdDup
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ in
|
||||||
"d" = "exec ${pkgs.musmenu}/bin/musmenu delete";
|
"d" = "exec ${pkgs.musmenu}/bin/musmenu delete";
|
||||||
"f" = "exec ${pkgs.musmenu}/bin/musmenu search";
|
"f" = "exec ${pkgs.musmenu}/bin/musmenu search";
|
||||||
|
|
||||||
|
"a" = "exec ${pkgs.dzadd}/bin/dzadd";
|
||||||
|
|
||||||
"Shift+y" = "exec ${pkgs.musmenu}/bin/musmenu yank";
|
"Shift+y" = "exec ${pkgs.musmenu}/bin/musmenu yank";
|
||||||
"Ctrl+a" = "exec ${pkgs.musmenu}/bin/musmenu padd";
|
"Ctrl+a" = "exec ${pkgs.musmenu}/bin/musmenu padd";
|
||||||
"Ctrl+s" = "exec ${pkgs.musmenu}/bin/musmenu psave";
|
"Ctrl+s" = "exec ${pkgs.musmenu}/bin/musmenu psave";
|
||||||
|
|
Loading…
Reference in a new issue