#!/bin/zsh --login

RUNDIR="/run/user/$(id -u)"
mkdir -m700 -p "$RUNDIR"
NEW_ERRFILE=$RUNDIR/xsession-errors
if [ -f "$ERRFILE" ]; then
  mv "$ERRFILE" $NEW_ERRFILE
elif [ -L /tmp/xsession-$LOGNAME ]; then
  mv $(readlink -f /tmp/xsession-$LOGNAME) $NEW_ERRFILE
  rm /tmp/xsession-$LOGNAME
fi
chmod 600 $NEW_ERRFILE
ln -sf $NEW_ERRFILE $HOME/.xsession-errors
exec >>$NEW_ERRFILE 2>&1

set -u

while :; do
  for script in $(run-parts --list $HOME/.xsession.d); do
    echo I: sourcing ${script:t}... >&2
    . $script
    echo I: done sourcing ${script:t}... >&2
  done

  [ -e $HOME/.xsession-exit ] && break

  echo "I: restarting xsession (touch $HOME/.xsession-exit to exit)..." >&2
done

rm -f $HOME/.xsession-exit

exit 0