mirror of
https://github.com/neoromantique/dotfiles.git
synced 2026-03-13 21:53:20 +03:00
62 lines
1.7 KiB
Bash
62 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Get a list of sink names
|
|
sinks=($(pactl list sinks short | awk '{print $2}'))
|
|
|
|
# Get the current default sink name
|
|
current_sink=$(pactl info | grep "Default Sink:" | awk '{print $3}')
|
|
|
|
# Check if we found the current sink
|
|
if [ -z "$current_sink" ]; then
|
|
echo "Error: Could not determine the current default sink." >&2
|
|
# Attempt to set the first sink as default if we can't find the current one
|
|
if [ ${#sinks[@]} -gt 0 ]; then
|
|
pactl set-default-sink "${sinks[0]}"
|
|
echo "Attempting to set default sink to first available: ${sinks[0]}" >&2
|
|
exit 0
|
|
else
|
|
echo "Error: No sinks found." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Find the index of the current sink in the list
|
|
current_sink_index=-1
|
|
for i in "${!sinks[@]}"; do
|
|
if [[ "${sinks[$i]}" == "$current_sink" ]]; then
|
|
current_sink_index=$i
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Check if the current sink was found in the list
|
|
if [ "$current_sink_index" -eq -1 ]; then
|
|
echo "Error: Current default sink '$current_sink' not found in the list of sinks." >&2
|
|
# Reset to the first sink as a fallback
|
|
if [ ${#sinks[@]} -gt 0 ]; then
|
|
pactl set-default-sink "${sinks[0]}"
|
|
echo "Resetting to first available sink: ${sinks[0]}" >&2
|
|
exit 0
|
|
else
|
|
echo "Error: No sinks found to reset to." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
# Determine the direction
|
|
direction=$1
|
|
|
|
# Calculate the index of the next sink
|
|
if [ "$direction" == "up" ]; then
|
|
next_sink_index=$(( (current_sink_index - 1 + ${#sinks[@]}) % ${#sinks[@]} ))
|
|
else # default to down
|
|
next_sink_index=$(( (current_sink_index + 1) % ${#sinks[@]} ))
|
|
fi
|
|
|
|
# Get the name of the next sink
|
|
next_sink="${sinks[$next_sink_index]}"
|
|
|
|
# Set the new default sink
|
|
pactl set-default-sink "$next_sink"
|