bin/i3lock-custom

109 lines
3.7 KiB
Bash
Executable File

#! /usr/bin/env bash
#
# i3lock-custom.bash
# Copyright (C) 2018 salt <salt@lap-th-e560-0>
#
# Distributed under terms of the MIT license.
#
tmpdir="$(mktemp -d "/tmp/i3lock-custom-$(whoami)-XXXXXXXX")"
[ -z ${tmpdir+x} ] && exit 2
cleanup() {
rm -rf "$tmpdir"
[ -z "$i3lockpid" ] || kill "$i3lockpid"
[ -z "$conkypid" ] || kill "$conkypid"
}
trap "cleanup" EXIT
# Papirus Dark's object-locked.svg, rendererd, gzipped and base64'd
# Also recolored to Gruvbox colors
# Licensed under the terms of the GPLv3.0 License
# https://github.com/PapirusDevelopmentTeam/papirus-icon-theme
lockimg_gz() {
cat << EOF
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
Mf8AFA6UTfQFAAA=
EOF
}
step_produce_image() {
(
# Really wanna make damn sure that we handle this well
set +e
umask 077
cd "$tmpdir" || exit
# I know this is inefficient but it's an easier solution than parsing
# xrandr
import -window root scrot.bmp
lockimg_gz | base64 -d | gunzip > lock.png
rectangle="rectangle $(convert scrot.bmp -print "0,0 %w,%h" /dev/null)"
# Do the do
# Output is in PNG so i3lock doesn't OOM
convert \
scrot.bmp \
-fill \#383c4a\
-draw "$rectangle" \
lock.png -gravity center -compose src-over -composite \
"$HOME/.face" -gravity center -geometry 128x128+0-264 -compose src-over -composite \
end.png
)
return $?
}
step_start_i3lock() {
i3lock -i "$tmpdir/end.png" &
i3lockpid="$!"
}
step_start_conky() {
i=0
while ! xprop -name "i3lock" > /dev/null 2>&1; do
i=$(( i + 1 ))
if [ "$i" -eq "100" ]; then
return 1
fi
sleep 0.01
done
conkyconfig="$HOME/.config/conky/i3lock.conf"
[ -r "$conkyconfig" ] || return 2
conky -c "$conkyconfig" &
conkypid="$!"
}
step_wait() {
wait
exit 0
}
main() {
step_produce_image || exit 1
step_start_i3lock
step_start_conky
step_wait
}
main "$@"