diff options
| -rwxr-xr-x | bin/swdo | 82 |
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)" |