| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 
							- #!/bin/bash
 
- #This script increases/decreases/toggles the volume by a fixed increment specified in step.
 
- #This script relies on the script notify-send-improved and on pactl.
 
- # i3-volume-toggle - Increases and decreases volume.
 
- # Copyright (C) 2017 Fabrizio Romano Genovese <egonigredo@gmail.com>
 
- # This copyrighted material is made available to anyone wishing to use,
 
- # modify, copy, or redistribute it subject to the terms and conditions of
 
- # the GNU General Public License v.2, or (at your option) any later version.
 
- #
 
- # This program is distributed in the hope that it will be useful, but WITHOUT
 
- # ANY WARRANTY expressed or implied, including the implied warranties of
 
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
 
- # Public License for more details.
 
- # You should have received a copy of the
 
- # GNU General Public License along with this program; if not, 
 
- # see <http://www.gnu.org/licenses/>
 
- # Put this file in /bin/ or in /usr/bin. Do not forget to give 
 
- # sudo chmod +x i3-volume-toggle
 
- # to make it executable.
 
- step=5
 
- # Check if pactl, amixer  and notify-send-improved are installed
 
- check_installed()
 
- {
 
- if [ ! -f /bin/notify-send-improved -a -f /bin/pactl -a -f /bin/amixer ]; then
 
-         echo "Notify-send-improved, amixer  and/or pactl not present."
 
-         echo "Please install them."     
 
-         exit 2
 
- fi
 
- }
 
- #Here we actually change the volume using pactl
 
- if [[ $# -le 1 ]]; then
 
- 	 case $1 in
 
-                -v | --version)
 
-                         echo "$0 - Version $version"
 
-                         exit 0
 
-                         ;;
 
-                 -h | --help)
 
-                         echo "- v, --version            Display current version"
 
-                         echo "-h, --help                Display this message"
 
-                         echo "up                        Increase volume by $step%"
 
-                         echo "down                      Decrease volume by $step%"
 
-                         echo "mute			Mute/unmute"
 
- 			exit 0
 
-                         ;;
 
- 		"up")
 
- 			check_installed
 
- 			pactl set-sink-volume  1 +$step%
 
- 			#This produces sound feedback. Comment if you don't like it.
 
- 			(speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
 
- 			;;
 
- 		"down")
 
- 			check_installed
 
- 			pactl set-sink-volume 1 -$step%
 
- 			#This produces sound feedback. Comment if you don't like it.
 
- 			(speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
 
- 			;;
 
- 		"toggle")
 
- 			check_installed
 
- 			pactl set-sink-mute 1 toggle
 
-                         #This produces sound feedback. Comment if you don't like it.
 
-                         (speaker-test -t sine -f 400)& pid=$!; sleep 0.1s; kill -9 $pid
 
- 			;;
 
- 		*)
 
-                 	echo "Usage: $0 {-v, --version|-h, --help|up|toggle|down}"
 
-                 	exit 2
 
- 	esac
 
- fi
 
- # Here we get the current status of audio from alsamixer
 
- muted=`amixer get Master|tail -n1|sed -E 's/.*\[([a-z]+)\]/\1/'`
 
- volume=`amixer get Master|tail -n1|sed -E 's/.*\[([0-9]+)\%\].*/\1/'`
 
- # Selects the right icon for the notification
 
- # If icons do not exist they won't be displayed
 
- muteicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-muted-symbolic.symbolic.png"
 
- if [ "$volume" -eq "0" ]; then
 
- 	volumeicon=$muteicon
 
- elif [ "$volume" -lt "33" ]; then
 
- 	volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-low-symbolic.symbolic.png"
 
- elif [ "$volume" -lt "66" ]; then
 
- 	volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-medium-symbolic.symbolic.png"
 
- elif [ "$volume" -lt "120" ]; then
 
- 	volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-high-symbolic.symbolic.png"
 
- else
 
- # The following image is obtained with this command:
 
- # sudo convert "/usr/share/icons/Adwaita/32x32/status/audio-volume-high-symbolic.symbolic.png" -fuzz 100% -fill red -opaque "/usr/share/icons/Adwaita/32x32/status/audio-volume-danger-symbolic.symbolic.png"
 
- 	volumeicon="/usr/share/icons/Adwaita/32x32/status/audio-volume-danger-symbolic.symbolic.png"
 
- fi
 
- # Here we read the notification id from a temporary file. If the file doesn't exist, we initialize it the notification to 0
 
- # Then we send the notification out and we reassign the notification id to the current one using tee
 
- #
 
- # If the file exists, we just replace that notification id, that will then stay the same and not increment.
 
- if [ ! -f "/tmp/volume_notification_id.dat" ]; then
 
- 		notification_id="0"
 
- 		if [[ $muted == "off" ]]; then
 
-         		notification_id=$(notify-send-improved "Volume Control" -i $muteicon --print-id -t 1000 "Muted \($volume\%\)" | tee /dev/tty)
 
-                 else
 
-                         notification_id=$(notify-send-improved "Volume Control" -i $volumeicon --print-id -t 1000 "Volume: $volume\%" | tee /dev/tty)
 
-                 fi
 
- else
 
- 		notification_id=`cat /tmp/volume_notification_id.dat`
 
-                 if [[ $muted == "off" ]]; then
 
- 	                notify-send-improved "Volume Control" -i $muteicon --print-id --replace=$notification_id -t 1000 "Muted \($volume\%\)"
 
-        		else
 
-                 	notify-send-improved "Volume Control" -i $volumeicon --print-id --replace=$notification_id -t 1000 "Volume: $volume\%"
 
-         	fi
 
- fi
 
- # Here we write the notification id to a file. Next time we use this script it will know if the notification has to be overwritten or not
 
- echo "${notification_id}" > /tmp/volume_notification_id.dat
 
 
  |