Files
warp-engine-batocera-store/config.example.json
T
mr.zeroandClaude Opus 5 4be089f9c3 Install native games as Ports, not ROMs
The store could only offer what an emulator boots, which meant cartridges
and nothing else — a little under half the catalog. Batocera runs Linux
and its Ports system takes .sh launchers, so a native build can be
installed too; it just is not a ROM.

`install: "port"` unpacks the zip, finds the executable and writes a
launcher that cd's into its directory first, because a game loads assets
relative to the working directory. Python's extraction drops the
executable bit, so it is restored from the mode the archive records.

The payload lives under ports/.data/<subfolder>/, whose leading dot is
what hides it from EmulationStation, while the launchers sit in a normal
subfolder that gets scanned like any other system's. Both carry the store
subfolder, so an uninstall or prune cannot reach another store's files —
verified by pointing a state entry at a foreign namespace and watching it
be refused.

Verified end to end on aarch64 against the live catalog: bevydemo
installs as a port with an executable launcher and binary, re-syncs
without re-downloading 29 MB, and uninstalls taking its 106 MB payload
with it. `install` defaults to rom, so existing configs are unaffected.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 08:12:42 +02:00

58 lines
1.0 KiB
JSON

{
"store": {
"id": "example",
"name": "Example Store",
"base_url": "https://example.org",
"api": {
"catalog": "/api/software",
"download": "/api/download"
}
},
"paths": {
"roms_root": "/userdata/roms",
"subfolder": "example"
},
"emulationstation": {
"folder_name": "Example Store",
"restart": true
},
"catalog": {
"statuses": [
"released",
"archived"
],
"owner_id": null,
"only": [],
"exclude": []
},
"platforms": {
"c64": {
"system": "c64",
"kind": "cartridge",
"ext": ".prg",
"enabled": true
},
"tic80": {
"system": "tic80",
"kind": "cartridge",
"ext": ".tic",
"enabled": true
},
"bevy": {
"system": "ports",
"install": "port",
"kind": {
"x86_64": "linux_x64",
"aarch64": "linux_arm64"
},
"ext": ".zip",
"enabled": false
}
},
"behavior": {
"prune": true,
"timeout": 30,
"insecure": false
}
}