#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: wms ACTION wms -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message ACTION one of: - uuid - date - clear-notification - mpris Helper script to launch CLI commands, without having complex quoting, piping, flow control, etc. clutter the wm configuration file. Examples: Generate a new UUID, copy it to the clipboard and send a desktop notification: $ wms uuid EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) ACTION="${1:-}" eval "$(assert-arg "$ACTION" 'ACTION')" copy_and_notify() { STR="$1" LABEL="$2" printf '%s' "$STR" | copy -n notify-send -t 5000 -u normal -- \ "$STR" "$LABEL copied to clipboard" } format_player_name() { if echo "$1" | grep -Eq '^firefox\.instance.*'; then echo 'firefox' else echo "$PLAYER" fi } format_player_title() { TITLE="$(playerctl --player="$PLAYER" metadata xesam:title)" if [ "${#TITLE}" -gt 82 ]; then printf '%s...\n' "$(echo "$TITLE" | head -c 80)" else echo "$TITLE" fi } case "$ACTION" in uuid) copy_and_notify "$(uuid)" 'UUID' ;; date) copy_and_notify "$(date '+%Y-%m-%d')" 'date' ;; clear-notification) dunstctl close ;; mpris) PLAYER="$(cat "$XDG_CACHE_HOME"/euandreh-mpris-player.txt)" PLAYER_NAME="$(format_player_name "$PLAYER")" PLAYER_TITLE="$(format_player_title "$PLAYER")" printf '%s: %s\n' "$PLAYER_NAME" "$PLAYER_TITLE" ;; *) printf 'Bad ACTION: %s.\n\n' "$ACTION" >&2 usage >&2 exit 2 ;; esac