Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

exonix

A Nix flake that turns the eXo preservation catalogs into one-command, ready-to-play retro games. Pick a game, run a single command, and exonix fetches just that title from the catalog you already use, checks it's intact, and launches it on a well-maintained emulator. No manual setup, no fiddling with emulator config — it just runs.

exonix doesn't include any games itself; you supply those from the eXo catalog, which you download on your own machine. What exonix gives you is the glue that makes each title launch cleanly with one command.

Catalogs

Each catalog lives under its own name. You run a game as nix run github:matteo-pacini/exonix#<catalog>.<game>.

Catalog Games What it is
dos 7,666 Classic MS-DOS games from eXoDOS v6.0.4 — adventure, action, strategy, RPGs and more from the DOS era, each set up to run as it originally did.
scummvm 832 Point-and-click and other adventure games from eXoScummVM 2026.1.0, run through ScummVM. exonix sets each game up so ScummVM just runs it.
win9x 664 Windows 9x games from eXoWin9x 1994–1996 v1 — each runs as a preconfigured Windows 9x VM on DOSBox-X (635 games) or 86Box (29 games), using shared parent OS VHDs so each game boots without its own Windows copy.

Getting started

You'll need Nix with flakes enabled. exonix works on Linux and macOS (Intel and Apple Silicon), and the emulators come prebuilt from the binary cache so there's nothing to compile.

Search the catalog for a game:

$ nix search github:matteo-pacini/exonix prince of persia
* packages.x86_64-linux.dos.prince-of-persia-1990
  eXoDOS: Prince of Persia (1990)
* packages.x86_64-linux.dos.prince-of-persia-2-the-shadow-and-the-flame-1993
  eXoDOS: Prince of Persia 2 - The Shadow and The Flame (1993)

Then run one. A DOS game:

$ nix run github:matteo-pacini/exonix#dos.prince-of-persia-1990

Or a ScummVM game:

$ nix run github:matteo-pacini/exonix#scummvm.beneath-a-steel-sky-multi-platform

Some titles include several versions, and exonix will ask which one to play the first time and on every launch after that.

The first launch fetches just that one game from the eXo catalog, checks it against a known-good hash, unpacks it to your own writable folder, and starts the game. Every run after that is instant.

Changing a game's settings

DOS games

DOS games run on stock DOSBox, so you can adjust their settings two ways.

For a single session, pass options after --. Here we swap the CRT shader for a sharp one:

$ nix run github:matteo-pacini/exonix#dos.prince-of-persia-1990 -- --set glshader=sharp

Permanently, edit the game's config file. The first launch puts a writable copy in your state folder, so any change you make there sticks on every run:

$ $EDITOR ~/.local/state/exonix/dos/prince-of-persia-1990/prince-of-persia-1990.conf
# e.g. under [render]:
#   glshader = sharp

That path follows the pattern $XDG_STATE_HOME/exonix/dos/<game-id>/<game-id>.conf.

ScummVM games

The easy way is from inside the game — no files to edit. While playing, press Ctrl+F5 (Ctrl+fn+F5 on Mac) to open ScummVM's main menu, then click Options to change audio (volumes, subtitles) and graphics, and save your changes. A few handy in-game shortcuts also work right away: Alt+Enter toggles fullscreen, Ctrl+Alt+a toggles aspect-ratio correction, Ctrl+Alt+f toggles smoothing, Ctrl+Alt+s cycles stretch modes, and Ctrl+u mutes the sound.

To make a change stick permanently, edit the game's own config file. Launch the game once first (so the file is created), then open:

$ $EDITOR ~/.local/state/exonix/scummvm/<game-id>/<version>/scummvm.ini

Add or change settings under the game's own section (the one named after the game, not the global [scummvm] section). For example, to run Day of the Tentacle windowed with the OpenGL renderer and quieter music, under its [tentacle] section set:

fullscreen = false
gfx_mode = opengl
music_volume = 120

Other common keys: scaler and scale_factor, filtering, aspect_ratio, stretch_mode, subtitles, and sfx_volume / speech_volume (volumes range 0–256). That path follows the pattern $XDG_STATE_HOME/exonix/scummvm/<game-id>/<version>/scummvm.ini. Some titles bundle several versions (such as EGA, VGA, or FM-TOWNS), and exonix asks which one to play each time you launch them, while single-version titles just start; each version keeps its own settings and saves.

Windows 9x games

Windows 9x games run as full VMs (DOSBox-X for 635 titles, 86Box for 29), each booting a shared read-only Windows 98 (or Windows ME) parent VHD with the game's own data on a second drive. The parent VHD is fetched once and reused by every game; a fresh child VHD is created from it on each launch, so the OS state resets every time (matching the stock eXoWin9x behaviour) while your saves live on the game's data drive and persist across runs.

The first launch fetches the game's zip from the eXoWin9x torrent, unpacks it to your state folder, and boots the VM. Subsequent launches skip the fetch but still recreate the child OS VHD.

The 29 86Box games bundle the free 86Box ROM set, which nixpkgs marks as unfree, so they need unfree allowed — either set allowUnfree in your nixpkgs config, or run them as NIXPKGS_ALLOW_UNFREE=1 nix run --impure .#win9x.<game-id>. The DOSBox-X games need neither.

To change a game's settings, edit its config file. Launch the game once first (so the file is copied to your state folder), then open:

$ $EDITOR ~/.local/state/exonix/win9x/<game-id>/<game-id>.conf

DOSBox-X games use a standard DOSBox-X config — see the DOSBox-X documentation for all options. 86Box games use an 86Box VM config (<game-id>.cfg in the same folder). That path follows the pattern $XDG_STATE_HOME/exonix/win9x/<game-id>/<game-id>.conf (or .cfg for 86Box games).

MT-32 audio (optional)

Many of these games support Roland MT-32 music, and a lot of the MIDI titles sound their best with it. The MT-32 ROMs are copyrighted, so you supply your own legally-obtained copies. The ROMs are shared across every game in a catalog — you set them up once.

DOS games. Drop your Roland MT-32 (and optional CM-32L) ROMs into ~/.config/dosbox/mt32-roms/ (honouring $XDG_CONFIG_HOME). exonix points DOSBox at that folder on Linux and macOS alike, so you set the ROMs up once and the games that use MT-32 pick them up automatically. The filenames don't matter; DOSBox identifies the ROMs by checksum.

ScummVM games. Create the folder ~/.config/scummvm/mt32-roms/ (or $XDG_CONFIG_HOME/scummvm/mt32-roms/ if that variable is set) and drop your ROMs in, named exactly as follows (uppercase, with the .ROM extension):

MT32_CONTROL.ROM
MT32_PCM.ROM

If you have CM-32L ROMs instead, add CM32L_CONTROL.ROM and CM32L_PCM.ROM — ScummVM prefers those when present. These ROMs are shared across all your ScummVM games; there's no per-game setup.

(General-MIDI/SoundFont playback isn't covered out of the box: the eXoDOS configs reference a non-free Roland SoundCanvas SoundFont that isn't shipped, so for MIDI music prefer the MT-32 ROMs above.)

A note on game data

exonix includes no game files, ROMs, or other media — just the code that fetches and launches the games. You download titles from the eXo catalog you already use, on your own machine, and you're responsible for having the right to play any given title where you live. exonix isn't affiliated with or endorsed by the eXo project.

License

MIT — see LICENSE.

Releases

Packages

Contributors

Languages