OpenSSF baseline policy¶
This repository uses the OSPS Baseline version 2026.08.28 as its security policy reference. The policy applies to the reusable modules, deployed configuration examples, documentation site, CI, and source history.
Current assessed status¶
The current self-assessment
records OSPS Baseline Level 2 for version 2026.08.28. The project does
not claim Level 3. OSPS-QA-07.01 at Level 3 requires every change to receive
approval from at least one human reviewer who did not author it. The project
currently has one maintainer, and the protected main branch requires zero
approving reviews. This control is unmet in the published assessment,
so the Baseline badge displays Level 2. A future Level 3 claim needs both the independent
review process and an evidence-backed assessment of all other Level 3 controls.
Project scope¶
nix-conf publishes reusable NixOS, nix-darwin, and Home Manager modules. The host definitions are maintained deployment examples, not installation templates. This repository does not currently publish a compiled release asset. A future source release must use a unique immutable tag, a change log, integrity evidence, and the release process documented here before it is announced. The SLSA scope and future builder contract are documented in docs/slsa.md.
This repository is part of the related projects listed in the nix-forge project security contract. Related repositories enforce the same minimum security contract or a stricter one for their own code and release surfaces.
Change and build controls¶
Every commit must carry a matching Signed-off-by trailer. The DCO file
defines the certificate and .github/workflows/dco.yml checks proposed
non-merge commits on pull requests and merge-group refs.
All workflows start with permissions: {}. Jobs grant only the scopes they
need, checkout does not persist credentials, and actions use full commit SHAs.
Pull requests and merge groups run the required checks before protected main
can advance. CI includes flake lock health, dependency review, CodeQL,
repository hooks, generated documentation checks, and the test suites that
cover the affected configuration.
Use the repository's pinned development environment and run the smallest affected checks from the testing guide. The normal baseline set is:
nix flake check --show-trace
just hooks
python3 -m unittest discover -s tests
Host builds are evaluated separately from deployment. Never put credentials, private identities, or plaintext secret fixtures in a flake, a test, or a workflow. Major configuration changes add or update an observable test and explain the migration in the pull request.
Release and dependency controls¶
Flake inputs, nested lockfiles, package pins, and generated references are reviewed with their security and compatibility impact. Dependency review blocks new low-or-higher severity vulnerabilities. CodeQL findings and SCA findings must be fixed before a future release unless a reviewed suppression records why the finding is not exploitable.
If this repository begins publishing releases, the maintainer will create the
tag from reviewed main, publish a scoped change log, record the source
commit, and publish checksums and a signed manifest. The release note will
identify the actor and workflow, document public interfaces and security
changes, explain verification, state the support window, and link the threat
model. Releases will not contain host credentials or deployment state.
Governance and vulnerability response¶
The maintainers listed in the governance policy own repository administration, Actions secrets, Pages, dependency policy, and any release. Access to sensitive resources is granted after review of the contributor's history and intended responsibility. New maintainers start with the narrowest role needed and receive broader access only after review.
Report vulnerabilities through the security policy or GitHub private vulnerability reporting. The maintainer acknowledges a report within three business days, provides an initial assessment within seven days, and publishes an advisory after a fix or documented mitigation is available. The OpenVEX record records reviewed non-affectability statements. Support and end-of-life rules are in the support policy.
The operating procedures for dependency management and secret management are part of this policy. They define the review, release-gate, storage, access, and rotation requirements used to support the controls below.
Control evidence¶
| Control area | Evidence |
|---|---|
| Least-privilege CI and trusted inputs | Empty default permissions, job scopes, pinned actions, quoted environment inputs, and no fork secrets |
| Releases and change logs | This release policy and the release-evidence template |
| Dependencies | flake.lock, nested lockfiles, dependency review, and CodeQL |
| Build and test instructions | CONTRIBUTING.md and the testing guide |
| Governance | GOVERNANCE.md |
| Contributor legal agreement | DCO and .github/workflows/dco.yml |
| Security assessment | THREAT_MODEL.md |
| Vulnerability response | SECURITY.md, private reporting, advisories, and the OpenVEX record |
| Public interfaces and release identity | Module and guide documentation, reviewed source commits, and future signed manifests |
| Support lifecycle | SUPPORT.md |
This file is reviewed when module contracts, CI trust, dependency policy, or release behavior changes.