mostly improvements, wip
[distro-setup] / toggle-mute
diff --git a/toggle-mute b/toggle-mute
new file mode 100755 (executable)
index 0000000..b50b37e
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to change
+# to a recommended GPL license.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR
+
+
+mute=true
+volume_level=0
+
+# mute / unmute instead of toggle.
+if [[ $1 ]]; then
+  case $1 in
+    mute)
+      mute=true
+      ;;
+    unmute)
+      mute=false
+      ;;
+  esac
+else
+
+  muted=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}' ||:)
+  case $muted in
+    no) : ;;
+    yes) mute=false; volume_level=1 ;;
+    *)
+      i3-nagbar -m "FAILED TO GET PULSE MUTE STATE" -t error -f "pango:monospace 30"
+      ;;
+  esac
+fi
+
+# we double mute here because it could be useful, and I figured out how
+# and feel like using what I know.
+
+pactl set-source-mute @DEFAULT_SOURCE@ $mute
+
+# note: condition duplicated in stream-clip, myi3statsus
+if pgrep -fc '^ffmpeg.*icecast://source.*/fsf' >/dev/null; then
+  out=$(echo Parsed_volume_1 volume $volume_level | zmqsend ||:)
+  if [[ $out != "0 Success" ]]; then
+    i3-nagbar -m "FAILED to set ffmpeg volume to $volume_level" -t error -f "pango:monospace 30"
+  fi
+fi