Skip to content
Configuration

Configuration

rommate reads ~/.config/rommate/config.toml on every system, including macOS and Windows. If $XDG_CONFIG_HOME is set, it uses $XDG_CONFIG_HOME/rommate/config.toml instead. rommate init creates the file for you, readable only by your user because it holds your API token.

~/.config/rommate/config.toml
server  = "https://romm.example.com"
# local_server = "http://romm.local:8080"   # used whenever it answers
token   = "rmm_…"
profile = "es-de"        # es-de | emudeck | retrodeck
# rom_dir = "/run/media/armada/Games/ROMs"   # default: taken from the profile
# hints = "auto"         # footer hints: auto | keyboard | controller
# gamepad = "auto"       # read controllers directly on Linux: auto | off
# confirm_quit = true    # ask before quitting the TUI
# auto_sync_saves = true # sync saves when the TUI starts and before it quits
# covers = true          # download cover art into ES-DE's media folder
# media_dir = "~/ES-DE/downloaded_media"   # default: taken from ES-DE / the profile

# Use a different folder for individual RomM platforms
[folders]
# gba = "gba-hacks"

Settings

Most of these can also be changed in the TUI’s Settings tab.

KeyDefaultDescription
serverYour RomM address, for example https://romm.example.com.
local_serverOptional address of the same RomM server on your home network, e.g. http://romm.local:8080. See below.
tokenA RomM Client API Token (rmm_…).
profilees-deWhich frontend’s folder layout to use; see below.
rom_dirfrom the profileThe folder that holds one sub-folder per platform.
hintsautoFooter hints in the TUI: auto, keyboard or controller.
gamepadautoRead game controllers directly on Linux (auto) or only use keys (off).
auto_sync_savestrueSync saves when the TUI starts and before it quits. See Save sync.
coverstrueDownload each game’s cover into the frontend’s media folder. See Folder mapping.
media_dirfrom ES-DE / the profileThe frontend’s media folder (ES-DE’s downloaded_media).
confirm_quittrueAsk before quitting the TUI with Start or q. With running downloads it always asks.
[folders]Per-platform folder overrides, keyed by RomM slug.

Profiles

All supported frontends use ES-DE’s platform folder names. They only differ in where the ROM folder lives:

ProfileROM folder
es-deThe ROMDirectory from ~/ES-DE/settings/es_settings.xml, otherwise ~/ROMs
emudeck~/Emulation/roms
retrodeck~/retrodeck/roms

Set rom_dir when your games live somewhere else, for example on an SD card.

Environment variables

These override the config file, which is handy for testing or for running rommate from scripts:

VariableOverrides
ROMMATE_SERVERserver
ROMMATE_LOCAL_SERVERlocal_server
ROMMATE_TOKENtoken
ROMMATE_ROM_DIRrom_dir
ROMMATE_HINTShints
ROMMATE_GAMEPADgamepad
ROMMATE_AUTO_SYNC_SAVESauto_sync_saves (true / false)
ROMMATE_CONFIRM_QUITconfirm_quit (true / false)
ROMMATE_COVERScovers (true / false)
ROMMATE_MEDIA_DIRmedia_dir

Local server

At home, downloads are faster when they don’t take the detour through the internet. Set local_server to the address of your RomM server on the local network, and keep server as the public address:

~/.config/rommate/config.toml
server       = "https://romm.example.com"
local_server = "http://romm.local:8080"

On every start, rommate checks whether the local server answers (it waits at most three seconds) and uses it if it does; otherwise it uses server. The TUI shows · local next to the server name while it uses the local address. You can also set it during setup with rommate init --local-server http://romm.local:8080.

.local names work on every system, including Linux handhelds: rommate resolves them over mDNS itself, the same way Avahi and macOS do. When a host announces several addresses (common with Docker or Kubernetes), rommate tries them all at once and keeps the one that answers.

Where rommate keeps its state

rommate records what it downloaded in a small database at ~/.local/state/rommate/state.db (or $XDG_STATE_HOME/rommate/state.db). You can delete it at any time: rommate recognises games that are already on disk and records them again on the next pull.

Last updated on