#! /bin/bash
#
# bspwm-session
#
# This script is a session launcher for bspwm.
# It is based on similar scripts included with Openbox.

if [ -n "$1" ]; then
	echo "Usage: bspwm-session"
	echo
	exit 1
fi

# Multi-user support:
state_prefix=${XDG_CACHE_HOME:-"$HOME/.cache"}
mkdir -p "${state_prefix}"

if [ ! -d "${state_prefix}" ]; then
	echo "bspwm-session: cache directory ‘${state_prefix}‘ is missing."
	echo
	exit 1
elif [ ! -w "${state_prefix}" ]; then
	echo "bspwm-session: cache directory ‘${state_prefix}‘ is not writable."
	echo
	exit 1
fi

state_path=$(mktemp -d "${state_prefix}/bspwm-session.XXXXXX")

if [ $? -ne 0 ]; then
	echo "bspwm-session: failed to create state directory ‘${state_path}‘."
	echo
	exit 1
fi

export BSPWM_SOCKET=${state_path}/bspwm-socket

# Trap: make sure everything started in ~/.config/bspwm/autostart is
# signalled when this script exits or dies. Also clean up $state_path.
function on_exit {
	for child in $(jobs -p); do
		jobs -p | grep -q $child && kill $child
	done
	# Extra paranoia
	[[ -d "${state_path}" && -w "${state_path}" ]] && rm -rf -- "${state_path}"
}

trap on_exit EXIT SIGHUP SIGINT SIGTERM

# Environment and autostart:
source_these=(
	"/etc/profile"
	"${HOME}/.profile"
	"${XDG_CONFIG_HOME:-"$HOME/.config"}/bspwm/autostart"
)

for file in "${source_these[@]}"; do
	[ -r "${file}" ] && . "${file}"
done

# Launch sxhkd:
sxhkd &

# Launch bspwm:
bspwm
