summary refs log tree commit diff
path: root/bin/audm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbin/audm31
1 files changed, 27 insertions, 4 deletions
diff --git a/bin/audm b/bin/audm
index 58a5a91..33abb34 100755
--- a/bin/audm
+++ b/bin/audm
@@ -17,7 +17,9 @@ main() {
 	source=$(inspect_node '@DEFAULT_SOURCE@' | awk -F\\t '{print $2}')
 	fuzl_action_add 'change_source' "󰍰" "$source"
 
-	fuzl_action_add 'change_profile' "󰔡" "Change profile"
+	fuzl_action_add 'change_profile' "󱟲" "Change profile"
+
+	fuzl_action_add 'mixsource' "󱡫" "Mix source into sink"
 
 	fuzl_action_menu || exit 1
 }
@@ -67,11 +69,11 @@ audm_change_profile() {
 
 	device=$(pw-dump | jq -rc --arg class "Audio/Device" \
 		'.[]|select((.info.props["media.class"]//"")|test($class))|.info.props|[.["object.id"],.["device.description"],.["device.nick"]]|join("\t")' |
-		FUZL_PROMPT='device' fuzl_menu $FUZL_MENU_FILTER --with-nth='{2}  {3}' --accept-nth='{1}\t{2}')
+		FUZL_PROMPT='device' fuzl_menu $FUZL_MENU_FILTER --with-nth='{2}  {3}')
 	test -n "$device" || main
 
-	did=$(printf %s "$device" | awk -F\\t '{print $1}')
-	dname=$(printf %s "$device" | awk -F\\t '{print $2}')
+	did=$(awk -F\\t '{print $1}' <<<"$device")
+	dname=$(awk -F\\t '{print $2}' <<<"$device")
 
 	profile=$(pw-dump | jq -r --argjson did "$did" \
 		'.[]|select(.id==$did)|.info.params.EnumProfile[]|[.index,.description]|join("\t")' |
@@ -81,4 +83,25 @@ audm_change_profile() {
 	fuzl_try -- wpctl set-profile "$did" "$profile"
 }
 
+audm_mixsource() {
+	sink=$(inspect_node '@DEFAULT_SINK@' | awk -F\\t '{print $1}')
+	sink_json=$(pw-dump -R "$sink" | jq -rc --argjson id "$sink" '.[]|select(.id==$id)')
+	sink_node=$(jq -rc '.info.props["node.name"]' <<<$sink_json)
+	sink_ports=$(jq -r '.info.params.PortConfig[]|select(.direction=="Input")|.format.position[]' <<<$sink_json)
+
+	source=$(inspect_node '@DEFAULT_SOURCE@' | awk -F\\t '{print $1}')
+	source_json=$(pw-dump -R "$source" | jq -rc --argjson id "$source" '.[]|select(.id==$id)')
+	source_node=$(jq -rc '.info.props["node.name"]' <<<$source_json)
+	source_ports=$(jq -rc '.info.params.PortConfig[]|select(.direction=="Output")|.format.position[]' <<<$source_json)
+
+	for source_port in $source_ports; do
+		for sink_port in $sink_ports; do
+			(
+				pw-link --passive "$source_node":capture_"$source_port" "$sink_node":playback_"$sink_port" ||
+					pw-link --disconnect "$source_node":capture_"$source_port" "$sink_node":playback_"$sink_port"
+			) &
+		done
+	done
+}
+
 main