summary refs log tree commit diff
path: root/bin/swdo
blob: 5e5e8541e1c435c06d4dd617744c1e49f78c5ced (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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)"