summaryrefslogtreecommitdiff
path: root/mac/.config/sketchybar.mon/sketchybar/plugins/volume.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mac/.config/sketchybar.mon/sketchybar/plugins/volume.sh')
-rwxr-xr-xmac/.config/sketchybar.mon/sketchybar/plugins/volume.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/mac/.config/sketchybar.mon/sketchybar/plugins/volume.sh b/mac/.config/sketchybar.mon/sketchybar/plugins/volume.sh
new file mode 100755
index 0000000..6135b1f
--- /dev/null
+++ b/mac/.config/sketchybar.mon/sketchybar/plugins/volume.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+
+# Source colors for consistent theming
+source "$CONFIG_DIR/colors.sh"
+
+# Get volume information
+if [ "$SENDER" = "volume_change" ]; then
+ VOLUME="$INFO"
+ # Check if muted by trying to get current mute state
+ MUTED=$(osascript -e "output muted of (get volume settings)" 2>/dev/null)
+else
+ VOLUME=$(osascript -e "output volume of (get volume settings)" 2>/dev/null)
+ MUTED=$(osascript -e "output muted of (get volume settings)" 2>/dev/null)
+fi
+
+# Fallback if osascript fails
+if [[ -z "$VOLUME" ]]; then
+ VOLUME=50
+fi
+
+# Determine icon and color based on volume level and mute status
+if [[ $MUTED == "true" ]]; then
+ ICON="󰖁" # Muted icon
+ COLOR=$RED
+ LABEL="" # No label for muted state since we're not showing labels
+else
+ if [[ $VOLUME -gt 75 ]]; then
+ ICON="󰕾" # High volume
+ COLOR=$ACCENT_PRIMARY
+ elif [[ $VOLUME -gt 50 ]]; then
+ ICON="󰖀" # Medium volume
+ COLOR=$ACCENT_PRIMARY
+ elif [[ $VOLUME -gt 25 ]]; then
+ ICON="󰕿" # Low volume
+ COLOR=$YELLOW
+ elif [[ $VOLUME -gt 0 ]]; then
+ ICON="󰕿" # Very low volume
+ COLOR=$ORANGE
+ else
+ ICON="󰖁" # No volume
+ COLOR=$RED
+ fi
+ LABEL="" # No label since we're not showing labels in the bar
+fi
+
+# Update the volume item
+sketchybar --set "$NAME" icon="$ICON" \
+ icon.color="$COLOR" \
+ label="$LABEL"
+
+# Update popup if it's currently showing
+if [ "$(sketchybar --query volume | jq -r '.popup.drawing')" = "on" ]; then
+ # Update the slider bar
+ SLIDER_BAR=""
+ FILLED_SEGMENTS=$((VOLUME / 2))
+
+ for i in {1..50}; do
+ if [ $i -le $FILLED_SEGMENTS ]; then
+ SLIDER_BAR="${SLIDER_BAR}█"
+ else
+ SLIDER_BAR="${SLIDER_BAR}▒"
+ fi
+ done
+
+ # Update mute button
+ if [[ $MUTED == "true" ]]; then
+ MUTE_ICON="󰖁"
+ MUTE_COLOR=$RED
+ else
+ MUTE_ICON="󰕾"
+ MUTE_COLOR=$GREEN
+ fi
+
+ sketchybar --set volume.mute icon="$MUTE_ICON" icon.color="$MUTE_COLOR"
+ sketchybar --set volume.slider icon="$SLIDER_BAR"
+ sketchybar --set volume.percent icon="$VOLUME%"
+fi