75 lines
1.7 KiB
Bash
75 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
export MESSAGE=""
|
|
|
|
print_list() {
|
|
pactl list sinks | awk '
|
|
function rofi_set(prop, val) {
|
|
print "\0"prop"\x1f"val
|
|
}
|
|
BEGIN {
|
|
have_sink = 0
|
|
i = 0
|
|
"pactl get-default-sink" | getline active_sink
|
|
list=""
|
|
active_line=-1
|
|
};
|
|
/^Sink/ {
|
|
new=mute" "name" ("volume")\0info\x1f"sink
|
|
if (have_sink == active_line) {
|
|
list=new"\n"list
|
|
} else if (have_sink > 0) {
|
|
list=list"\n"new
|
|
}
|
|
sink=substr($2,2);
|
|
have_sink++
|
|
|
|
};
|
|
/Description/ {
|
|
$1 = "" ;
|
|
name = substr($0,2);
|
|
};
|
|
/Mute/ {
|
|
if ( $2 == "yes") {
|
|
mute="(M)"
|
|
} else {
|
|
mute=""
|
|
}
|
|
}
|
|
/Volume/ && ! /Base Volume/ {
|
|
if ( $5 == $12) {
|
|
volume=$5
|
|
} else {
|
|
volume=$5"|"$12
|
|
}
|
|
}
|
|
|
|
/Name/ && $2 == active_sink {
|
|
active_line=have_sink
|
|
}
|
|
END {
|
|
new=mute" "name" ("volume")\0info\x1f"sink
|
|
if (have_sink == active_line) {
|
|
list=new"\n"list
|
|
} else if (have_sink > 0) {
|
|
list=list"\n"new
|
|
}
|
|
rofi_set("prompt", "Default sink")
|
|
rofi_set("message", ENVIRON["MESSAGE"])
|
|
rofi_set("use-hot-keys","true")
|
|
rofi_set("active", "0")
|
|
sub(/\n+/, "\n", list)
|
|
print list
|
|
}'
|
|
}
|
|
|
|
case "$ROFI_RETV" in
|
|
0) : ;;
|
|
1) pactl set-default-sink "$ROFI_INFO" ; exit 0 ;;
|
|
10) pactl set-sink-volume "$ROFI_INFO" -10% ;;
|
|
11) pactl set-sink-volume "$ROFI_INFO" +10% ;;
|
|
12) pactl set-sink-mute "$ROFI_INFO" toggle ;;
|
|
*) export MESSAGE="unknown action" ;;
|
|
esac
|
|
|
|
print_list
|