This project turns the upstream
bryanthaboi/gen1recomp game (a
native LÖVE2D recreation of Pokémon Red / Blue / Yellow) into an RPM you can
install and launch on a Fedora/Nobara system (plus a Flatpak that runs on
any Flatpak-capable distro), while keeping the game's original architecture
and its built-in self-updater working.
No upstream game code is edited. The build is a pure wrapper/loader:
- It checks out the requested upstream release tag.
- It runs the project's own official packer (
scripts/pack_love.sh), which buildsgame.lovewith the release version stamped intosrc/core/Version.lua— exactly what upstream CI does. - It fuses that
game.loveonto the distro's LÖVE 11.5 runtime (the same "original architecture" upstream ships for its Windows/Mac builds), producing a single self-contained launcher executable. - It packages that fused launcher into an RPM with a
.desktopentry, an app icon taken from the upstream source, and the license.
Ready-built RPM and Flatpak packages are published as GitHub Releases automatically. Grab the latest from:
Each v* tag on this repo triggers the build-rpm GitHub Action, which
builds the newest upstream release and attaches both the RPM and the Flatpak
to that release. You can also browse all releases at
https://github.com/HellboundGlory/Gen1Linux/releases.
Fedora / Nobara (RPM):
sudo dnf install ./gen1recomp-<version>-1.<dist>.x86_64.rpm
Any Flatpak-capable distro (.flatpak bundle):
flatpak install ./Gen1Linux-<version>.flatpak
(The Flatpak pulls the org.love2d.love2d LÖVE runtime and the Freedesktop
platform automatically on install.)
A fused LÖVE executable reports love.filesystem.isFused() == true, which
activates the game's own updater (src/core/Boot.lua + src/update/Check.lua).
On every launch it checks the GitHub releases feed for a
gen1recomp-<newer>.love payload. When upstream tags a newer release, you
just open the launcher and press Update — the payload is downloaded,
sha256-verified, and chain-loaded on next launch. No RPM upgrade is ever
needed for game updates.
Important: this only works if the RPM is built from a release tag with a real version number (auto-detected as the newest tag). Building from
dev(./build_rpm.sh --dev) ships engine0.0.0-dev, which by design never self-updates — use it only if you want a dev snapshot.
sudo dnf install -y love git rpm-build zip unzip
love is a runtime dependency too (Requires: love >= 11.5), so dnf
pulls it automatically when you install the RPM — you only need it installed
beforehand so the build can fuse onto /usr/bin/love.
The app icon is taken from the upstream source
(assets/logo/gen1recomp_cover.png), so this packaging repo needs no icon of
its own. First clone the upstream source into gen1recomp/:
git clone https://github.com/bryanthaboi/gen1recomp.git gen1recomp
Then build (output goes to dist/):
./build_rpm.sh # builds the newest upstream release tag
./build_rpm.sh 0.1.78 # builds a specific release
./build_rpm.sh --dev # dev snapshot (NOT update-safe)
The Flatpak wraps the game on top of Flathub's official LÖVE base app
(org.love2d.love2d) and installs a thin launcher that runs the bundled
game.love, so it stays a pure wrapper (no game code changed). It reuses the
same version-stamped game.love that build_rpm.sh produces, so both
packages are always built from an identical archive.
sudo dnf install -y flatpak flatpak-builder imagemagick
./build_rpm.sh # first: creates build/game-<ver>.love (+ the RPM)
./build_flatpak.sh # then: builds dist/Gen1Linux-<ver>.flatpak
Note: inside the Flatpak sandbox the game is not a fused LÖVE executable, so the in-app self-updater banner behaves differently than in the RPM build — update the game by installing a newer Flatpak release from this repo.
The build-rpm GitHub Action runs on every v* tag push. To publish a new
build, create and push a tag — no code changes needed:
git tag v1.1
git push origin v1.1
CI then clones the upstream source, builds the newest upstream release, and attaches the resulting RPM to that tag's GitHub Release (release notes are generated automatically).
Grab the RPM from
GitHub Releases
(or build locally with ./build_rpm.sh), then:
sudo dnf install ./gen1recomp-0.1.79-1.fc44.x86_64.rpm
Then launch gen1recomp from your app menu. On first run it asks you to
drop/choose your own legally obtained US .gb/.gbc ROM (the package contains
NO ROM). Save data and downloaded updates live in
~/.local/share/love/pokemon-love2d.
build_rpm.sh— the RPM packager (checks out tag → pack_love.sh → fuse → rpmbuild)build_flatpak.sh— the Flatpak packager (wraps the same game.love on the LÖVE base)gen1recomp.spec— the RPM specgen1recomp.desktop— launcher desktop entryflatpak/— Flatpak manifest (io.github.hellboundglory.Gen1Linux.yml) + generated sources.github/workflows/build-rpm.yml— CI that builds the RPM + Flatpak on av*tag and attaches them to the releasegen1recomp/— upstream repository clone (created by the build / CI, not committed)rpmbuild/— rpmbuild workspace (SOURCES/RPMS/SPECS/...)dist/— built RPMs
- Fusion = concatenating
game.loveonto the LÖVE ELF binary. LÖVE detects the appended archive and boots as a fused game. - brp-strip caveat: Fedora's auto post-install
brp-striphook truncates the appended archive down to a ~10 KB stub, destroying the fused game. The spec disables the auto post-install steps (%global __os_install_post %{nil}) since this package ships no shared libs / man pages / bytecode that need them.