Skip to content

Contributing

Before submitting changes, ensure:

  1. All Nix files are formatted — Run nix fmt before committing
  2. All tests pass — Run nix flake check
  3. Commit messages follow Conventional Commits — e.g., feat:, fix:, chore:
Command Description
nix flake check Validate configuration and run all tests
nix fmt Format all code (nixfmt, deadnix, statix, shellcheck, yamlfmt, typos, actionlint)
devenv shell Enter development shell with necessary tools (no experimental features needed)
nix flake show Display all flake outputs
nix run Run a QEMU VM with all features enabled (x86_64-linux)

nix fmt runs multiple tools:

  • nixfmt — Nix code formatting
  • deadnix — Unused variable detection
  • statix — Nix linting
  • shellcheck — Shell script linting
  • yamlfmt — YAML formatting
  • typos — Spell checking
  • actionlint — GitHub Actions workflow linting

All must pass. CI enforces formatting with nix fmt -- --ci.

  1. Create the module file in the appropriate modules/ subdirectory — modules/nixos/ and modules/home/ are auto-discovered, so no import edit is needed; only modules/darwin/default.nix is a hand-curated import list
  2. Define new options in a file under modules/nixos/options/ (auto-discovered) under marchyo.*
  3. Add an evaluation test in tests/eval/<feature>.nix
  4. Run nix fmt and nix flake check

See Adding Modules for detailed instructions.

Follow the Conventional Commits specification:

feat: add support for custom wallpapers
fix: resolve audio crackling on PipeWire
chore: update flake inputs
docs: add keyboard configuration guide
refactor: simplify GPU vendor detection