#!/usr/bin/env bash # shellcheck disable=SC2154 NOTIFICATION_PROGRAM='mako ' process_args() { while [ "$#" -ge 2 ]; do printf -v "$1" "%s" "$2" shift shift done } escape() { local string string=$1 string=${string//"<"/"<"} string=${string//">"/">"} string=${string//"&"/"&"} printf "%s" "$string" } # Just quit this application if our notification program does not exist # With this notification will not be displayed on my work laptop. Avoid # notification pollution! check_notification_program() { if ! command -v "$NOTIFICATION_PROGRAM"; then exit 0 fi } main() { options=(--app-name=cmus --transient -u low) filename=${file##*/} path=${file%/*} if [[ -f "${path}/cover.png" ]]; then options+=(-i "${path}/cover.png") fi if [[ -f "${path}/cover.jpg" ]]; then options+=(-i "${path}/cover.jpg") fi ## Get title or filename title=${title:-$filename} if [[ ${#title} -gt 25 ]]; then title="${title:0:24}…" fi title="$title" if [ -n "$artist" ]; then if [[ ${#artist} -gt 22 ]]; then artist="${artist:0:21}…" fi printf -v l_artist "by %s" "$(escape "$artist")" fi if [ -n "$date" ]; then date="${date%%-*}" fi # Get Album if [ -n "$album" ]; then if [[ ${#album} -gt 19 ]]; then album="${album:0:19}…" fi printf -v l_album "on %-20s %s" "$(escape "$album")" "${date:-}" fi printf -v l_intro "cmus:%s" "$(escape "$status")" printf -v body "%s\n" "${l_intro:-}" "${title:-}" "${l_artist:-}" "${l_album:-}" notify-send "${options[@]}" "useless" "$body" } check_notification_program process_args "$@" main