3.0 KiB
3.0 KiB
Linux Game Manager Core Map
Last refreshed: 2026-02-21
Top-Level Structure
linux-game-manager.sh: Main orchestrator, UI wrappers, CLI option handling, install/remove/update flows, cache and settings behavior..install/: Per-game installer scripts sourced bygame_installer..launch/: Per-game launch scripts (.game) and runnable entries (.sh, usually symlinks)..update/: Optional per-game update scripts expected to definerun_update().speech/speak_window_title.sh: Accessibility helper for announcing focused window titles.README.md: Project summary and high-level behavior notes..files/: Game-specific auxiliary assets/scripts used by some installers or launchers.
Catalog Snapshot
- Installers: 38 (
.install/*.sh) - Launcher definitions: 38 (
.launch/*.game) - Launcher runnable entries: 26 (
.launch/*.sh, both symlinks and files) - Update scripts: 5 (
.update/*.sh)
Regenerate this snapshot with:
python3 .codex/skills/linux-game-manager-dev/scripts/audit_game_catalog.py
Main Runtime Flows
- Install flow
game_installerbuilds menu from.install/*.sh.- Selected installer is sourced in the current shell.
- If
.launch/<game>.gameexists and.launch/<game>.shdoes not, the manager creates a symlink.
- Launch flow
game_launcherenumerates.launch/*.shentries.- Entries with first line
#//are skipped. - Selected launcher is sourced/executed.
- Removal flow
game_removalresolves launcher entry to real script.- It extracts the first
installPath-containing line from launcher script to infer directory to remove. - If no
installPathreference is found, only launcher entry is removed.
- Update flow
game_updatelists.update/*.sh.- Selected updater is sourced.
run_update()is called and must exist.
CLI Surface
-i: install game-r: remove game-u: update game-t: show number of available games-C: clear cache-D: create desktop launcher-L: show license-h: show help-N: enable no-cache mode-R: force redownload mode
Config and State
- Cache:
${XDG_CACHE_HOME:-$HOME/.cache}/linux-game-manager - Config base:
${XDG_CONFIG_HOME:-$HOME/.config}/storm-games/linux-game-manager - Settings overrides:
settings.confin config base - Default install root:
${HOME}/.local/games
Contributor Pitfalls
- Mismatched
.install/<Game>.shvs.launch/<Game>.gamenames create orphaned or invisible entries. - Missing
installPathreference in launcher prevents full uninstall. game_removalparses the firstinstallPathmatch in launcher text, so comments containinginstallPathcan break removal path detection.- Missing
run_update()in.updatescripts breaks update flow. - Bypassing shared download helpers risks cache and validation regressions.
- For
uv-based Python games that needspeechd, copy host Pythonspeechdbindings into a game-local directory and exportPYTHONPATHfrom the launcher.