aboutsummaryrefslogtreecommitdiff
path: root/bin/lock
blob: d4404c1579df716af780979e0e67724c2835ae7c (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
#! /bin/bash

refocus_fullscreen_nodes() {
	while [ -z "$(pgrep -x permafocus)" ]; do sleep 1; done

	for NODE in ${FULLSCREEN_NODES}; do
		bspc node ${NODE} -t fullscreen
	done
}

if [ $(pgrep -x lock | wc -l) -gt 2 ]; then
	# Starting multiple screen lock instances may cause unintended side effects
	exit 0
fi

#
# Security
#

xkbcomp ~/.local/bspwm-setup/lockscreen.xkb $DISPLAY 2>/dev/null

killall -qw sxhkd polybar
dunstctl set-paused true

#
# UI
#

FOCUSED_MONITOR=$(bspc query -M -m)
FULLSCREEN_NODES=$(bspc query -N -n any.fullscreen)

bspc monitor -f 1
WINIT_X11_SCALE_FACTOR=1.0 ~/.cargo/bin/alacritty -e ~/bin/lockscr1 &

while [ -z "$(ps -C lockscr1 -o pid=)" ]; do sleep 1; done
while [ -z "$(ps -s $(ps -C lockscr1 -o pid=) -o pid=)" ]; do sleep 1; done
PRIMARY_WINDOW=$(bspc query -N -n)

if [ -n "$(xrandr --listmonitors | grep 'DP-2')" ]; then
	bspc monitor -f 2
	WINIT_X11_SCALE_FACTOR=1.0 ~/.cargo/bin/alacritty -e ~/bin/lockscr2 &

	while [ -z "$(ps -C lockscr2 -o pid=)" ]; do sleep 1; done
	while [ -z "$(ps -s $(ps -C lockscr2 -o pid=) -o pid=)" ]; do sleep 1; done
	SECONDARY_WINDOW=$(bspc query -N -n)
fi

refocus_fullscreen_nodes &

~/bin/permafocus ${PRIMARY_WINDOW} ${SECONDARY_WINDOW}

#
# Unlock
#

setxkbmap -rules /usr/share/X11/xkb/rules/evdev
dunstctl set-paused false

bspc node ${PRIMARY_WINDOW} -k

if [ -n "${SECONDARY_WINDOW}" ]; then
	bspc node ${SECONDARY_WINDOW} -k
fi

# Kill second tty-clock
kill -9 $(ps -s $(ps -C lockscr2 -o pid=) -o pid=)

bspc monitor -f ${FOCUSED_MONITOR}
bspc wm -r