diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-21 20:16:34 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-21 20:16:34 -0400 |
| commit | f7079db3aa3e0073df6ce5409d4b6de0a431e26f (patch) | |
| tree | e6ed90fdbd40c0122c4a2cd6c4ac25b34cb02be6 /dotfiles | |
| parent | d6fa23bb592ce4184c3a8b62de5cb6826f874ee2 (diff) | |
| download | archsetup-f7079db3aa3e0073df6ce5409d4b6de0a431e26f.tar.gz archsetup-f7079db3aa3e0073df6ce5409d4b6de0a431e26f.zip | |
feat(notify): add --silent flag, volume knob, and level sound files
The touchpad toggle's notification was too loud, and the eight notify sounds varied by ~13 dB in RMS loudness — bug and fail came out two to three times louder than info or security.
I added a --silent flag to notify (shows the popup, plays no sound) and a NOTIFY_VOLUME knob (paplay scale, default 65536) so the master level can drop without re-encoding. toggle-touchpad now passes --silent on both enable and disable. normalize-notify-sounds.sh measures each .ogg and shifts it to a uniform -31 dB mean. It writes through the file instead of mv-ing over it, so the stow symlinks survive when the script runs against the live sound dir. I re-encoded all eight sounds to the new level.
Tests: a new tests/notify suite (12 tests) covers --silent, the volume knob, flag composition, and the error paths.
Diffstat (limited to 'dotfiles')
| -rwxr-xr-x | dotfiles/common/.local/bin/notify | 43 | ||||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/alarm.ogg | bin | 45775 -> 49034 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/alert.ogg | bin | 41684 -> 37850 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/bug.ogg | bin | 10187 -> 8522 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/fail.ogg | bin | 74886 -> 64144 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/info.ogg | bin | 31466 -> 29007 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/question.ogg | bin | 49846 -> 46024 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/security.ogg | bin | 19910 -> 19963 bytes | |||
| -rw-r--r-- | dotfiles/common/.local/share/sounds/notify/success.ogg | bin | 39244 -> 34480 bytes | |||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/toggle-touchpad | 4 |
10 files changed, 37 insertions, 10 deletions
diff --git a/dotfiles/common/.local/bin/notify b/dotfiles/common/.local/bin/notify index a89a3ff..6918e01 100755 --- a/dotfiles/common/.local/bin/notify +++ b/dotfiles/common/.local/bin/notify @@ -3,7 +3,7 @@ # notify - Display notifications with icons and sounds # # Usage: -# notify <type> "title" "body" [--persist] +# notify <type> "title" "body" [--persist] [--silent] # # Types: # success - Green checkmark, pleasant chime @@ -17,12 +17,17 @@ # # Options: # --persist Don't auto-dismiss (stays until manually closed) +# --silent Show the notification but play no sound +# +# Environment: +# NOTIFY_VOLUME Playback volume for the sound (paplay scale: 65536 = 100%). +# Lower it to soften every notification without re-encoding +# the sound files. Default 65536. # # 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?" +# notify info "Touchpad" "Disabled" --silent set -euo pipefail @@ -31,7 +36,7 @@ SOUND_DIR="$HOME/.local/share/sounds/notify" usage() { cat <<EOF -Usage: notify <type> "title" "body" [--persist] +Usage: notify <type> "title" "body" [--persist] [--silent] Types: success Green checkmark, pleasant chime @@ -45,10 +50,15 @@ Types: Options: --persist Don't auto-dismiss notification + --silent Show the notification but play no sound + +Environment: + NOTIFY_VOLUME Sound playback volume (paplay scale: 65536 = 100%) Examples: notify success "Job Complete" "Download finished" notify fail "Build Failed" "Test errors" --persist + notify info "Touchpad" "Disabled" --silent EOF exit 1 } @@ -61,7 +71,24 @@ fi TYPE="$1" TITLE="$2" BODY="$3" -PERSIST="${4:-}" +shift 3 + +# Optional flags, in any order +PERSIST="" +SILENT="" +for arg in "$@"; do + case "$arg" in + --persist) PERSIST="--persist" ;; + --silent) SILENT=1 ;; + *) + echo "Error: Unknown option '$arg'" >&2 + usage + ;; + esac +done + +# Master playback volume (paplay scale: 65536 = 100%) +NOTIFY_VOLUME="${NOTIFY_VOLUME:-65536}" # Validate type and set icon/sound case "$TYPE" in @@ -129,9 +156,9 @@ if [[ -f "$ICON" ]]; then NOTIFY_ARGS+=(--icon="$ICON") fi -# Play sound in background (if it exists) -if [[ -f "$SOUND" ]]; then - paplay "$SOUND" & +# Play sound in background (unless silenced, and if the file exists) +if [[ -z "$SILENT" && -f "$SOUND" ]]; then + paplay --volume="$NOTIFY_VOLUME" "$SOUND" & fi # Send notification diff --git a/dotfiles/common/.local/share/sounds/notify/alarm.ogg b/dotfiles/common/.local/share/sounds/notify/alarm.ogg Binary files differindex b4dff15..de9b0b7 100644 --- a/dotfiles/common/.local/share/sounds/notify/alarm.ogg +++ b/dotfiles/common/.local/share/sounds/notify/alarm.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/alert.ogg b/dotfiles/common/.local/share/sounds/notify/alert.ogg Binary files differindex 217f33a..9001f2a 100644 --- a/dotfiles/common/.local/share/sounds/notify/alert.ogg +++ b/dotfiles/common/.local/share/sounds/notify/alert.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/bug.ogg b/dotfiles/common/.local/share/sounds/notify/bug.ogg Binary files differindex 6842082..a1bfb03 100644 --- a/dotfiles/common/.local/share/sounds/notify/bug.ogg +++ b/dotfiles/common/.local/share/sounds/notify/bug.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/fail.ogg b/dotfiles/common/.local/share/sounds/notify/fail.ogg Binary files differindex 916d88a..e4f067f 100644 --- a/dotfiles/common/.local/share/sounds/notify/fail.ogg +++ b/dotfiles/common/.local/share/sounds/notify/fail.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/info.ogg b/dotfiles/common/.local/share/sounds/notify/info.ogg Binary files differindex 57900b4..0dc8e10 100644 --- a/dotfiles/common/.local/share/sounds/notify/info.ogg +++ b/dotfiles/common/.local/share/sounds/notify/info.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/question.ogg b/dotfiles/common/.local/share/sounds/notify/question.ogg Binary files differindex 8e44c55..2a6017e 100644 --- a/dotfiles/common/.local/share/sounds/notify/question.ogg +++ b/dotfiles/common/.local/share/sounds/notify/question.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/security.ogg b/dotfiles/common/.local/share/sounds/notify/security.ogg Binary files differindex 301287e..d2ecd20 100644 --- a/dotfiles/common/.local/share/sounds/notify/security.ogg +++ b/dotfiles/common/.local/share/sounds/notify/security.ogg diff --git a/dotfiles/common/.local/share/sounds/notify/success.ogg b/dotfiles/common/.local/share/sounds/notify/success.ogg Binary files differindex c28da65..6bf93fe 100644 --- a/dotfiles/common/.local/share/sounds/notify/success.ogg +++ b/dotfiles/common/.local/share/sounds/notify/success.ogg diff --git a/dotfiles/hyprland/.local/bin/toggle-touchpad b/dotfiles/hyprland/.local/bin/toggle-touchpad index cab605b..ed11674 100755 --- a/dotfiles/hyprland/.local/bin/toggle-touchpad +++ b/dotfiles/hyprland/.local/bin/toggle-touchpad @@ -14,11 +14,11 @@ state=$(cat "$STATE_FILE") if [ "$state" = "enabled" ]; then hyprctl keyword "device[$TOUCHPAD]:enabled" false >/dev/null echo "disabled" > "$STATE_FILE" - notify info "Touchpad" "Disabled" + notify info "Touchpad" "Disabled" --silent else hyprctl keyword "device[$TOUCHPAD]:enabled" true >/dev/null echo "enabled" > "$STATE_FILE" - notify info "Touchpad" "Enabled" + notify info "Touchpad" "Enabled" --silent fi # Refresh the waybar indicator immediately (custom/touchpad listens on signal 9). |
