summary refs log tree commit diff
path: root/bin/swdo
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-09-28 19:28:16 +0200
committerRobert Günzler <r@gnzler.io>2022-09-28 19:28:16 +0200
commit6a7b9e12d12a212ddb515a58094e2af088976c51 (patch)
tree56a8658a710196daff6ef81cebcbabd682593439 /bin/swdo
parentc36556650b614c63b2bc5d00ea2f2088119315de (diff)
bin: add swdo
allow running arbitrary actions via menu
Diffstat (limited to 'bin/swdo')
-rwxr-xr-xbin/swdo82
1 files changed, 82 insertions, 0 deletions
diff --git a/bin/swdo b/bin/swdo
new file mode 100755
index 0000000..5e5e854
--- /dev/null
+++ b/bin/swdo
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+set -e
+[ -n "$DEBUG" ] && set -x
+
+export MENU_PROMPT='󰚗 swdo'
+ico=/usr/share/icons/mdi/scalable/developer-board.svg
+
+bail() {
+	notify-send -i "$ico" -c error "swdo: bailing" "$@"
+	exit 1
+}
+
+declare -A ACTIONS
+register_action() {
+	id="${1}"
+	action="${2}"
+	if [ -z "$action" ]; then
+		while read -r a; do
+			action="$action$a
+"
+		done
+	fi
+	ACTIONS["$id"]="$action"
+	echo "* register \"$id\""
+}
+run_action() {
+	id="${1}"
+	[[ -z $id ]] && return
+	action="${ACTIONS[$id]}"
+	[[ -z $action ]] && return
+	bash -c "set -ex; ${action}"
+}
+select_action() {
+	for a in "${!ACTIONS[@]}"; do echo "$a"; done | menu -l10
+}
+
+# ===== ACTIONS ===== #
+
+register_action "sway: move container to workspace" <<-EOF
+	ws=\$(swq list workspace | jq -r '.[].name' | grep -Ev '^_' | menu)
+	swaymsg move container to workspace \$ws
+EOF
+
+# register_action "[sway] move parent container to workspace" <<-EOF
+# 	    options=$(swaymsg -t get_tree | jq -r ".. | select(.type? == \"workspace\") | .name")
+# 	    o=$(for o in "${options[@]}"; do echo "$o"; done | menu)
+# 	    [[ -z $o ]] && return
+# 	    [[ $o =~ ^[0-9]+$ ]] && o="\$ws$o"
+# 	    sway focus parent
+# 	    sway move container to workspace "${o}"
+# 	    sway workspace "${o}"
+# 	    sway focus child
+# EOF
+
+# register_action "[sway] swap workspaces between 2 outputs" <<-EOF
+# 	    outputs=$(swaymsg -t get_tree | jq ".. | select(.type? == \"output\" and .name? != \"__i3\")")
+# 	    number_of_outputs=$(echo $outputs | jq \".name\" | wc -l)
+# 	    if [[ $number_of_outputs -ne 2 ]]; then
+# 	        bail "need exactly 2 outputs for this to work, sorry..."
+# 	    fi
+# 	    WORKSPACES=/run/user/$(id -u)/automation.workspaces_per_output
+# 	    touch $WORKSPACES
+# 	    workspaces_per_output=
+# 	    for output in $(echo $outputs | jq -r ".. | select(.type? == \"output\") | .name"); do
+# 	        for workspace in $(echo $outputs | jq -r ".. | select(.type? == \"output\" and .name? == \"${output}\") | .nodes | .. | select(.type? == \"workspace\") | .name"); do
+# 	            workspaces_per_output="$workspaces_per_output $workspace"
+# 	        done
+# 	        echo ${workspaces_per_output} >> ${WORKSPACES}
+# 	        workspaces_per_output=
+# 	    done
+# 	    cat ${WORKSPACES} | while read output; do
+# 	        echo $output | while read -d " " workspace; do
+# 	            sway [workspace="${workspace}"] focus
+# 	            sway move workspace to output "${output}"
+# 	        done
+# 	    done
+# 	    rm ${WORKSPACES}
+# EOF
+
+# ===== main ===== #
+run_action "$(select_action)"