Name: pocketds-steam Version: 20260517 Release: 20260717114522%{?dist} Summary: Native ARM64 Steam client + Proton 11 (ARM64) bootstrap for the AYANEO Pocket DS # Switchdeck (Source10/Source11) is GPL-3.0; the postinst/udev/spec # bits are GPL-3.0-or-later so the whole RPM is GPL-3.0-or-later. License: GPL-3.0-or-later URL: https://github.com/Azkali/Switchdeck # ── system entry points ── Source0: pocketds-steam Source1: steam.desktop # ── per-user bootstrap (Switchdeck-derived) ── Source10: pocketds-steam-bootstrap Source11: launch-steam.sh # ── per-user Proton 11 ARM64 installer + auto-default pin ── Source20: pocketds-steam-install-proton Source21: pocketds-steam-default-proton11 # ── user systemd units (oneshots fired by the preset on first login) ── Source30: pocketds-steam-bootstrap.service Source31: pocketds-steam-install-proton.service Source32: pocketds-steam.preset # ── system drop-ins ── Source40: 70-uinput.rules Source41: uinput.conf Source42: libvpx-compat.sh # ── gamescope Big Picture session (steamos autoboot) ── Source50: pocketds-gamescope-session Source51: pocketds-gamescope-session.desktop Source52: steamos-session-select Source53: pocketds-return-to-gaming.desktop Source54: 15-pocketds-steam-session.conf Source99: README.md BuildArch: noarch %global debug_package %{nil} BuildRequires: systemd-rpm-macros # Runtime deps for the user bootstrap + Proton install paths. Requires: wget Requires: unzip Requires: tar Requires: xz Requires: gzip Requires: coreutils Requires: file Requires: findutils Requires: procps-ng Requires: gawk # default-proton11 helper is Python; matches the python3 footprint we # already pull in via pocketds-userspace's mode-listener. Requires: python3 # `xdg-user-dir` for Switchdeck's launch-steam.sh user-desktop logic. Requires: xdg-user-dirs # libvpx-compat.sh needs libvpx.so.9 to exist before it'll shim .so.6. Requires: libvpx # Steam ARM client transitively expects these for SDL2 input + GTK2 chrome. Requires: SDL2 Requires: gtk2 # Steam Big Picture / steamwebhelper hard-links libnss; pull it in to # keep the bootstrap usable behind a captive-portal CDN. Requires: nss # /dev/uinput uaccess rule needs systemd-udev to actually apply. Requires: systemd-udev # Switchdeck's gamemode mode-2 stops/starts plasma-plasmashell; only a # soft dep so removing Plasma doesn't yank the package. Recommends: plasma-workspace # The steamos profile autologins into a gamescope wayland-session # (pocketds-gamescope-session). gamescope-flipds provides the compositor # that session execs, so it's a hard dep here — without it autologin # would land on an empty session. (Flip-DS fork; Conflicts: stock # gamescope, aarch64-only — both fine on the Pocket DS image.) Requires: gamescope-flipds %description Wraps Azkali/Switchdeck (GPL-3.0) into an RPM that ships the native ARM64 Steam client bootstrap, the Steam Linux Runtime (steamrt3c arm64), the Proton 11 ARM64 mod (Sildur build, ~1.09 GiB from archive.org), and the system-side bits the bootstrap needs: a /dev/uinput uaccess udev rule, an early-boot uinput modprobe drop-in, and a libvpx.so.6 → libvpx.so.9 compatibility symlink. Two user-systemd oneshots (auto-enabled by a preset) do the actual download + install on first login, then `pocketds-steam-default-proton11` pins Proton 11 ARM64 as the global Steam Play default by editing config.vdf — the user never has to touch Steam's Settings → Compatibility dialog. %prep # no build, sources are dropped in directly %build # nothing to build %install # ── system entry points ── install -D -m 0755 %{SOURCE0} %{buildroot}%{_bindir}/pocketds-steam install -D -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/applications/pocketds-steam.desktop # ── per-user bootstrap + Switchdeck launcher ── install -D -m 0755 %{SOURCE10} %{buildroot}%{_bindir}/pocketds-steam-bootstrap install -D -m 0755 %{SOURCE11} %{buildroot}%{_datadir}/pocketds-steam/launch-steam.sh # ── per-user Proton 11 ARM64 install + default-pin helper ── install -D -m 0755 %{SOURCE20} %{buildroot}%{_bindir}/pocketds-steam-install-proton install -D -m 0755 %{SOURCE21} %{buildroot}%{_bindir}/pocketds-steam-default-proton11 # ── user systemd units + preset ── install -D -m 0644 %{SOURCE30} %{buildroot}%{_userunitdir}/pocketds-steam-bootstrap.service install -D -m 0644 %{SOURCE31} %{buildroot}%{_userunitdir}/pocketds-steam-install-proton.service install -D -m 0644 %{SOURCE32} %{buildroot}%{_prefix}/lib/systemd/user-preset/95-pocketds-steam.preset # ── system drop-ins ── install -D -m 0644 %{SOURCE40} %{buildroot}%{_sysconfdir}/udev/rules.d/70-uinput.rules install -D -m 0644 %{SOURCE41} %{buildroot}%{_sysconfdir}/modules-load.d/uinput.conf # ── gamescope Big Picture session ── install -D -m 0755 %{SOURCE50} %{buildroot}%{_bindir}/pocketds-gamescope-session install -D -m 0644 %{SOURCE51} %{buildroot}%{_datadir}/wayland-sessions/pocketds-gamescope-session.desktop install -D -m 0755 %{SOURCE52} %{buildroot}%{_bindir}/steamos-session-select install -D -m 0644 %{SOURCE53} %{buildroot}%{_datadir}/applications/pocketds-return-to-gaming.desktop install -D -m 0644 %{SOURCE54} %{buildroot}%{_sysconfdir}/plasmalogin.conf.d/15-pocketds-steam-session.conf # ── /etc/pocketds-steam (empty dir for override files) ── install -d -m 0755 %{buildroot}%{_sysconfdir}/pocketds-steam # ── docs ── install -D -m 0644 %{SOURCE99} %{buildroot}%{_docdir}/%{name}/README.md %files %{_bindir}/pocketds-steam %{_bindir}/pocketds-steam-bootstrap %{_bindir}/pocketds-steam-install-proton %{_bindir}/pocketds-steam-default-proton11 %{_datadir}/applications/pocketds-steam.desktop %{_datadir}/pocketds-steam/launch-steam.sh %dir %{_datadir}/pocketds-steam %{_userunitdir}/pocketds-steam-bootstrap.service %{_userunitdir}/pocketds-steam-install-proton.service %{_prefix}/lib/systemd/user-preset/95-pocketds-steam.preset %{_sysconfdir}/udev/rules.d/70-uinput.rules %{_sysconfdir}/modules-load.d/uinput.conf %dir %{_sysconfdir}/pocketds-steam # ── gamescope Big Picture session ── %{_bindir}/pocketds-gamescope-session %{_bindir}/steamos-session-select %{_datadir}/wayland-sessions/pocketds-gamescope-session.desktop %{_datadir}/applications/pocketds-return-to-gaming.desktop %{_sysconfdir}/plasmalogin.conf.d/15-pocketds-steam-session.conf %doc %{_docdir}/%{name}/README.md %post # libvpx.so.6 shim — see libvpx-compat.sh header for rationale. We # splat the script body inline rather than installing it because it's # a one-shot %post action with no need to live on the filesystem. if [ -e /usr/lib64/libvpx.so.9 ] && [ ! -e /usr/lib64/libvpx.so.6 ]; then /usr/bin/ln -s libvpx.so.9 /usr/lib64/libvpx.so.6 || : fi # udev hwdb refresh so the uinput uaccess tag takes effect on the # already-loaded module without a reboot. /usr/bin/systemd-hwdb update >/dev/null 2>&1 || : /usr/bin/udevadm control --reload-rules >/dev/null 2>&1 || : /usr/bin/udevadm trigger --sysname-match=uinput >/dev/null 2>&1 || : # Try to load uinput now; on a chroot install this is a no-op (no live # kernel to load into) and the modules-load.d drop-in handles cold # boot instead. /usr/sbin/modprobe uinput >/dev/null 2>&1 || : %postun # Remove the libvpx shim only if it's still pointing at our target # and nobody else owns it. Skip on upgrade (`$1 -ge 1`). if [ "$1" -eq 0 ]; then if [ -L /usr/lib64/libvpx.so.6 ] && \ [ "$(/usr/bin/readlink /usr/lib64/libvpx.so.6)" = "libvpx.so.9" ]; then /usr/bin/rm -f /usr/lib64/libvpx.so.6 || : fi fi %changelog * Fri Jul 03 2026 Pocket DS Maintainers - %{version}-%{release} - First-boot fixes from PacoA's steamos-image report: * bootstrap: resolve the current client zip from Valve's publicbeta linuxarm64 manifest instead of a pinned (stale) URL hash, and extract the WHOLE zip instead of just steamrtarm64/steam — the old single-file extract forced the client to download ~55 files itself on first launch ("downloaded a bunch of stuff, got a lot of errors"). * gamescope session: if the Steam client is missing, run the bootstrap synchronously once and fall back to the Plasma desktop when it still isn't there (e.g. no Wi-Fi yet) — no more black screen + silent session exit. * bootstrap is normally a no-op on the steamos image now: the image builder pre-seeds client + runtime + package zips into /home/pocketds at build time (see fedora-pocketds-image-builder mkosi.sync / mkosi.postinst.chroot). * Wed Jul 01 2026 Pocket DS Maintainers - %{version}-%{release} - Autoboot to Steam Big Picture: ship a gamescope wayland-session (pocketds-gamescope-session + .desktop) that holds the top panel (DSI-1) for Steam's gamepad UI and ignores the bottom touchscreen. A plasmalogin drop-in (15-pocketds-steam-session.conf) re-points the autologin Session= at it on the steamos profile. steamos-session-select + a "Return to Gaming Mode" launcher toggle gaming/desktop at runtime. gamescope-flipds promoted to a hard Requires (the session execs it). * Sun May 17 2026 Pocket DS Maintainers - %{version}-%{release} - Initial package: Switchdeck-wrapped native ARM64 Steam client + Proton 11 ARM64 (Sildur build, archive.org mirror), with auto-pin of Proton 11 ARM64 as the global Steam Play default and a libvpx.so.6 Fedora compatibility shim.