This repository provisions a development environment. Every mechanism in it, whether bash, Nix, a container image or an Ansible role, must converge on the same toolchain, which is listed in CLAUDE.md.
No secrets, ever. Real values live in ~/.config/shell/secrets.env at mode
0600, outside version control. A template committed here contains commented-out
variable names only, never values. Refer to credentials by name.
Everything must be idempotent. Re-running any provisioner against an already
provisioned machine must be a no-op that exits zero. bootstrap.sh does this
with per-item have and skip guards. Keep that property.
A failing third-party repository must not abort provisioning. Warn, name the repository and the URL, and carry on. A missing vendor package is a degraded machine, not a failed run.
Expose the corporate escape hatches. Anything new needs equivalents of
PROXY, CORP_CA and REPO_SUITE. Do not assume unproxied egress or a trusted
default CA bundle.
set -euo pipefailat the top.- Clean under
shellcheck -S warning. - LF line endings.
.gitattributesenforces this, because the repository is often edited from Windows and executed inside WSL, where a CRLF shebang makes the interpreter unresolvable. - Executable bit set on anything meant to be run directly.
Check your work before opening a pull request:
shellcheck -S warning bootstrap.sh
./bootstrap.sh verifyBritish spelling. No em dashes or en dashes anywhere, including comments and commit messages.
Explain the reasoning behind anything that looks odd. Several things in this
repository are deliberate and have been rediscovered the hard way more than
once: the pinned REPO_SUITE, the PATH precedence that lets apt shadow brew,
and the use of absolute paths for git credential helpers. The "Things already
learned the hard way" section of CLAUDE.md is the record of those. Add to it
when you learn a new one.
- Imperative mood in the subject line, wrapped at 72 characters.
- A body only when the change needs explaining.
- Signed commits.
commit.gpgsignis expected to be true. - No trailers or sidecars of any kind. No
Co-Authored-By, no tool attribution, no emoji markers. The message ends where the message ends.
Keep changes focused. Fill in the pull request template, including evidence that
the change actually provisions a machine: the relevant bootstrap.sh output, or
a clean verify run.
By contributing you agree that your contributions are licensed under the MIT License.