#! /usr/bin/bash

set -e

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

CONF_FILE="/etc/sddm.conf.d/zz-skorionos-autologin.conf"
SENTINEL_FILE="steamos-session-select"
RETURN_SESSION_FILE="skorionos-session-return"

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

session="${1:-gamescope-session-steam}"
session_type="wayland"

session_launcher="gamescope-session-steam"
create_sentinel=""

if [[ "$2" == "--sentinel-created" ]]; then
  SENTINEL_CREATED=1
  session_type="wayland"
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 "wayland" >"$SENTINEL_FILE"
    fi
    cat "$SENTINEL_FILE"
  )

  return_session=$(grep "Session=" $CONF_FILE | cut -d = -f 2)
  return_session=$(
    cd "$HOME"
    mkdir -p "$config_dir"
    cd "$config_dir"
    echo "$return_session" >"$RETURN_SESSION_FILE"
    cat "$RETURN_SESSION_FILE"
  )

  # clear steam game desktop shortcut clutter
  DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
  grep -r --files-with-matches "Exec=steam steam://rungameid/" "${DATA_HOME}"/applications/ | tr '\n' '\0' | xargs -0 -I {} rm {} || true

  # 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

# We use "plasma" as "desktop" to hook up to SteamOS's scripts
case "$session" in
plasma-wayland-persistent)
  session_launcher="cinnamon-wayland"
  ;;
plasma-x11-persistent)
  session_launcher="cinnamon"
  ;;
desktop | plasma)
  session_launcher="cinnamon-session-oneshot"
  create_sentinel=1
  ;;
steam | gamescope-session-steam)
  session_launcher="gamescope-session-steam"
  create_sentinel=1
  ;;
*)
  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
  exit 1
fi

echo "Updated user selected session to $session_launcher"

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

systemctl reset-failed sddm
setsid sh -c 'exec systemctl restart sddm <> /dev/tty2 >&0 2>&1'
echo "Restarted SDDM"
