Skip to content
Menu
WorkflowSkills, tmux and the daily loopToolsai-usagebarQuota and reset times for 24 AI providersghpendingEvery open PR and issue in one listtclockA terminal clock with command widgetsai-memoryLong-term memory for coding agentsai-jailAn OS sandbox for AI coding agentsWritingThe blog and the LLM benchmarkNewsletterThe M.Akita Chronicles, every MondayPodcastsLong conversations about AI, on videoGamesMy game collection as code, on OmarchySetupOmarchy, tmux, and what I set asideFollow
After hours

Not everything is work. Even I need to play.

And my idea of relaxing is, of course, turning my game collection into a software project. Steam games, emulators, PC ports, decompilations, fan games and mod packs, all installed, configured and documented by AI agents in one Ansible repository. It runs inside a container, so my Omarchy desktop never sees a single one of their dependencies. On top sits a launcher I wrote, so the whole thing feels like a console.

My games launcher on Omarchy: a fullscreen grid of 52 game covers including Banjo-Kazooie Recompiled, OutRun, the Colin McRae Rally series, Donkey Kong Country and DOOM 3, with category chips and sort buttons on top.
The launcher on my desktop: every game, port and emulator in one grid, whatever it runs on underneath.

The host stays clean

Emulators and Windows games drag in 32-bit libraries, Wine builds, AUR packages and runtime versions that fight each other. None of that touches my desktop. It all lives in one Arch Linux distrobox called gaming, Steam included, and the host keeps only what the desktop needs.

Two panels. Without a container: a Host tower buried under a tangle of library blocks with red Conflicts warnings. With distrobox: the same Host clean with a green dot, and next to it an orange gaming container holding the same blocks in tidy rows, with an Ansible recipe labelled Rebuild anytime.
  • Steam runs inside the box, with my library and its Proton prefixes on their own disk
  • The NVIDIA driver is passed through, and the one 32-bit library edge case is fixed in the launcher, never on the host
  • The box renders desktop entries; a small host script validates and installs them, and removes the ones for apps that are gone
  • Saves are mirrored to my NAS and restored on demand, so wiping the box loses nothing

Idempotent, so I can break it

Every emulator, config, patch and mod set is an Ansible role. Running the playbook a second time changes nothing, so I can experiment freely, reset a single emulator's settings, or rebuild the whole box from scratch and get the same machine back.

from the ansible/ folder
ansible-playbook site.yml                 # the whole box, from scratchansible-playbook site.yml                 # again: nothing changesansible-playbook reset-configs.yml --tags esde   # reset one frontendansible-playbook backup.yml && ansible-playbook restore.ymlansible-playbook site.yml --tags verify   # post-setup checks
96
notes in docs/, one per game, port or fix
497
commits since April 11, 2026

AI does the research, and writes it down

For every port, recompilation or stubborn Windows game, an agent researched the sources, wrote the Ansible role and left a note with where to get it, how it is set up and what did not work. Steam games have their own compatibility database under Proton, with each local fix backed by a source.

How to use it

The easiest way is to let an agent do it. Clone the repository, open Claude Code inside it, and tell it which container and games you want. The playbooks and notes are written for exactly that.

clone and open
git clone https://github.com/akitaonrails/distrobox-gamingcd distrobox-gamingclaude

Set up the gaming container with ES-DE, Dolphin and PCSX2. My ROMs and BIOS files are in /path/to/your/games.

The repository ships no games, ROMs, BIOS or other binaries. You bring your own and tell the agent where they are.

What is in the box

Emulators

ES-DE as the frontend, plus standalone shadPS4, Dolphin, PCSX2, DuckStation, Flycast, xemu, RPCS3, PPSSPP, Azahar, Eden, Cemu, Supermodel and RetroArch with its cores.

Ports, decomps and recomps

Native builds such as Ship of Harkinian, 2Ship2Harkinian, Starship, SpaghettiKart, Render96ex and Unleashed Recompiled.

Windows games

Wine-managed installs and fixes for games like Colin McRae Rally, OutRun 2006 and the Metal Gear Master Collection.

Mods, reproducibly

NexusMods mod sets per game, DLC and patch installers for PS3 and Switch, and per-game RPCS3 settings.

My own launcher, made for Omarchy

omarchy-games-menu is a Steam-like fullscreen launcher for Omarchy and Hyprland. It reads the desktop entries the gaming repository exports, so a new game shows up by itself, and it puts everything a keybinding away.

Three layers: a Host slab, an orange distrobox container labelled gaming holding Emulators and PC ports with an Ansible recipe, and a Launcher grid of cover art on top.
  • A Rust CLI, ogm, does the scanning, catalog and persistence; a QuickShell overlay draws the grid
  • Cover art and metadata from SteamGridDB, and new-release checks on GitHub for ports and recomps
  • Sorted by most played, name, date added or release date; type anywhere to filter
  • Scales with Hyprland's monitor setting, opens with one key such as Super+G, and games open fullscreen on a dedicated workspace
terminal
yay -S omarchy-games-menu-binogm scan && ogm refreshgames-menu   # or bind it: bind = SUPER, G, exec, games-menu

Everything here is open source

The tools, the skills and the benchmark are public repositories. Fork them and build the version that fits the way you work.