explaingit

tomribbens/factorios

45PythonAudience · ops devopsComplexity · 4/5ActiveSetup · hard

TLDR

Joke Arch based Linux distro whose only job is to boot, log into factorio.com, pick a version and profile, and launch the game Factorio.

Mindmap

mindmap
  root((FactoriOS))
    Inputs
      factorio.com login
      Game version
      Save profile
    Outputs
      Bootable ISO
      Running Factorio session
      Per profile save data
    Use Cases
      Dedicate a PC to Factorio
      Build a Factorio kiosk
      Try a single purpose distro
    Tech Stack
      Python
      GTK4
      archiso
      pacman
      systemd

Things people build with this

USE CASE 1

Turn an old PC into a single purpose Factorio machine that auto launches the game

USE CASE 2

Build a slim 150 MB ISO that boots Factorio in a VM for quick testing

USE CASE 3

Set up a household Factorio kiosk where each player picks their own save profile

Tech stack

PythonGTK4Arch Linuxarchisopacmansystemd

Getting it running

Difficulty · hard Time to first run · 1day+

Build host needs archiso, pacman, base-devel, and erofs utils, and the system uses one shared factorios user with per player data kept only by directory.

In plain English

FactoriOS is described in the README as a joke Linux distribution whose only job is to play the game Factorio. After boot, the system shows a graphical login that takes the player's factorio.com credentials, then a chooser for picking a Factorio version and a save profile, and then the game itself. The README is explicit that there is nothing else on the system. The project is in early scaffolding. The pieces that work today are a Python launcher library that handles factorio.com login, version downloads, and profile management, a GTK4 greeter app that draws the login and chooser screens, an archiso profile that boots into the installer, and a shell installer that partitions the disk and lays down the system. The repository is organized into folders for each of these pieces, plus a packages folder with Arch PKGBUILDs and a systemd folder with the factorios.service unit. Building the ISO is a single command. Running ./build.sh produces a slim 150 MB ISO that works in virtual machines and on hardware with ethernet plus Intel or AMD graphics. Running ./build.sh full produces an 800 MB ISO that also includes linux firmware for WiFi and newer AMD or NVidia GPUs. The build needs archiso, pacman, base devel, and erofs utils on the host. GitHub Actions also builds the ISO on every push to main and uploads it as an artifact, and tag pushes build both ISOs and attach them to a GitHub Release. Updates work through pacman. The installer wires a project specific pacman repository hosted on GitHub Pages into the configuration of every installed system, so pacman -Syu upgrades both Arch packages and FactoriOS packages together. The greeter has an Updates button that calls pacman through a tightly scoped sudoers rule that only allows those two exact commands. The identity model is unusual. There are no normal Linux user accounts. A single system user called factorios runs every session, and per player data is kept under /var/lib/factorios/users/<factorio username>/, separated only by directory. A profile is a full Factorio write data directory containing saves, mods, configuration, achievements, and player data. Switching profiles re symlinks ~/.factorio at the selected one. Profiles are split between Vanilla and Space Age because mod compatibility differs between them, and ownership of the Space Age DLC is detected at login by probing the download endpoint. If the account only owns Vanilla, the build selector is hidden.

Copy-paste prompts

Prompt 1
Run build.sh in FactoriOS and boot the resulting ISO in QEMU with shared networking
Prompt 2
Add a new profile type to FactoriOS for a third Factorio mod pack alongside Vanilla and Space Age
Prompt 3
Swap the GTK4 greeter in FactoriOS for a Qt one and keep the same profile chooser behaviour
Prompt 4
Set up the FactoriOS pacman repo locally so I can publish my own package updates
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.