Quickstart
Three TOML files describe an Aves build:
| File | Scope | Purpose |
|---|---|---|
aves.toml | Workspace | Pins nixpkgs, sets policy, picks a runtime. |
aves_manifest.toml | Project | Picks the board and the packages to build. |
packages/<name>/package.toml | Package | Defines a single buildable component. |
Plus board files at boards/<name>.toml.
1. Edit the manifest
aves_manifest.toml:
[nixpkgs]
channel = "nixos-25.05"
[project]
name = "my-device"
board = "feather_nrf52840_express"
[packages.nrf52-adafruit-uf2-bootloader]
version = "0.10.0"
2. Build
aves build
You’ll see something like:
fetch nrf52-adafruit-uf2-bootloader@0.10.0
toolchain gcc-arm-embedded, gnumake, python3, adafruit-nrfutil
build feather_nrf52840_express
✓ build/nrf52-adafruit-uf2-bootloader/feather_nrf52840_express/bootloader.uf2
3. Find the output
Artifacts land at:
build/<package>/<board>/*.{uf2,hex,zip}
The exact extensions depend on the package’s [build] outputs globs —
see Packages.
What happened
- The CLI read
aves.tomlto resolve the pinnednixpkgsrevision and thenix-portableruntime. - It read
aves_manifest.tomlto learn the board (feather_nrf52840_express) and the package list (just one bootloader). - For each package, it cloned the source into
~/.local/share/aves/src/<pkg>/, evaluated the[build] inputsas Nix expressions, opened a sandbox, and ran the[build] commandinside it with{board}substituted from the manifest. - Files matching
[build] outputsglobs were copied intobuild/<package>/<board>/.
Because both the toolchain and the package versions are pinned, the same workspace produces byte-identical artifacts on any machine.