Dev environment

Everything a Mac needs for development, kept in one repository.

The idea

The apps and tools I install, my shell and git settings, and my editor extensions all live in one repository. One command applies it and is safe to run again, so a new Mac can be set up from it and an existing one kept current.

The layers

LayerApplied by
Packages and appsA Homebrew Brewfile
Shell: oh-my-zsh, Starship prompt, pluginschezmoi
Dotfiles such as git and zsh settingschezmoi
Runtimes: Node, Python, JavaHomebrew
VS Code extensionsA list installed with the code command

Commands

  • make update pulls the repository and applies everything.
  • make check previews what an update would change.
  • make doctor verifies every layer.

Settings that belong to one machine or one employer stay in a local file that the repository never touches.

Fast copies between Macs

A small script sends large files to another Mac over ssh using parallel streams. Over a Thunderbolt cable between two Macs it reached about 2.9 GB/s with eight streams, against 255 MB/s for rsync, roughly eleven times faster.

Why this way

Editing the source and then applying it keeps every change in version history and makes any machine rebuildable. The repository is private, so I describe it here instead of linking it.