1 April 2024
created something like this turned out to be super easy.
(saavn api by @grimreaper403)
#!/bin/nu
let LIMIT = 30
let QUERY = echo "" | fzf --print-query --no-info
let API = $"https://jiosaavn-api-privatecvc2.vercel.app/search/songs?&limit=($LIMIT)&query=($QUERY)"
let result = http get $"($API)"
| get data.results
| select name downloadUrl.link.4
| rename name url
let song = $result
| get name
| to text
| fzf
let is_cached = $"~/Music/($song).mp3" | path exists
let url = if $is_cached { $"~/Music/($song).mp3" } else {
$result
| filter { |x| $x.name == $song }
| get url.0
| to text
}
# there was no direct way to use the & operator,
# this is just bash wrapper for executing mpv $url &
bash -x ~/.local/bin/get-music-wrap $url
aria2c -c -d ~/Music -o $"($song).mp3" $url