Personal development environment for macOS and Linux. Managed by punch, a copy-based dotfile manager with provenance tracking.
git clone https://github.com/nodeselector/dotfiles ~/ghq/github.com/nodeselector/dotfiles
cd ~/ghq/github.com/nodeselector/dotfiles
make bootstrap| Category | What | Key Tools |
|---|---|---|
terminal/ |
Shell, editor, multiplexer | zsh, neovim (LazyVim), tmux, starship, ghostty, iTerm2 |
dev/ |
Language runtimes, package managers | brew, nvm, gvm, rust, uv, fzf, lazygit, lazydocker |
gui/ |
Window management, automation | AeroSpace, Hammerspoon |
services/ |
Self-hosted Docker services | Dozzle |
tools/ |
CLI utilities | wk (which-key), dotfiles console |
script/ |
Bootstrap and setup | bootstrap, setup, clone-plugins |
Each tool lives in its own directory with a dot.yaml that declares what to link and install:
darwin:
installs: brew install neovim
global:
links:
init.lua: ~/.config/nvim/init.luaPunch walks the directory tree, resolves platform sections (darwin, linux, global), and copies configs to their targets.
| Command | What it does |
|---|---|
make bootstrap |
First-time setup -- installs punch, clones plugins, links + installs everything |
make setup |
Re-link and re-install (idempotent) |
make setup-link |
Link only, skip installs |
Private configs live in a separate repo, declared in plugin.yaml:
plugins:
- github.com/nodeselector/dotfiles.privatescript/clone-plugins clones them into plugins/. Punch discovers their dot.yaml files automatically.