Skip to content

Operator Devtools

Centrally pinned runtimes and CLIs for the golden operator shell.

Single pin file

operator/devtools/versions.toml is the only place to bump versions. Consumers:

Consumer How
Ansible operator-shell (--tags devtools) Stages + runs install.sh
WSL / Linux bootstrap bootstrap.sh calls install.sh
Windows sync-windows.ps1

What is installed

Piece Manager Notes
Python 3.13 / 3.12 / 3.11 uv Matches monorepo uv run
Node 22 + npm mise No nvm/fnm in golden ~/.zshrc
Flutter Version Manager fvm CLI only; Flutter SDK not pre-downloaded
gh, jq, yq, rg, fd, lazygit, delta mise Tier-1 operator CLIs
ruff, pre-commit uv tool Global tools via uv
Go mise Tier-2
just mise Tier-2 task runner
Rust rustup Default stable toolchain
sops / age GitHub release → ~/.local/bin Complements SOPS_AGE_KEY_FILE
Golden ~/.gitconfig chezmoi dot_gitconfig Delta pager / aliases
user.name / user.email Ansible --tags git-identity From secrets/operator/git-identity.sops.yaml~/.gitconfig.local

Shell activation: mise activate zsh + existing direnv hook in dot_zshrc.

Host scope

Installed on all patching_targets except:

  • graylogoperator_shell_install_devtools: false
  • octoprintoperator_shell_install_devtools: false

Plus Windows / WSL via bootstrap / sync scripts.

Bump workflow

  1. Edit operator/devtools/versions.toml.
  2. PR + merge (or push-mode apply from the branch).
  3. Apply: ansible-playbook … operator-shell.yml --tags devtools --limit 'patching_targets:!graylog:!octoprint'.
  4. WSL: ./operator/dotfiles/bootstrap.sh (or re-run operator/devtools/install.sh).
  5. Windows: .\operator\devtools\sync-windows.ps1.

Spot checks

uv python list
node -v && npm -v
mise ls
gh --version
rg --version
command -v fvm
go version
just --version
sops --version
age --version
rustc --version
git config --get user.name
git config --get user.email

Git identity

Fleet user.name / user.email come from secrets/operator/git-identity.sops.yaml via operator-shell tag git-identity (also runs with chezmoi). Do not hand-edit ~/.gitconfig.local on hosts.

Out of scope

  • Fleet-wide Flutter SDK download
  • Replacing system / Ansible Python
  • graylog / octoprint runtimes
  • Docker Engine / 1Password CLI
  • nvm / fnm in the golden profile (use ~/.zshrc.local only if unavoidable)