#!/usr/sbin/openrc-run
# OpenRC translation of the former SysV nodm.init
# Copyright: 2026 Aitor <aitor@genuen.org>
# License: CC0-1.0

description="Automatic Display Manager (nodm)"

command="/usr/sbin/nodm"
pidfile="/run/nodm.pid"

HEED_DEFAULT_DISPLAY_MANAGER="${HEED_DEFAULT_DISPLAY_MANAGER:-true}"
DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager

depend() {
	need localmount
	use logger dbus
	after bootmisc elogind x11-common
	provide xdm display-manager
}

_nodm_load_defaults() {
	NODM_ENABLED=no
	NODM_FIRST_VT=7
	NODM_XSESSION=/etc/X11/Xsession
	NODM_OPTIONS=
	NODM_X_OPTIONS="-nolisten tcp"
	NODM_USER=root
	NODM_MIN_SESSION_TIME=60
	NODM_X_TIMEOUT=300

	[ -f /etc/default/nodm ] && . /etc/default/nodm

	export NODM_XSESSION NODM_X_OPTIONS NODM_USER NODM_MIN_SESSION_TIME
	export NODM_FIRST_VT NODM_X_TIMEOUT
}

start_pre() {
	[ -x "$command" ] || return 1

	_nodm_load_defaults

	case "${NODM_ENABLED}" in
		no|false|NO|FALSE)
			einfo "Not starting nodm; NODM_ENABLED=${NODM_ENABLED} in /etc/default/nodm"
			return 1
			;;
	esac

	_xs=${NODM_XSESSION%% *}
	[ -x "$_xs" ] || {
		eerror "NODM_XSESSION not executable: ${NODM_XSESSION}"
		return 1
	}

	if [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ] && \
		[ "$HEED_DEFAULT_DISPLAY_MANAGER" = "true" ]; then
		if [ "$(cat "$DEFAULT_DISPLAY_MANAGER_FILE" 2>/dev/null)" != "$command" ]; then
			einfo "Not starting nodm; it is not the default display manager"
			return 1
		fi
	fi

	if [ -x /bin/plymouth ]; then
		/bin/plymouth quit || true
	fi
}

start() {
	start_pre || return $?
	_nodm_load_defaults
	ebegin "Starting ${RC_SVCNAME}"
	start-stop-daemon --start --quiet --oknodo \
		--pidfile "$pidfile" --make-pidfile --background \
		--exec "$command" -- ${NODM_OPTIONS}
	eend $?
}

stop() {
	ebegin "Stopping ${RC_SVCNAME}"
	start-stop-daemon --stop --quiet --retry 10 \
		--pidfile "$pidfile" --oknodo
	ret=$?
	rm -f "$pidfile"
	eend $ret
}
