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>
58 lines
1.0 KiB
JSON
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
|
|
}
|
|
}
|