Personal macOS dotfiles managed with GNU Stow and Just.
Run this in a terminal. It installs Xcode CLT and clones the repo to ~/dotfiles:
curl -fsSL https://raw.githubusercontent.com/AlexLombry/dotfiles/refs/heads/main/install/init.sh | zshOpen a new terminal, then:
cd ~/dotfiles && ./install/install.shThis installs Oh My Zsh, Homebrew, Mise, Just, and GNU Stow — then runs just setup automatically.
Shell config and custom NeoVim setup are now symlinked. Open a fresh terminal session to pick up all changes.
| Step | Task | What it does |
|---|---|---|
| 1 | check |
Verifies prerequisites (Homebrew, Just, Stow, Xcode CLT) |
| 2 | stow-fresh |
Symlinks all packages into $HOME using --adopt (first-time only) |
| 3 | os |
Applies optimized macOS system defaults (install/macos.sh) |
| 4 | brew |
Installs grouped packages and apps from install/BrewFile |
| 5 | mise |
Installs language runtimes (Python, Node, Ruby) via mise |
| 6 | completions |
Generates uv/uvx shell completions into ~/.zsh/completions/ |
| 7 | init-shell |
Generates static initialization for starship and zoxide for faster startup |
A local web UI is available for managing symlinks without touching the CLI.
cd ~/dotfiles/web && npm install # first time only
just web # → http://localhost:3131What it does:
- Scans all stow packages and shows each file as
linked / missing / conflict - Dry-run preview, backup-before-overwrite, install, and remove — per package or all at once
- Streams real-time output for every
justcommand via a built-in terminal panel - Backup history with one-click rollback
Timestamped conflict backups land in
backup/YYYY-MM-DD.../and are git-ignored.
just # List all available tasks
just check # Verify if all prerequisites are installed
just stow # Re-apply symlinks (safe re-run, e.g. after adding a dotfile)
just stow-fresh # First-time stow with --adopt (clean machine only)
just stow-check # Dry-run check for symlinks
just unstow # Remove all symlinks
just doctor # Diagnose stow conflicts, brew drift, stale caches
just brew # Sync Homebrew packages with BrewFile
just mise # Reinstall/update language runtimes
just init-shell # Regenerate static shell init files
just backup-agent # Install/reload the backup_secure LaunchAgent
just update # Update all package managers (brew, mise, mas…)
just bench # Measure zsh startup time (3 runs)
just os # Re-apply macOS system defaults
just completions # Regenerate uv/uvx completions
just gpg-pass # Store GPG backup password in macOS KeychainTo stow or unstow a single package:
stow -d ~/dotfiles/stow -t ~ zsh # Symlink only zsh
stow -d ~/dotfiles/stow -t ~ -D config # Remove symlinks for configThis project uses a custom NeoVim configuration located in stow/config/.config/nvim. It is automatically symlinked during the stow process. It uses lazy.nvim for plugin management.
~/.zshrc sources ~/.work.zsh for work-specific aliases and environment variables. This file is tracked in the repo via the work stow package (stow/work/.work.zsh) and symlinked to ~/.work.zsh during just stow.