mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
43 lines
1.5 KiB
Bash
Executable File
43 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Switch between audio outputs while preserving the mute status
|
|
|
|
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
|
|
omarchy-osd -m "No audio devices found"
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
next_sink_index=$(((current_sink_index + 1) % sinks_count))
|
|
else
|
|
next_sink_index=0
|
|
fi
|
|
|
|
next_sink=$(jq -c ".[$next_sink_index]" <<<"$sinks")
|
|
next_sink_name=$(jq -r '.name' <<<"$next_sink")
|
|
next_sink_description=$(jq -r '.description // .properties."device.description" // .name' <<<"$next_sink")
|
|
next_sink_volume=$(jq -r '.volume | to_entries[0].value.value_percent | sub("%"; "") | tonumber' <<<"$next_sink")
|
|
next_sink_is_muted=$(jq -r '.mute' <<<"$next_sink")
|
|
|
|
if [[ $next_sink_is_muted == "true" ]] || (( next_sink_volume == 0 )); then
|
|
icon_state="muted"
|
|
elif (( next_sink_volume <= 33 )); then
|
|
icon_state="low"
|
|
elif (( next_sink_volume <= 66 )); then
|
|
icon_state="medium"
|
|
else
|
|
icon_state="high"
|
|
fi
|
|
|
|
if [[ $next_sink_name != $current_sink_name ]]; then
|
|
omarchy-audio-output-set-default "$(jq -r '.index' <<<"$next_sink")" "$next_sink_name"
|
|
fi
|
|
|
|
omarchy-osd -i "volume-${icon_state}" -m "$next_sink_description"
|