@@ -84,10 +84,13 @@ change_volume() {
8484 [ " ${srce} " = " " ] && srce=" @DEFAULT_AUDIO_SINK@"
8585 if [ " ${isVolumeBoost} " = true ]; then
8686 $use_swayosd && swayosd-client ${mode} " ${delta}${step} " --max-volume " ${VOLUME_BOOST_LIMIT:- 150} " && exit 0
87+ # Convert percentage limit to decimal (150% -> 1.5)
88+ boost_limit_decimal=$( awk -v limit=" ${VOLUME_BOOST_LIMIT:- 150} " ' BEGIN {print limit/100}' )
89+ wpctl set-volume -l " ${boost_limit_decimal} " " ${srce} " " ${step} %${delta} "
8790 else
8891 $use_swayosd && swayosd-client ${mode} " ${delta}${step} " && exit 0
92+ wpctl set-volume -l 1.0 " ${srce} " " ${step} %${delta} "
8993 fi
90- wpctl set-volume " ${srce} " " ${step} %${delta} "
9194 vol=$( wpctl get-volume " ${srce} " | awk ' {print $2 * 100}' )
9295 else
9396 if [ " ${isVolumeBoost} " = true ]; then
@@ -174,21 +177,29 @@ select_output() {
174177get_default_sink () {
175178 local default_sink
176179 if [[ " ${use_pipewire} " == true ]]; then
177- default_sink=$( pw-dump | jq -r ' [.[] | select(.info?.props?."media.class" == "Audio/Sink")] | min_by(.info.props."priority.session" // 9999) | .info.props."node.description"' )
180+ # More reliable method to get the actual default sink
181+ default_sink=$( wpctl inspect @DEFAULT_AUDIO_SINK@ | grep -oP ' node.description = "\K[^"]+' | head -1)
182+ # Fallback method if above fails
183+ if [ -z " $default_sink " ]; then
184+ default_sink=$( pw-dump | jq -r ' [.[] | select(.info?.props?."media.class" == "Audio/Sink")] | min_by(.info.props."priority.session" // 9999) | .info.props."node.description"' )
185+ fi
178186 else
179187 default_sink=$( pamixer --get-default-sink | awk -F ' "' ' END{print $(NF - 1)}' )
180188 fi
181- echo ${default_sink}
189+ echo " ${default_sink} "
182190}
183191
184192get_default_source () {
185193 local default_source
186194 if [[ " ${use_pipewire} " == true ]]; then
187- default_source=$( pw-dump | jq -r ' [.[] | select(.info?.props?."media.class" == "Audio/Source")] | min_by(.info.props."priority.session" // 9999) | .info.props."node.description"' )
195+ default_source=$( wpctl inspect @DEFAULT_AUDIO_SOURCE@ | grep -oP ' node.description = "\K[^"]+' | head -1)
196+ if [ -z " $default_source " ]; then
197+ default_source=$( pw-dump | jq -r ' [.[] | select(.info?.props?."media.class" == "Audio/Source")] | min_by(.info.props."priority.session" // 9999) | .info.props."node.description"' )
198+ fi
188199 else
189200 default_source=$( pamixer --list-sources | awk -F ' "' ' END {print $(NF - 1)}' )
190201 fi
191- echo ${default_source}
202+ echo " ${default_source} "
192203}
193204
194205toggle_output () {
@@ -210,7 +221,7 @@ icodir="${iconsDir}/Wallbash-Icon/media"
210221step=${VOLUME_STEPS:- 5}
211222
212223# Detect pipewire
213- if pactl info | grep -q " PipeWire" ; then
224+ if pactl info | grep -q " PipeWire" || ${VOLUME_PIPEWIRE_ENABLE} == true ; then
214225 use_pipewire=true
215226else
216227 use_pipewire=false
0 commit comments