47 lines
1.4 KiB
Bash
Executable file
47 lines
1.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Use pactl to get the name and description pairs
|
|
output=$(pactl list sinks | grep -E 'Name:|Description:' | sed 's/^ *//')
|
|
|
|
# Initialize an empty array to store the sink info
|
|
declare -A sinks
|
|
|
|
# Initialize variables
|
|
name=""
|
|
description=""
|
|
i=0
|
|
|
|
# Loop through the lines of the output
|
|
while read -r line; do
|
|
if [[ "$line" =~ ^Name: ]]; then
|
|
name="${line#Name: }" # Extract the name
|
|
elif [[ "$line" =~ ^Description: ]]; then
|
|
description="${line#Description: }" # Extract the description
|
|
# Store the name and description in the associative array
|
|
sinks[$description]="$name" # Store name by description key
|
|
# Increment the index
|
|
((i++))
|
|
fi
|
|
done <<<"$output"
|
|
|
|
# Create wofi options string
|
|
options=$(printf "%s\n" "${!sinks[@]}")
|
|
|
|
# Run wofi and capture the selected description
|
|
selected_description=$(echo "$options" | wofi -dmenu -i -p "Select Audio Source" --columns 1)
|
|
|
|
# Check if wofi returned a value (user made a selection)
|
|
if [ -n "$selected_description" ]; then
|
|
|
|
# Get the corresponding name from the sinks array
|
|
selected_name="${sinks[$selected_description]}"
|
|
|
|
# Check if we found a name for the selected description
|
|
if [ -n "$selected_name" ]; then
|
|
pactl set-default-sink "$selected_name"
|
|
notify-send "Set audio device to: $selected_description"
|
|
# **********************************************************************
|
|
else
|
|
notify-send "Error: Could not find name for selected description."
|
|
fi
|
|
fi
|