#!/bin/bash
# TODO
# - display both PCM & Master
# - display mute status

# case $1 in
# 	o)	amixer sset PCM toggle > /dev/null ;;
# 	+)	amixer set PCM 2dB+ unmute > /dev/null;;
# 	-)	amixer set PCM 2dB- unmute > /dev/null;;
# 	# 	*)	echo -n "`amixer get Master | sed -ne '/Front Left/s/.*\[\(.*\)%\].*/\1/p'`"  ; echo -n " / `amixer get PCM | sed -ne '/Front Left/s/.*\[\(.*\)%\].*/\1/p'`" ; ( amixer get Master | grep Front | grep -q off ) && echo -n " [MUTE]" ; exit;;
# 		*)	echo -n "`amixer get PCM | sed -ne '/Front Left/s/.*\[\(.*\)%\].*/\1/p'`" ; ( amixer get PCM | grep Front | grep -q off ) && echo -n " [MUTE]" ; exit;;
# esac


# VOLUME=`amixer get Master | sed -ne '/Front Left/s/.*\[\(.*\)%\].*/\1/p'` 
# xsetroot -name "Vol: $VOLUME"

# `( amixer get Master | grep Front | grep -q off ) || echo \"$(~/sh/vol) •\"` 

# SINK="`pactl info | grep -P '^Default Sink: ' | sed 's/[^:]\+:\s\+//'`"

. $HOME/.dmenurc

SINK="`pactl info | grep -P '^Standard-Ziel: ' | sed 's/[^:]\+:\s\+//'`"
[[ -z "$SINK" ]] && exit 1

if [[ "$SINK" =~ DragonFly ]]; then
  INCR='24'
  MIN_VOLUME=65050
  MAX_VOLUME=65146
else
  INCR='2%'
  MIN_VOLUME=0
  MAX_VOLUME=65536
fi

function volume() {
  VOLUME="`pacmd dump | grep -P '^set-sink-volume.*\s+0x[1-9a-f][0-9a-f]*$'`"
  echo "$VOLUME" | grep -qF "$SINK"
  if [[ $? -eq 0 ]]; then
    VOLUME="`echo "$VOLUME" | grep -oP '0x[1-9a-f][0-9a-f]*$'`"
    printf "%d\n" "$VOLUME"
  else
    echo 0
  fi
  unset VOLUME
}

# volume

if [[ -z "$1" ]]; then
  notify-send "Usage: $0 <up | down | mute | unmute | toggle>"
  exit 1
fi

case "$1" in
  "+")
    pactl -- set-sink-volume "$SINK" "+$INCR"
    VOLUME="`volume`"
    if [[ $VOLUME -gt $MAX_VOLUME ]]; then
      pactl -- set-sink-volume "$SINK" "$MAX_VOLUME"
    fi
    ;;
  "-")
    pactl -- set-sink-volume "$SINK" "-$INCR"
    VOLUME="`volume`"
    if [[ $VOLUME -lt $MIN_VOLUME ]]; then
      pactl -- set-sink-volume "$SINK" "$MIN_VOLUME"
    fi
    ;;
  mute)
    pactl -- set-sink-mute "$SINK" 1
    ;;
  unmute)
    pactl -- set-sink-mute "$SINK" 0
    ;;
  switch)
    pactl list short sinks | awk 'BEGIN {FS=" "}; {print $2}' | $DMENU -p "Output: " -l 3 | xargs -r pactl set-default-sink
    ;;
  toggle)
    MUTED="`pacmd dump | grep -P '^set-sink-mute.*\s+yes$'`"
    echo "$MUTED" | grep -qF "$SINK"
    if [[ $? -eq 0 ]]; then
      pactl -- set-sink-mute "$SINK" 0
    else
      pactl -- set-sink-mute "$SINK" 1
    fi
    ;;
  *)
    notify-send "Unknown command: $1"
    exit 1
    ;;
esac

# volume
