aboutsummaryrefslogtreecommitdiff
path: root/home-manager/homeModules/attachments/hypr-scripts/switch-sink.py
diff options
context:
space:
mode:
authorspl3g <spleefer6@yandex.ru>2025-04-15 22:44:04 +0300
committerspl3g <spleefer6@yandex.ru>2025-05-01 14:59:18 +0300
commitba1f63c6c5137dc9a7c8550ff2f1f052377a0091 (patch)
treeeee3c5159119b8359d03cd97a1bd8b7a41dec13e /home-manager/homeModules/attachments/hypr-scripts/switch-sink.py
parent841ee4137d95f7ed5aafd7f8e29c94e12e712665 (diff)
feat(hyprland): cleanup scripts
Diffstat (limited to 'home-manager/homeModules/attachments/hypr-scripts/switch-sink.py')
-rwxr-xr-xhome-manager/homeModules/attachments/hypr-scripts/switch-sink.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/home-manager/homeModules/attachments/hypr-scripts/switch-sink.py b/home-manager/homeModules/attachments/hypr-scripts/switch-sink.py
new file mode 100755
index 0000000..a043238
--- /dev/null
+++ b/home-manager/homeModules/attachments/hypr-scripts/switch-sink.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import subprocess
+
+status = subprocess.run(["wpctl", "status"], stdout=subprocess.PIPE).stdout.decode('utf-8')
+status_lines = status.split('\n')
+sink_line = 0
+sinks = []
+sink_names = []
+
+# Get sink line
+for i in range(len(status_lines) - 1):
+ if 'Sinks:' in status_lines[i]:
+ sink_line = i + 1
+ break
+
+# Find unused sinks
+for line in status_lines[sink_line:]:
+ if line == ' │ ':
+ break
+ line = line.split('.')
+ nums = line[0]
+ name = line[1]
+ end_name = line[1].index('[')
+ sink = nums[8:]
+ if nums[4] == '*':
+ continue
+
+ sinks.append(sink)
+ sink_names.append(name[:end_name].strip())
+
+if (len(sinks) == 0):
+ subprocess.run(["notify-send", "Pipewire sink", "No sinks to switch to"])
+ exit(0)
+
+selected_sink = subprocess.run(["rofi", "-dmenu"], input="\n".join(sink_names), capture_output=True, text=True).stdout[:-1]
+
+if len(selected_sink) == 0:
+ exit(0)
+
+try:
+ next_sink = sink_names.index(selected_sink)
+except Exception:
+ subprocess.run(["notify-send", "Pipewire sink", "Sink not found"])
+ exit(1)
+
+subprocess.run(["wpctl", "set-default", sinks[next_sink]])
+
+subprocess.run(["notify-send", "Pipewire sink", "Selected " + selected_sink])