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 =======
|
# ======= 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 = , XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/volume-helper.sh up
|
||||||
bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% # Lower Volume
|
bindel = , XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume-helper.sh down
|
||||||
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 = , XF86AudioMute, exec, ~/.config/hypr/scripts/volume-helper.sh toggle
|
||||||
|
|
||||||
# ======= Playback Control =======
|
# ======= 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