Debian's npm package pulls a ~400-package node-* tree (the first deploy installed 527 packages). Replace apt nodejs+npm with a pinned upstream Node tarball (v20.19.2) installed to /opt + symlinked, mirroring the nvim install pattern (ADR-014 pinning). npm/npx come bundled. Molecule verifies node/npm on PATH; lint + idempotent converge green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
2.5 KiB
Markdown
52 lines
2.5 KiB
Markdown
# dev_env
|
|
|
|
Interactive developer environment for **workstation-class** boma hosts (`ubongo`, and
|
|
later `mamba`). Gives the operator — and the `claude` agent user — a clean shell/editor
|
|
setup over SSH: zsh + oh-my-zsh + oh-my-posh, tmux, and neovim.
|
|
|
|
**This is not part of `base`.** `base` is the security/infra baseline every host gets;
|
|
`dev_env` is only for human workstation-class hosts and must never be applied to servers
|
|
or service VMs.
|
|
|
|
## What it does
|
|
|
|
- Installs packages: `zsh, tmux, git, stow, acl, build-essential, curl,
|
|
ca-certificates, fzf, ripgrep, direnv` (`dev_env__packages`).
|
|
- Installs **pinned** neovim (`dev_env__nvim_version`), oh-my-posh
|
|
(`dev_env__omp_version`) and Node.js (`dev_env__node_version`) from upstream releases
|
|
(Node from the nodejs.org tarball — not Debian's `npm`, which pulls a ~400-package
|
|
tree), plus the system-wide oh-my-posh theme `/etc/oh-my-posh/zen.toml`.
|
|
- For each user in `dev_env__users`: sets the login shell to zsh, clones oh-my-zsh +
|
|
custom plugins and the tmux/TPM plugins, and **stows** the dotfiles into `~`.
|
|
|
|
## Dotfiles
|
|
|
|
Real files under `files/dotfiles/{zsh,tmux,nvim}/`, deployed to `~/.dotfiles/` and
|
|
symlinked into the home directory with GNU **stow** (not Jinja templates — so they stay
|
|
editable as live configs). nvim plugins self-bootstrap via lazy.nvim on first launch;
|
|
LSPs/formatters self-install via mason (no system LSP packages needed).
|
|
|
|
## Variables
|
|
|
|
| Variable | Default | Purpose |
|
|
|---|---|---|
|
|
| `dev_env__users` | `[]` | Users to configure. Set per group, e.g. `group_vars/control → [sjat, claude]`. Empty = no per-user work. |
|
|
| `dev_env__nvim_version` | `v0.12.2` | Pinned neovim release. |
|
|
| `dev_env__omp_version` | `29.0.1` | Pinned oh-my-posh release. |
|
|
| `dev_env__node_version` | `v20.19.2` | Pinned Node.js release (nodejs.org tarball; npm bundled). |
|
|
| `dev_env__packages` | see defaults | APT packages. |
|
|
| `dev_env__omz_custom_plugins` | autosuggestions, syntax-highlighting | Cloned into `~/.oh-my-zsh/custom/plugins`. |
|
|
| `dev_env__tmux_plugins` | tpm, tmux-sensible, vim-tmux-navigator, catppuccin@v1.0.3 | Cloned into `~/.tmux/plugins`. |
|
|
|
|
## Apply
|
|
|
|
```bash
|
|
make test ROLE=dev_env # Molecule (Debian 13)
|
|
make deploy PLAYBOOK=workstation # applies to the control group (ubongo)
|
|
```
|
|
|
|
## Provenance
|
|
|
|
Configs re-derived (ADR-013) from the heritage `AnsibleBaobabV4` repo and the operator's
|
|
live `fisi` setup, on boma's terms — V4's structure was not imported. No Nerd Font is
|
|
installed (headless host; fonts are a client-side concern).
|