aboutsummaryrefslogtreecommitdiff
path: root/extras/HOME/.local/bin/set-sink.sh
blob: cca87468fa4c143a3b1c08b944a339ddbf141f84 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash

if [[ -z "$ROFI" ]] ; then
  ROFI='rofi -dmenu'
fi

DMENU=($ROFI -i -theme-str '* {theme-color: #88ff88;}')

sinks="$(
  pactl list sinks | while read line ; do
    case "$line" in
      Sink\ \#*)
        name="${line//*#}" ;;
      Description:\ *)
        description="${line//*: }"
        echo "$description "'#'"$name"
        ;;
      *) ;;
    esac
  done)"

client_input="$(
  pactl list sink-inputs | while read line ; do
    case "$line" in
      application.name\ =*)
        app="${line//*= \"}"
        app="${app%%\"}"
        echo "$app: $media "'#'"$obj"
        ;;
      media.name\ =*)
        media="${line//*= \"}"
        media="${media%%\"}"
        ;;
      Sink\ Input\ \#*)
        obj="${line//*#}"
        ;;
    esac
  done
)"

echo "Client Input: $client_input"

if [[ "$(wc -l <<< "$client_input")" -gt 1 ]] ; then
  client_input="$("${DMENU[@]}" -p "Move Audio From" <<< "$client_input")"
fi

if [[ "$client_input" == "" ]] ; then
  exit 1
fi

input_sink=${client_input//*#}
input_sink_name=${client_input%% #*}

selected_sink=$("${DMENU[@]}" -p "Move '$input_sink_name' To" <<< "$sinks")
sink_num=${selected_sink//*#}

echo "Sinks: $sinks"

echo "pactl move-sink-input $input_sink $sink_num"
pactl move-sink-input "$input_sink" "$sink_num"