#!/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)"