#!/bin/sh # dir where audio files are stored amb_dir="$HOME/.local/share/damb" pid_file="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/damb.pid" config_dir="$HOME/.config/damb" menu="wmenu" ico="󰎆 " die() { : "${1:?}" command -v notify-send > /dev/null && notify-send "${ico} damb" "$1" printf "\033[31;1merr: %b\033[0m\n" "$1" exit "${2:-1}" } dep_check() { : "${1:?}" for dep; do command -v "$dep" 1>/dev/null || die "$dep not found, please install it" 127 done unset dep } get_opt() { printf "select\nlinks\nstream\nstop" | "$menu" -p "$ico" } get_ambs() { find "$amb_dir" -type f -exec basename {} \; } get_link() { grep -v "^#.*$" "$config_dir"/links | grep "$(grep -v "^#.*$" "$config_dir"/links | cut -d '=' -f1 | "$menu" -p "$ico" -l 25)" | cut -d '=' -f2 | tr -d ' ' } main() { [ -z "$WAYLAND_DISPLAY" ] && menu="dmenu" dep_check "$menu" case "$(get_opt)" in select) dep_check "ffplay" ffplay -volume 20 -nodisp -loop 0 "$amb_dir/$(get_ambs | "$menu" -p "$ico" -l 25)" & echo "$!" >> "$pid_file" ;; links) dep_check "mpv" mpv --no-video --no-resume-playback "$(get_link)" & echo "$!" >> "$pid_file" ;; stop) while read -r process do kill -9 "$process" done < "$pid_file" rm "$pid_file" ;; stream) paste= dep_check "mpv" if [ -n "$WAYLAND_DISPLAY" ]; then dep_check "wl-paste" paste="$(wl-paste)" elif [ -n "$DISPLAY" ]; then dep_check "xclip" paste="$(xclip -o -sel clip)" else die "tty supported, run a display server" fi mpv --no-video "$paste" & echo "$!" >> "$pid_file" ;; "") ;; # stay quiet when user quits the program during selection *) die "option not implemented";; esac } main "$@"