Skip to content

Linux AppImage for SteamOS-like handhelds (+ Docker build, widescreen) - #1

Merged
Comfubar merged 1 commit into
Comfubar:mainfrom
AdamLovattDevOps:linux-steamos-widescreen
Oct 1, 2026
Merged

Comfubar merged 1 commit into
Comfubar:mainfrom
AdamLovattDevOps:linux-steamos-widescreen

Conversation

@AdamLovattDevOps

@AdamLovattDevOps AdamLovattDevOps commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Adds a native Linux build of the port, packaged as a single self-contained AppImage, aimed at SteamOS-like handhelds (Steam Deck, Legion Go, ROG Ally on Bazzite/SteamOS) and desktop Linux. No Proton is needed, and no .NET install on the device.

Depends on Comfubar/RecompOne-PS1Ports#1 (widescreen and the handheld menu bar). This PR bumps the RecompOne submodule to that commit, so it needs merging after that one.

What's added

  • tools/linux/build-appimage.sh [disc.cue]: recompiles from the player's own disc, runs dotnet publish -r linux-x64 --self-contained, and packages dist/KnowYourRole-x86_64.AppImage with appimagetool, run with --appimage-extract-and-run so it works without FUSE (containers, WSL).
  • tools/linux/Dockerfile: the build environment (.NET 10 SDK, git, curl, python3), so no local SDK is needed:
    docker build -t kyr-linux tools/linux
    docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/src" -v "/path/to/disc:/disc:ro" kyr-linux "/disc/Game.cue"
    
  • tools/linux/AppRun:
    • keeps saves, settings and logs in ~/.local/share/KnowYourRoleRecomp (via RECOMPONE_DATA_DIR/RECOMPONE_LOG_DIR), since an AppImage is read-only;
    • takes the disc from an argument, $KYR_DISC, or disc.txt, and fills CdPath in settings.json while it's empty, because WaitForValidDisc only checks the saved path. Otherwise the game shows its own picker as usual.
  • README: a new "Linux and SteamOS handhelds (AppImage)" section.
  • .gitignore: adds publish/.

No Windows code paths change. The runtime was already cross-platform (Silk.NET SDL2/GL/OpenAL, and user32 is only used behind OperatingSystem.IsWindows()).

Testing

  • Built through the Dockerfile from a clean state: recompile, publish and package take about 3 minutes, and the output is owned by the calling user.
  • Ran on a Legion Go 2 (Bazzite, Radeon 890M, GL 4.6) as a non-Steam game in Game Mode:
    • boots straight into the game from disc.txt;
    • intro FMV, menus, character select and an exhibition match in progress all work;
    • the built-in controller is picked up through SDL;
    • widescreen auto gives 16:10 on the 1920×1200 panel.
  • The AppImage contains code generated from the player's disc. The README tells people not to share it, and nothing from the disc is committed (disc/ and generated/ are already ignored).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bv5RE3i31GtUaGF5wSNaCm

…time

tools/linux/build-appimage.sh recompiles from the player's own disc, publishes a
self-contained linux-x64 build and packages it as a single AppImage (no .NET
needed on the device). tools/linux/Dockerfile provides the build environment
(.NET 10 SDK, git, curl, python3), so no local SDK is needed. AppRun keeps
saves/settings/logs in ~/.local/share/KnowYourRoleRecomp and fills CdPath from
disc.txt, since the runtime validates the disc from settings.json.

Bumps RecompOne to the widescreen + handheld menu bar change. README: new
"Linux and SteamOS handhelds (AppImage)" section. Tested on a Legion Go 2
running Bazzite in Steam Game Mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bv5RE3i31GtUaGF5wSNaCm
@Comfubar
Comfubar merged commit 32cf030 into Comfubar:main Oct 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants