aboutsummaryrefslogtreecommitdiff
path: root/bin/lock
blob: 2b8fc3abb2edfd788239c1ba6a27c27e5e975332 (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
#! /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
~/.local/kitty.app/bin/kitty \
		-c ~/.config/kitty/lock_screen.conf \
		-- ~/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
	~/.local/kitty.app/bin/kitty \
			-c ~/.config/kitty/lock_screen.conf \
			-- ~/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
bspc node ${SECONDARY_WINDOW} -k

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

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