#!/bin/sh

DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"

die() {
    echo "$@" >&2
    exit 1
}

tmp_dir=$(mktemp -d)
[ -d "$tmp_dir" ] || die "Failed to create ready notification directory"
ready_pipe="$tmp_dir/fifo"
mkfifo "$ready_pipe" || {
    rmdir "$tmp_dir"
    die "Failed to create notification pipe"
    }

exec 3<> "$ready_pipe"
rm -r "$tmp_dir"

dbus-daemon --session --nofork --address=$DBUS_SESSION_BUS_ADDRESS --print-address=3 &

ready=$(timeout 120s head -1 <&3)

exec 3>&-

[ "${ready%,guid=*}" = "$DBUS_SESSION_BUS_ADDRESS" ] || die "Failed to start user session bus on $DBUS_SESSION_BUS_ADDRESS"

if [ "$XDG_RUNTIME_DIR" = "/run/user/$(id -u)" ]; then
    echo export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" >> "$XDG_RUNTIME_DIR/profile"
fi
