# Steam-TV-Box package list (live-build .list.chroot format: one package per line).
#
# This machine is a LOCAL gaming box first and a media station second: real GPU, real
# CPU, games run here rather than being streamed in. That is the difference from
# hosts/thin-client, which runs Steam *Link* (a client for a PC somewhere else) and
# needs no graphics performance at all.
#
# Because of that, this image is built against Debian trixie rather than the household
# default — see the debian_release note in tools/build-steam-tv-box-iso.sh. Mesa 22.3
# (bookworm) predates most of the driver work that current titles rely on, and a
# gaming box on an old Mesa is the one thing here that cannot be fixed later by
# rebuilding a config file.
#
# NOT in this list and installed by hooks instead:
#   steam-installer, steam-devices  -> 0300-steam.hook.chroot (needs `dpkg
#     --add-architecture i386` + `apt-get update` first, and live-build installs
#     package lists BEFORE it runs hooks, so it cannot be done from here)
#   the i386 halves of the graphics stack -> same hook, same reason
#   Spotify, Prism Launcher          -> 0400-flatpak-apps.hook.chroot (Flathub)

# --- Wayland compositor / session ---
sway
swayidle
swaybg
# Steam, Prism Launcher's Minecraft windows and most native games are X11 clients, so
# Xwayland is load-bearing here rather than a nicety.
xwayland
greetd
foot

# --- Remote view/control (same wayvnc-with-a-mandatory-password posture as the thin
#     client; it is for administering the box, not for playing over) ---
wayvnc

# --- Graphics: the amd64 half. The i386 half is installed by 0300-steam.hook.chroot
#     after multiarch is enabled, and 32-bit games/Proton runtimes genuinely still
#     need it in 2026. ---
mesa-vulkan-drivers
mesa-va-drivers
mesa-vdpau-drivers
libgl1-mesa-dri
libglx-mesa0
libvulkan1
# vulkaninfo/vkcube — the fastest way to answer "is this box actually accelerated?"
# from the maintenance shell before blaming a game.
vulkan-tools
# glxinfo, for the same question on the GL side.
mesa-utils
libva-drm2
vainfo

# --- Gaming runtime bits ---
# Lets a game ask the system for the performance governor while it runs and hand it
# back afterwards, instead of pinning this box to "performance" around the clock.
gamemode
# On-screen FPS/frametime overlay, opt-in per launch (MANGOHUD=1). Diagnostics, not
# decoration: it is how you tell a CPU-bound stutter from a GPU-bound one.
mangohud
# Controller support. Steam's own controller stack covers Steam games; these cover
# everything outside it (Prism/Minecraft, emulators, the browser).
joystick
evtest
bluez
bluetooth
# Steam's runtime and many native titles link against these directly.
libsdl2-2.0-0
libopenal1
# Proton/Wine prerequisites that apt will otherwise pull only as recommends.
cabextract
p7zip-full
# Xbox/PlayStation pad firmware, plus the general non-free firmware blobs a real GPU
# needs. Requires the contrib + non-free + non-free-firmware archive areas, which
# tools/build-steam-tv-box-iso.sh passes to `lb config`.
firmware-linux
firmware-amd-graphics
firmware-realtek
firmware-iwlwifi
firmware-misc-nonfree

# --- Browser / media (the "same media functions as the other monitor clients" half) ---
firefox-esr
mpv
mpv-mpris
libmpv2
playerctl
# wev prints the keysym for each key press — how to find out what a given TV remote's
# buttons actually send. Same reasoning as the thin client's.
wev

# --- Audio ---
pipewire
pipewire-pulse
pipewire-alsa
wireplumber
alsa-utils
# 32-bit games play through pipewire-pulse's ALSA/Pulse shim; libpulse0:i386 comes with
# the i386 batch in 0300-steam.hook.chroot.

# --- Flatpak apps: Spotify and Prism Launcher (0400-flatpak-apps.hook.chroot) ---
flatpak
# Portals — Flatpak apps use these for file pickers and screen sharing under Wayland.
# Without them Prism's "choose a Java binary" dialog and Spotify's file dialogs come up
# empty rather than failing loudly, which is a confusing way to lose an evening.
xdg-desktop-portal
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk

# --- Java for Prism Launcher's own use ---
# Prism can download its own JREs, but only if it has network at the time. Shipping
# both the LTS and the current runtime means Minecraft launches offline too: 8 for
# anything pre-1.17, 21 for current versions.
openjdk-21-jre
openjdk-8-jre

# --- Agent runtime ---
python3
python3-venv
# trixie ships paho-mqtt 2.x; steamtv_agent is written against both the 1.x and 2.x
# callback APIs (see make_client() in main.py), so apt's package is used as-is.
python3-paho-mqtt
procps

# --- Networking ---
network-manager

# --- Out-of-band admin ---
openssh-server
sudo

# --- Session plumbing ---
# session-watcher parses `swaymsg -t subscribe` events with jq; the sway config's
# workspace logic depends on it.
jq
# HDMI-CEC (cec-ctl) for turning the TV itself on and off — steamtv_agent/display_power.py.
v4l-utils
# media-player talks to a running mpv over its JSON IPC socket (mpv.conf's
# input-ipc-server) so a second `media-player <file>` loads into the existing window
# instead of opening a competing MPRIS player.
socat

# --- Misc ---
ca-certificates
curl
openssl
less
vim-tiny
git

# NOTE: gamescope is NOT listed here on purpose. It is the right way to run Big
# Picture on a TV (integer-scaled, its own framerate limiter, no compositor tearing),
# but its availability in the target release was not verified from this environment —
# 0300-steam.hook.chroot installs it if apt has it and steam-big-picture falls back to
# plain Xwayland if it does not, so a missing gamescope costs polish rather than a
# broken image.
# NOTE: NVIDIA users — see 0300-steam.hook.chroot. The driver is not in this list
# because it must not be installed on an AMD/Intel box, and which one this is comes
# from `gpu_vendor` in CoreSystemConfig.json.
