summaryrefslogtreecommitdiff
path: root/dotfiles/common/.local/bin/notify
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/common/.local/bin/notify')
-rwxr-xr-xdotfiles/common/.local/bin/notify138
1 files changed, 138 insertions, 0 deletions
diff --git a/dotfiles/common/.local/bin/notify b/dotfiles/common/.local/bin/notify
new file mode 100755
index 0000000..a89a3ff
--- /dev/null
+++ b/dotfiles/common/.local/bin/notify
@@ -0,0 +1,138 @@
+#!/bin/bash
+#
+# notify - Display notifications with icons and sounds
+#
+# Usage:
+# notify <type> "title" "body" [--persist]
+#
+# Types:
+# success - Green checkmark, pleasant chime
+# fail - Red X, warning tone
+# alert - Yellow exclamation, attention tone
+# question - Blue question mark, contemplative tone
+# alarm - Alarm clock icon, alarm sound
+# info - Blue info icon, confident tone
+# security - Shield icon, security tone
+# bug - Bug icon, error tone
+#
+# Options:
+# --persist Don't auto-dismiss (stays until manually closed)
+#
+# Examples:
+# notify success "Job Complete" "Download finished in 12 minutes"
+# notify fail "Job Failed" "Connection refused" --persist
+# notify alert "Warning" "Network speed reduced"
+# notify question "Input Needed" "Continue or abort?"
+
+set -euo pipefail
+
+ICON_DIR="$HOME/.local/share/icons/notify"
+SOUND_DIR="$HOME/.local/share/sounds/notify"
+
+usage() {
+ cat <<EOF
+Usage: notify <type> "title" "body" [--persist]
+
+Types:
+ success Green checkmark, pleasant chime
+ fail Red X, warning tone
+ alert Yellow exclamation, attention tone
+ question Blue question mark, contemplative tone
+ alarm Alarm clock, alarm sound
+ info Blue info icon, confident tone
+ security Shield icon, security tone
+ bug Bug icon, error tone
+
+Options:
+ --persist Don't auto-dismiss notification
+
+Examples:
+ notify success "Job Complete" "Download finished"
+ notify fail "Build Failed" "Test errors" --persist
+EOF
+ exit 1
+}
+
+# Require at least type, title, body
+if [[ $# -lt 3 ]]; then
+ usage
+fi
+
+TYPE="$1"
+TITLE="$2"
+BODY="$3"
+PERSIST="${4:-}"
+
+# Validate type and set icon/sound
+case "$TYPE" in
+ success)
+ ICON="$ICON_DIR/success.png"
+ SOUND="$SOUND_DIR/success.ogg"
+ ;;
+ fail)
+ ICON="$ICON_DIR/fail.png"
+ SOUND="$SOUND_DIR/fail.ogg"
+ ;;
+ alert)
+ ICON="$ICON_DIR/alert.png"
+ SOUND="$SOUND_DIR/alert.ogg"
+ ;;
+ question)
+ ICON="$ICON_DIR/question.png"
+ SOUND="$SOUND_DIR/question.ogg"
+ ;;
+ alarm)
+ ICON="$ICON_DIR/alarm.png"
+ SOUND="$SOUND_DIR/alarm.ogg"
+ ;;
+ info)
+ ICON="$ICON_DIR/info.png"
+ SOUND="$SOUND_DIR/info.ogg"
+ ;;
+ security)
+ ICON="$ICON_DIR/security.png"
+ SOUND="$SOUND_DIR/security.ogg"
+ ;;
+ bug)
+ ICON="$ICON_DIR/bug.png"
+ SOUND="$SOUND_DIR/bug.ogg"
+ ;;
+ *)
+ echo "Error: Unknown type '$TYPE'" >&2
+ echo "Valid types: success, fail, alert, question, alarm, info, security, bug" >&2
+ exit 1
+ ;;
+esac
+
+# Check assets exist
+if [[ ! -f "$ICON" ]]; then
+ echo "Warning: Icon not found: $ICON" >&2
+fi
+
+if [[ ! -f "$SOUND" ]]; then
+ echo "Warning: Sound not found: $SOUND" >&2
+fi
+
+# Build notify-send arguments
+NOTIFY_ARGS=(
+ --app-name=""
+ --urgency=normal
+)
+
+# Add persist flag if requested
+if [[ "$PERSIST" == "--persist" ]]; then
+ NOTIFY_ARGS+=(--expire-time=0)
+fi
+
+# Add icon if it exists
+if [[ -f "$ICON" ]]; then
+ NOTIFY_ARGS+=(--icon="$ICON")
+fi
+
+# Play sound in background (if it exists)
+if [[ -f "$SOUND" ]]; then
+ paplay "$SOUND" &
+fi
+
+# Send notification
+notify-send "${NOTIFY_ARGS[@]}" "$TITLE" "$BODY"