#!/bin/sh
# greetd's default_session command. Installed to /usr/local/bin/kiosk-session.
#
# Exists so that MQTT_BROKER_HOST / HA_URL / GPU_VENDOR are in Sway's environment:
# sway's config file has no way to read an env file itself, but every `exec` line it
# runs inherits this process's environment, so sourcing here is what lets the session
# scripts read configuration without the sway config being templated.
set -eu

# An `if` rather than `[ -r … ] && . …`: under `set -e` the && form exits the whole
# script when the file is absent, which would leave greetd with a session that dies
# instantly and a black screen.
if [ -r /etc/steamtv-agent/config.env ]; then
  . /etc/steamtv-agent/config.env
fi
export MQTT_BROKER_HOST HA_URL GPU_VENDOR

export XDG_CURRENT_DESKTOP=sway
export XDG_SESSION_TYPE=wayland
export XDG_SESSION_DESKTOP=sway
export MOZ_ENABLE_WAYLAND=1

: "${XDG_RUNTIME_DIR:=/run/user/$(id -u)}"
export XDG_RUNTIME_DIR

# Steam's client, Proton, Prism's Minecraft windows and most native titles are X11
# applications. Telling them the display is 96dpi-normal and letting Xwayland scale is
# the sane default for a TV at 1-2m viewing distance; a 4K set that looks
# postage-stamp-sized wants this raised, not the compositor's scale changed (which
# would blur Big Picture).
export GDK_BACKEND=wayland,x11
export QT_QPA_PLATFORM="wayland;xcb"
export SDL_VIDEODRIVER=wayland,x11

# NVIDIA's driver still mishandles hardware cursor planes under wlroots on a number of
# releases; the symptom is an invisible or corrupt pointer, which on a box you drive
# with a gamepad is easy to miss until someone picks up a mouse. Harmless when set on
# hardware that doesn't need it, so it is scoped to the vendor rather than always on.
if [ "${GPU_VENDOR:-}" = "nvidia" ]; then
  export WLR_NO_HARDWARE_CURSORS=1
fi

exec sway
