webstation-broker
DeveloperPython referenceemulators

emulators.eden

Eden (Nintendo Switch) launcher: ROM resolution, qt-config.ini patching, and SIGTERM shutdown.

Eden (Nintendo Switch) launcher: ROM resolution, qt-config.ini patching, and SIGTERM shutdown.

Eden has no save states and no external control API. Persistence is the game's own save data, which the emulated game commits directly to host files under the virtual NAND (nand/user/save/...). Save paths are keyed by the Switch profile UUID, so the profile store (nand/system/save/8000000000000010) ships with the saves; that way a save archive restored into a fresh container brings its matching profile along and the paths line up.

Shutdown: Eden's Qt frontend routes SIGTERM through the event loop into a normal window close (graceful emulation teardown). SIGINT is _exit(1) in Eden, so the broker never sends it. The close path pops a confirmation dialog unless the confirmStop UI setting is Ask_Never, so that is patched before every launch.

attributelog
= logging.getLogger(__name__)
attributeROM_ROOT
= Path(os.environ.get('ROM_ROOT', '/romm'))

Library root a resolved ROM must live under (env ROM_ROOT, default /romm).

attributeCONFIG_DIR
= Path(os.environ.get('EDEN_CONFIG_DIR', '/config/.config/eden'))

Eden's config directory (env EDEN_CONFIG_DIR, default /config/.config/eden).

attributeDATA_DIR
= Path(os.environ.get('EDEN_DATA_DIR', '/config/.local/share/eden'))

Eden's data directory holding the virtual NAND (env EDEN_DATA_DIR).

attributeINI_PATH
= CONFIG_DIR / 'qt-config.ini'

The qt-config.ini patched before every launch.

attributeEDEN_LOG_PATH
= Path(os.environ.get('EDEN_LOG_PATH', '/config/eden.log'))

The emulator log file (env EDEN_LOG_PATH, default /config/eden.log).

attributeROM_EXTENSIONS
= ('.xci', '.nsp', '.nca', '.nro')

Formats Eden's loader boots directly, best first; a folder holding several picks by this order.