Preserve playback when switching audio outputs

This commit is contained in:
David Heinemeier Hansson
2026-05-22 13:26:41 +02:00
parent 2901a95d56
commit dfd6e2a7ca
2 changed files with 8 additions and 8 deletions
+4 -4
View File
@@ -12,9 +12,9 @@ if [[ -z $node_id || -z $sink_name ]]; then
exit 1
fi
wpctl set-default "$node_id" 2>/dev/null || true
pactl set-default-sink "$sink_name" 2>/dev/null || true
timeout 2 wpctl set-default "$node_id" 2>/dev/null || true
timeout 2 pactl set-default-sink "$sink_name" 2>/dev/null || true
pactl list short sink-inputs 2>/dev/null | awk '{ print $1 }' | while read -r input; do
[[ -n $input ]] && pactl move-sink-input "$input" "$sink_name" 2>/dev/null || true
timeout 2 pactl list short sink-inputs 2>/dev/null | awk '{ print $1 }' | while read -r input; do
[[ -n $input ]] && timeout 2 pactl move-sink-input "$input" "$sink_name" 2>/dev/null || true
done
+4 -4
View File
@@ -1,8 +1,8 @@
#!/bin/bash
# omarchy:summary=Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
# omarchy:summary=Switch between audio outputs while preserving the mute status
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks=$(timeout 2 pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(jq 'length' <<<"$sinks")
if (( sinks_count == 0 )); then
@@ -10,7 +10,7 @@ if (( sinks_count == 0 )); then
exit 1
fi
current_sink_name=$(pactl get-default-sink)
current_sink_name=$(timeout 2 pactl get-default-sink)
current_sink_index=$(jq -r --arg name "$current_sink_name" 'map(.name) | index($name)' <<<"$sinks")
if [[ $current_sink_index != "null" ]]; then
@@ -36,7 +36,7 @@ else
fi
if [[ $next_sink_name != $current_sink_name ]]; then
pactl set-default-sink "$next_sink_name"
omarchy-audio-output-set-default "$(jq -r '.index' <<<"$next_sink")" "$next_sink_name"
fi
omarchy-osd -i "volume-${icon_state}" -m "$next_sink_description"