Contributing
omaflake is one Swift package with the menu bar app, the omaf CLI and omaf-runner, plus the image flake in nix/ and the QEMU build in qemu/. Recipes are not here: they live in omaflake/recipes.
Build and test
swift build # everything
swift test # unit tests
scripts/sign-runner.sh # after changes to omaf-runner (Virtualization.framework entitlement)
scripts/bundle-app.sh # build/omaflake.app
After changes to Nix:
nix flake check
nix flake check "path:$PWD/nix"
nix flake check "path:$PWD/nix" --override-input omaflake-recipes "path:$PWD/../recipes/recipes"
To build images from recipes you are working on, add your checkout of omaflake/recipes as the first recipe source (omaf sources add <path> --first) and point omaflake at the image flake of your checkout (omaf config --flake "$PWD/nix"). Personal Nix settings for your guests go into nix/local/ (git-ignored; template nix/local.example/).
Rules
- English in code, comments, documentation, UI and commits.
- Licence header: every new source file starts with
SPDX-License-Identifier: AGPL-3.0-or-later. - No personal data in tracked files – no names, user names, home paths, keys, host names.
- No secrets in the repository.
- Verified before claimed: check Nix options, QEMU parameters and Virtualization.framework API; mark what cannot be verified as
OPEN. - Files are an interface: a change to a file omaflake writes raises its version, adds a migration step and a new schema in
docs/schema/(file schemas). - Design and decisions are in the design (spec); findings carry ids
B…(general) andBM…(macOS).