aboutsummaryrefslogtreecommitdiff
path: root/.config/bspwm/scripts/bspwm-monitor-setup
blob: 6e38bb7b62e8e0d134eac94b78ec41bbc35d9276 (plain)
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
#!/usr/bin/env bash

INTERNAL_MONITOR="eDP"
EXTERNAL_MONITOR="HDMI-A-0"

monitor_add() {
	# Move first 5 desktops to external monitor
	for desktop in $(bspc query -D --names -m "$INTERNAL_MONITOR" | sed 5q); do
		bspc desktop "$desktop" --to-monitor "$EXTERNAL_MONITOR"
	done
	# Remove default desktop created by bspwm
	bspc desktop Desktop --remove
	# reorder monitors
	bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR"
}

monitor_remove() {
	# Add default temp desktop because a minimum of one desktop is required per monitor
	bspc monitor "$EXTERNAL_MONITOR" -a Desktop

	# Move all desktops except the last default desktop to internal monitor
	for desktop in $(bspc query -D -m "$EXTERNAL_MONITOR"); do
		bspc desktop "$desktop" --to-monitor "$INTERNAL_MONITOR"
	done

	# delete default desktops
	bspc desktop Desktop --remove
	# reorder desktops
	bspc monitor "$INTERNAL_MONITOR" -o 1 2 3 4 5 6 7 8 9 10
}

if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then
	# set xrandr rules for docked setup
	xrandr --output "$INTERNAL_MONITOR" --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --primary --mode 1920x1080 --pos 1920x780 --rotate normal
	if [[ $(bspc query -D -m "${EXTERNAL_MONITOR}" | wc -l) -ne 5 ]]; then
		monitor_add
	fi
	bspc wm -O "$EXTERNAL_MONITOR" "$INTERNAL_MONITOR"
else
	# set xrandr rules for mobile setup
	xrandr --output "$INTERNAL_MONITOR" --primary --mode 1920x1080 --pos 0x0 --rotate normal --output "$EXTERNAL_MONITOR" --off
	if [[ $(bspc query -D -m "${INTERNAL_MONITOR}" | wc -l) -ne 10 ]]; then
		monitor_remove
	fi
fi

# Set wallpaper
~/.local/bin/setbg.sh &

# Kill and relaunch polybar
kill -9 $(pgrep -f 'polybar') >/dev/null 2>&1
polybar-msg cmd quit >/dev/null 2>&1
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
if [[ $(xrandr -q | grep "${EXTERNAL_MONITOR} connected") ]]; then
	polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- &
	polybar --reload secondary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-secondary.log 2>&1 200>&- &
else
	polybar --reload primary -c ~/.config/polybar/config.ini </dev/null >/var/tmp/polybar-primary.log 2>&1 200>&- &
fi