#!/bin/bash

set -e

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

# FIXME Purge old files and use this one

# File this script will modify, in addition to (potentially) the per-user sentinel file
CONF_FILE="/etc/sddm.conf.d/zz-steamos-autologin.conf"

SENTINEL_FILE="steamos-session-select"

# For sanity this shipped file must be present, to ensure we're still on a normal-looking steamos setup.
CHECK_FILE="/etc/sddm.conf.d/manjaro.conf"

session="${1:-gamescope}"
session_type="x11"

session_launcher=""
create_sentinel=""

if [[ "$2" == "--sentinel-created" ]]; then
	SENTINEL_CREATED=1
	if [[ "$3" == "x11" ]]; then
		session_type="x11"
	elif [[ "$3" == "wayland" ]]; then
		session_type="wayland"
	fi
fi

# Update config sentinel
if [[ -z $SENTINEL_CREATED ]]; then
	[[ $EUID == 0 ]] && die "Running $0 as root is not allowed"

	[[ -n ${HOME+x} ]] || die "No \$HOME variable"
	config_dir="${XDG_CONF_DIR:-"$HOME/.config"}"
	session_type=$(
		cd "$HOME"
		mkdir -p "$config_dir"
		cd "$config_dir"
		if [[ -f "steamos-session-type" ]]; then
			cp steamos-session-type "$SENTINEL_FILE"
		else
			echo "x11" >"$SENTINEL_FILE"
		fi
		cat "$SENTINEL_FILE"
	)

	# If we were executed as a session user and then re-execute as root below, we don't want to set root's sentinel too
	export SENTINEL_CREATED=1
fi

case "$session" in
plasma-wayland-persistent)
	systemctl disable --now inputplumber || true
	session_launcher="plasmawayland.desktop"
	;;
plasma-x11-persistent)
	systemctl disable --now inputplumber || true
	session_launcher="plasma.desktop"
	;;
plasma)
	systemctl disable --now inputplumber || true
	if [[ "$session_type" == "x11" ]]; then
		session_launcher="plasma-steamos-oneshot.desktop"
	else
		session_launcher="plasma-steamos-wayland-oneshot.desktop"
	fi
	create_sentinel=1
	;;
gamescope)
	systemctl disable --now inputplumber || true
	session_launcher="gamescope-wayland.desktop"
	;;
opengamepadui)
	session_launcher="gamescope-session-opengamepadui.desktop"
	;;
*)
	echo >&2 "!! Unrecognized session '$session'"
	exit 1
	;;
esac

echo "Updated user selected session to $session_launcher"

# Become root
if [[ $EUID != 0 ]]; then
	exec pkexec "$(realpath $0)" "$session" --sentinel-created "$session_type"
	exit 1
fi

{
	echo "[Autologin]"
	echo "Session=$session_launcher"
} >"$CONF_FILE"

echo "Updated system autologin session to $session_launcher"
systemctl reset-failed sddm
systemctl restart sddm
echo "Restarted SDDM"
