Skip to content

Contributor Roadmap

Suggested reading order for packaging, NixOS modules, and upstream contribution. Skips day-2 ops; follow the Operator path for that. This page is a curated reading order only — no runnable example.

Goals

  • Write and review Nix confidently enough to land packages and modules
  • Navigate nixpkgs layout, contribution norms, and CI/review expectations
  • Author and upstream NixOS modules; use flakes as a development and delivery workflow
  • Know which evaluator/features/RFCs matter before you depend on them

Prerequisites

  • Comfortable with a shell and git (branches, PRs, rebases)
  • Have run Nix or NixOS at least once (install or rebuild). If not, skim Beginner first
  • Optional but useful: one language you will package (Python, Node, Rust, Go, …)

Reading order

1. Mental model (light)

2. Language

3. Store and build surface

4. nixpkgs packaging and contribution

5. NixOS modules (authoring, not operating)

6. Flakes as contributor workflow

7. Experimental features (awareness)

8. Dev tooling for contribution

9. History, governance, and implementations

Scenario paths (pick one track)

First nixpkgs package PRsimple package + example corpuspackaging builders cheatsheetcustom package and overlay flake (worked example)fetchers and pinning → language builders (Python/Node/Rust/Go, Haskell, JVM/PHP/others as needed) → tests and passthruofborg and CIreview process.

NixOS module upstreamwriting a module + minimal-module.nixmodule system internals when merge/specialArgs bite → custom optionsservice patternsupstreaming modules.

Flake library / devShellflake.nix schema + hello-flakeproject devShell and direnv (worked example)packages / apps / devShellschecks and hydraJobsCI with NixFlake CI with GitHub Actions (worked example).

Private inputs in CIaccess tokensprivate flakes and CIconfig repo layout when the flake is a fleet mono-repo.

Debugging eval failuresscoping and shadowinglazinesspurity boundariespure eval and impuredebugging evaluationFAQ: common errors.

Hash / fetch breakagefixed-output derivation + fod-fetchurl.nixdebugging buildsfetchers and pinning.

Experimental feature in a PRfeature flags overview → specific leaf (e.g. ca-derivations) → tracking stabilization; stamp behavior in commit message / PR text.

Example corpus (shared fixtures)

Reusable snippets under meta/examples/ — cite from your docs/PRs; not a second tutorial track. Multi-file walkthroughs: 16-configuration-examples. Validate fixtures locally when Nix is installed: node meta/examples/validate.mjs.

Next steps

  • Pick one concrete contribution: a package bump/add, a module fix, or an RFC comment — then work the relevant scenario path above as a checklist
  • Shared snippets: meta/examples (hello-flake, overlay-snippet, minimal-module, …)
  • Eval/build symptom shortcuts: FAQ: common errors (IFD, FOD hash mismatch, pure-eval failures)
  • Ask upstream after a minimal repro: Getting help and community
  • Use glossary when terms collide; track wiki gaps in todo-coverage
  • Switch to Operator only if you need install/rebuild/maintenance order, not for packaging or module design

See also