initial commit
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# ttg-batocera-store — the Teletype Games store for Batocera
|
||||
|
||||
Puts the <https://teletypegames.org> catalog into a Batocera box's ROM folders,
|
||||
with EmulationStation metadata and box art. Triggered from the **Ports** menu on
|
||||
the device, or from the CLI over SSH.
|
||||
|
||||
This repository is only the store definition — `config.json` plus a wrapper
|
||||
installer. All the logic lives in the shared engine,
|
||||
[`warp-engine-batocera-store`](https://git.teletypegames.org/tools/warp-engine-batocera-store),
|
||||
which works with any WarpEngine-based site; this is just the Teletype Games
|
||||
configuration of it.
|
||||
|
||||
## Install
|
||||
|
||||
Straight onto the device:
|
||||
|
||||
```sh
|
||||
curl -fsSL https://git.teletypegames.org/tools/ttg-batocera-store/raw/branch/master/install.sh | bash
|
||||
```
|
||||
|
||||
Or from a checkout of this repo:
|
||||
|
||||
```sh
|
||||
scp -r ttg-batocera-store root@batocera:/tmp/
|
||||
ssh root@batocera /tmp/ttg-batocera-store/install.sh
|
||||
```
|
||||
|
||||
The installer fetches the engine, drops it and this config in
|
||||
`/userdata/system/batocera-store/ttg/`, writes the `ttg-store` launcher and the
|
||||
*Teletype Games Store* Ports entry, and runs the first sync. Restart
|
||||
EmulationStation (`batocera-es-swissknife --restart`) to see the games.
|
||||
|
||||
## Use
|
||||
|
||||
**On the device.** *Ports ▸ Teletype Games Store*. It downloads anything new,
|
||||
then restarts EmulationStation. Ports scripts get no console in Batocera, so the
|
||||
output goes to `/userdata/system/batocera-store/ttg/store.log`.
|
||||
|
||||
**Over SSH.**
|
||||
|
||||
```sh
|
||||
S=/userdata/system/batocera-store/ttg-store
|
||||
|
||||
$S list # compatible catalog entries; * installed, ^ update available
|
||||
$S sync # download everything new, refresh gamelists
|
||||
$S sync blessingofra # just one title (never prunes)
|
||||
$S -n sync # dry run
|
||||
$S remove c64demo # uninstall
|
||||
$S config # effective configuration
|
||||
```
|
||||
|
||||
Global flags go before the subcommand: `$S --roms-root /tmp/roms sync`.
|
||||
|
||||
## What this store installs
|
||||
|
||||
| Catalog platform | Asset kind | Batocera system | Extension |
|
||||
| --- | --- | --- | --- |
|
||||
| `c64` | `cartridge` | `c64` (VICE) | `.prg` |
|
||||
| `tic80` | `cartridge` | `tic80` | `.tic` |
|
||||
|
||||
Statuses `released` and `archived`, whole catalog, no owner filter. Everything
|
||||
lands under the `teletypegames/` subfolder of each system, so a prune can never
|
||||
reach ROMs you put there yourself. To change any of it, edit
|
||||
`/userdata/system/batocera-store/ttg/config.json` on the box — the full key
|
||||
reference is in the engine's README.
|
||||
|
||||
## Where things land
|
||||
|
||||
```
|
||||
/userdata/system/batocera-store/
|
||||
├── ttg-store launcher
|
||||
└── ttg/
|
||||
├── store.py, config.json
|
||||
└── state.json, catalog.json, store.log
|
||||
|
||||
/userdata/roms/c64/teletypegames/ blessingofra-2.0.0.prg, rabbit-1.0.0.prg, …
|
||||
/userdata/roms/c64/teletypegames/images/ blessingofra.png, …
|
||||
/userdata/roms/c64/gamelist.xml our entries merged in
|
||||
/userdata/roms/ports/Teletype Games Store.sh
|
||||
```
|
||||
|
||||
## Upgrading from the pre-split `batocera-store`
|
||||
|
||||
The old repo installed everything into `/userdata/system/ttg-store`. Re-running
|
||||
the install command above migrates it: `state.json` is carried over, the old
|
||||
directory is renamed to `ttg-store.pre-split`, and the Ports entry is replaced
|
||||
in place. The ROMs themselves never move, so nothing is re-downloaded. Delete
|
||||
`/userdata/system/ttg-store.pre-split` once the new install looks right.
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"store": {
|
||||
"id": "ttg",
|
||||
"name": "Teletype Games",
|
||||
"base_url": "https://teletypegames.org",
|
||||
"api": {
|
||||
"catalog": "/api/software",
|
||||
"download": "/api/download"
|
||||
}
|
||||
},
|
||||
|
||||
"paths": {
|
||||
"roms_root": "/userdata/roms",
|
||||
"subfolder": "teletypegames"
|
||||
},
|
||||
|
||||
"emulationstation": {
|
||||
"folder_name": "Teletype Games",
|
||||
"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 }
|
||||
},
|
||||
|
||||
"behavior": {
|
||||
"prune": true,
|
||||
"timeout": 30,
|
||||
"insecure": false
|
||||
}
|
||||
}
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# Install the Teletype Games store on a Batocera box.
|
||||
#
|
||||
# curl -fsSL https://git.teletypegames.org/tools/ttg-batocera-store/raw/branch/master/install.sh | bash
|
||||
#
|
||||
# All the work is done by the shared engine; this script only says which store
|
||||
# to install. See https://git.teletypegames.org/tools/warp-engine-batocera-store
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
FORGE="${FORGE:-https://git.teletypegames.org}"
|
||||
ENGINE_RAW_BASE="${ENGINE_RAW_BASE:-$FORGE/tools/warp-engine-batocera-store/raw/branch/master}"
|
||||
# Only set when run as a file; piped from curl "$0" is `bash` and everything
|
||||
# has to come from the forge — never from whatever the cwd happens to hold.
|
||||
SRC_DIR=""
|
||||
if [ -f "$0" ]; then
|
||||
SRC_DIR="$(cd "$(dirname "$(readlink -f "$0")")" && pwd)"
|
||||
fi
|
||||
|
||||
# Prefer the config next to this script when run from a checkout.
|
||||
if [ -z "${STORE_CONFIG:-}" ] && [ -n "$SRC_DIR" ] && [ -f "$SRC_DIR/config.json" ]; then
|
||||
STORE_CONFIG="$SRC_DIR/config.json"
|
||||
else
|
||||
STORE_CONFIG="${STORE_CONFIG:-$FORGE/tools/ttg-batocera-store/raw/branch/master/config.json}"
|
||||
fi
|
||||
export STORE_CONFIG ENGINE_RAW_BASE
|
||||
|
||||
# Keep the Ports entry the box already has, so an upgrade replaces it in place.
|
||||
export BATOCERA_PORT_NAME="${BATOCERA_PORT_NAME:-Teletype Games Store}"
|
||||
|
||||
# --- migrate the pre-split ttg-store layout -------------------------------
|
||||
# Up to engine 1.x everything lived in /userdata/system/ttg-store. The ROMs
|
||||
# themselves do not move (the subfolder is still `teletypegames`), so carrying
|
||||
# state.json across is enough to avoid a full re-download.
|
||||
LEGACY_HOME="${LEGACY_STORE_HOME:-/userdata/system/ttg-store}"
|
||||
NEW_HOME="${BATOCERA_STORE_ROOT:-/userdata/system/batocera-store}/ttg"
|
||||
|
||||
if [ -d "$LEGACY_HOME" ] && [ ! -f "$NEW_HOME/state.json" ]; then
|
||||
echo "[install] migrating $LEGACY_HOME -> $NEW_HOME"
|
||||
mkdir -p "$NEW_HOME"
|
||||
if [ -f "$LEGACY_HOME/state.json" ]; then
|
||||
cp "$LEGACY_HOME/state.json" "$NEW_HOME/state.json"
|
||||
fi
|
||||
if [ -f "$LEGACY_HOME/ttg-store.log" ]; then
|
||||
cp "$LEGACY_HOME/ttg-store.log" "$NEW_HOME/store.log"
|
||||
fi
|
||||
rm -rf "$LEGACY_HOME.pre-split"
|
||||
mv "$LEGACY_HOME" "$LEGACY_HOME.pre-split"
|
||||
echo "[install] old install kept at $LEGACY_HOME.pre-split — delete it once things look right"
|
||||
fi
|
||||
|
||||
curl -fsSL "$ENGINE_RAW_BASE/install.sh" | bash
|
||||
Reference in New Issue
Block a user