I use macOS, Visual Studio Code, Codex, Ghostty, Fish, and mise.
home/.config/mise/config.toml— global tools, environment, packages, dotfiles, macOS defaults, and sync tasksbin— reusable commandshome— files linked into$HOMEhome/.pi/agenthome/Library/Application Support/Code (VS Code)home/.config/git
Once this version is checked out at ~/code/dotfiles, migrate the existing installation with:
mise bootstrap --yesBootstrap is the migration. It installs anything missing, replaces the old linker with mise-managed symlinks, applies macOS defaults, configures Fish, starts Ollama, and verifies the resulting state. It is safe to re-run.
Restart the Mac after the first successful migration so applications reload the managed defaults.
Install Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Clone this repository:
mkdir -p ~/code
git clone https://github.com/vrslev/dotfiles ~/code/dotfiles
cd ~/code/dotfilesInstall mise:
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install miseBootstrap from the global config source before it has been linked into place:
MISE_GLOBAL_CONFIG_FILE="$PWD/home/.config/mise/config.toml" \
mise bootstrap --yesThe config is global once ~/.config/mise points to home/.config/mise; there is no project-local mise.toml. Restart the computer after the first bootstrap.
The routine command to remember is:
mise run sync:allIt fast-forwards the repository, re-applies links, and synchronizes tools and packages. Ollama is restarted only when its installed version changes.
The narrower tasks and read-only status commands are discoverable instead of needing to be memorized:
mise tasks
mise bootstrap statusUse mise directly to manage dotfiles:
mise dotfiles add --global ~/.example
mise dotfiles apply --yessync:allusesgit pull --ff-only; it stops instead of rebasing a divergent checkout.- Removing a package from
[bootstrap.packages]does not uninstall it. Prune packages only when removal is intentional. - Mise refuses conflicting dotfile targets by default. Inspect the conflict instead of reaching for
--force. - The config assumes this repository lives at
~/code/dotfiles, and most versions arelatest, so a fresh bootstrap can resolve newer software. - Safari defaults and VS Code extensions are intentionally unmanaged.
- The official ChatGPT cask currently owns the same
/Applications/ChatGPT.appused by Codex. An identical existing bundle can be adopted; a different bundle at that path blocks installation rather than being overwritten.