diff options
| author | Robert Günzler <r@gnzler.io> | 2026-09-27 17:38:39 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-09-27 17:38:39 +0200 |
| commit | 0860db73ae6fd9a6f6347219d820bf026a6b8b91 (patch) | |
| tree | 11318c3670d1c32c5aa0bf404c22fba3bf63fc53 /bin/audm | |
| parent | 4e34cbf9673aeaba252e01df554a0d204e83c5e2 (diff) | |
| download | dotfiles-0860db73ae6fd9a6f6347219d820bf026a6b8b91.tar.gz | |
Automated-commit-by: dots Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'bin/audm')
| -rwxr-xr-x | bin/audm | 31 |
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 |