#!/usr/bin/env /lib/runit/invoke-run
#Copyright: 2022-2024 Lorenzo Puliti <plorenzo@disroot.org>
#           2026 Aitor <aitor@genuen.org>
#License: CC0-1.0

# Do not "sv -w 60 start dbus": that serializes boot and can hang on checks.
wait_system_bus() {
	_n=0
	while [ "$_n" -lt 40 ]; do
		if [ -S /run/dbus/system_bus_socket ]; then
			if command -v timeout >/dev/null 2>&1; then
				timeout 1 dbus-send --system --dest=org.freedesktop.DBus \
					--type=method_call /org/freedesktop/DBus \
					org.freedesktop.DBus.Peer.Ping >/dev/null 2>&1 && return 0
			else
				dbus-send --system --dest=org.freedesktop.DBus \
					--type=method_call /org/freedesktop/DBus \
					org.freedesktop.DBus.Peer.Ping >/dev/null 2>&1 && return 0
			fi
		fi
		sleep 0.2
		_n=$((_n + 1))
	done
	return 1
}

wait_system_bus || exit 170
sv up dbus >/dev/null 2>&1 || true
exec 2>&1

exec /usr/libexec/elogind
