adds multi device support for volume keybinds
This commit is contained in:
@ -28,9 +28,9 @@ bindd = $mainMod, G, Remove gaps between window, exec, hyprctl --batch "keyword
|
||||
|
||||
# ======= Volume Control =======
|
||||
|
||||
bindel = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% && pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\d+(?=%)' | awk '{if($1>100) system("pactl set-sink-volume @DEFAULT_SINK@ 100%")}' # Raise Volume
|
||||
bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% # Lower Volume
|
||||
bindel = , XF86AudioMute, exec, amixer sset Master toggle | sed -En '/\[on\]/ s/.*\[([0-9]+)%\].*/\1/ p; /\[off\]/ s/.*/0/p' | head -1 > /tmp/$HYPRLAND_INSTANCE_SIGNATURE.wob #Mutes player audio
|
||||
bindel = , XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/volume-helper.sh up
|
||||
bindel = , XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume-helper.sh down
|
||||
bindel = , XF86AudioMute, exec, ~/.config/hypr/scripts/volume-helper.sh toggle
|
||||
|
||||
# ======= Playback Control =======
|
||||
|
||||
|
80
.config/hypr/scripts/volume-helper.sh
Executable file
80
.config/hypr/scripts/volume-helper.sh
Executable file
@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# volume-helper.sh — Unified volume control script for Hyprland using pactl
|
||||
#
|
||||
# Purpose:
|
||||
# Many systems have multiple audio output devices (sinks), such as onboard
|
||||
# audio and an external device (e.g. M-Audio M-Track). This script adjusts the
|
||||
# volume of both:
|
||||
#
|
||||
# - The default sink (`@DEFAULT_SINK@`)
|
||||
# - A second sink (identified by partial name, e.g., "M-Track")
|
||||
#
|
||||
# Supports:
|
||||
# - up → Increase volume by 5% (defined by STEP, capped at MAX_VOLUME)
|
||||
# - down → Decrease volume by 5%
|
||||
# - mute → Mute all sinks
|
||||
# - unmute → Unmute all sinks
|
||||
# - toggle → Toggle mute state of all sinks
|
||||
#
|
||||
# Do NOT run this with sudo! pactl must run in your user session.
|
||||
#
|
||||
|
||||
MAX_VOLUME=140
|
||||
STEP=5
|
||||
|
||||
# Secondary sink (e.g. M-Track 2X2)
|
||||
SECOND_SINK=$(pactl list short sinks | grep "M-Track" | awk '{print $1}')
|
||||
DEFAULT_SINK="@DEFAULT_SINK@"
|
||||
|
||||
adjust_volume() {
|
||||
local sink=$1
|
||||
local direction=$2
|
||||
|
||||
if [[ "$direction" == "up" ]]; then
|
||||
pactl set-sink-volume "$sink" +${STEP}%
|
||||
VOL=$(pactl get-sink-volume "$sink" | grep -oP '\d+(?=%)' | sort -nr | head -1)
|
||||
if [ "$VOL" -gt "$MAX_VOLUME" ]; then
|
||||
pactl set-sink-volume "$sink" "$MAX_VOLUME"%
|
||||
fi
|
||||
elif [[ "$direction" == "down" ]]; then
|
||||
pactl set-sink-volume "$sink" -${STEP}%
|
||||
fi
|
||||
}
|
||||
|
||||
toggle_mute() {
|
||||
local sink=$1
|
||||
pactl set-sink-mute "$sink" "$2"
|
||||
}
|
||||
|
||||
# Process action
|
||||
case "$1" in
|
||||
up)
|
||||
adjust_volume "$DEFAULT_SINK" up
|
||||
[[ -n "$SECOND_SINK" ]] && adjust_volume "$SECOND_SINK" up
|
||||
;;
|
||||
down)
|
||||
adjust_volume "$DEFAULT_SINK" down
|
||||
[[ -n "$SECOND_SINK" ]] && adjust_volume "$SECOND_SINK" down
|
||||
;;
|
||||
mute)
|
||||
toggle_mute "$DEFAULT_SINK" 1
|
||||
[[ -n "$SECOND_SINK" ]] && toggle_mute "$SECOND_SINK" 1
|
||||
;;
|
||||
unmute)
|
||||
toggle_mute "$DEFAULT_SINK" 0
|
||||
[[ -n "$SECOND_SINK" ]] && toggle_mute "$SECOND_SINK" 0
|
||||
;;
|
||||
toggle)
|
||||
CURRENT_STATE=$(pactl get-sink-mute "$DEFAULT_SINK" | grep -oE "yes|no")
|
||||
if [[ "$CURRENT_STATE" == "yes" ]]; then
|
||||
"$0" unmute
|
||||
else
|
||||
"$0" mute
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 up|down|mute|unmute|toggle"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
Reference in New Issue
Block a user