The Abora OS build system combines Nix flakes with a set of shell scripts, all exposed through a singleDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/AnimatedGTVR/abora-os/llms.txt
Use this file to discover all available pages before exploring further.
Makefile entrypoint. Running make iso invokes scripts/build-iso.sh, which calls nix build against the flake’s packages.x86_64-linux.iso output and copies the finished image into out/iso/. Everything else — TinyPM packaging, release metadata, QEMU testing — follows the same pattern of thin make targets delegating to dedicated scripts.
Requirements
Before running any build target, you need:- Nix with the
nix-commandandflakesexperimental features enabled - QEMU for local VM testing (
make qemuand related targets)
If your Nix installation does not have flakes enabled system-wide, the build scripts set You can also set this in your shell profile or in
NIX_CONFIG automatically before calling nix build:/etc/nix/nix.conf to avoid it being set on every build invocation.Flake Outputs
Theflake.nix exposes the following outputs:
| Output | Type | Description |
|---|---|---|
packages.x86_64-linux.iso | Package | The live ISO image |
packages.x86_64-linux.modularity | Package | Modularity game engine package |
packages.x86_64-linux.mango | Package | Mango package |
nixosModules.installed-base | Module | Installed Abora base module |
nixosModules.anix | Module | ANIX NixOS module |
overlays.default | Overlay | nixpkgs overlay adding modularity and mango packages |
Build Targets
ISO and Release
- ISO only
- Metadata only
- TinyPM package
- TinyPM image
- Full release
Builds the ISO and writes it to
out/iso/. Use this for fast live-image and installer iteration.QEMU Testing
All QEMU targets delegate toscripts/run-qemu.sh with different environment variables controlling the boot mode.
make qemu
Boot the latest ISO in a QEMU graphical window.
make qmec and make qemc are aliases for this target.make qemu-fresh
Delete the old QEMU disk image and boot the ISO — the standard clean install test.
make qemu-disk
Boot the installed QEMU virtual hard drive without attaching the ISO. Use this after completing a
qemu-fresh install to verify the installed system.make qemu-serial
Boot in headless mode — all QEMU output goes to the current terminal instead of a graphical window.
make qemu-fresh-serial
Combines a fresh disk wipe with headless output. Useful for CI-style unattended install testing.
Checks and Preflight
Run script checks
Validates syntax, executability, and runtime behaviour of every shell script in the repo, verifies required files are tracked by git, and evaluates the Nix flake.
Evaluate all desktop profiles
Runs
nix-instantiate against all 21 supported desktop profiles to catch configuration regressions before building the ISO.Vendoring Modularity
The Modularity game engine is not bundled in the repo. Usemake setup-modularity to extract it from an official Linux zip into vendor/modularity/:
setup-modularity is not declared in the .PHONY list in the Makefile. It is a real Makefile target and works correctly, but it is not protected against a file named setup-modularity existing in the repo root. In practice this is not an issue, but it is worth knowing if you are working on the Makefile itself.ISO Naming Convention
The build script names the output ISO using the build date and the version read from theVERSION file:
out/iso/ always holds at most one ISO per version.
Build Output Structure
All generated artifacts land underout/. This directory is not treated as source and should not be committed.
make release run populates out/iso/, out/packages/, and out/release/ with everything needed to publish a GitHub release:
Project Layout Reference
The following table summarises the top-level directories that are relevant to the build system. See the full layout guide indocs/project-layout.md for the complete picture.
| Path | Purpose |
|---|---|
Makefile | Command entrypoint for all build, check, QEMU, and release targets |
flake.nix / flake.lock | Nix flake entrypoint and pinned nixpkgs dependency |
VERSION | Version string consumed by build-iso.sh and release-metadata.sh |
scripts/build-iso.sh | ISO-only build path |
scripts/release-metadata.sh | Checksums, manifest, and release notes generation |
scripts/package-tinypm.sh | TinyPM release package path |
scripts/run-qemu.sh | QEMU ISO, fresh-disk, disk-only, and serial helpers |
scripts/check-scripts.sh | Repo script and runtime sanity checks |
scripts/check-desktops.sh | Evaluates every supported desktop profile |
nix/profiles/live.nix | Live ISO profile and bundled installer assets |
nix/modules/installed-base.nix | Installed Abora base module |
nix/modules/anix.nix | ANIX NixOS module |
out/ | Generated build output — do not treat as source |