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/Library/Application Support/Code (VS Code)home/.config/git
Once this version is checked out at ~/code/gh/vrslev/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, 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/gh/vrslev
git clone https://github.com/vrslev/dotfiles ~/code/gh/vrslev/dotfiles
cd ~/code/gh/vrslev/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 dotfiles:syncIt fast-forwards the repository, re-applies links, and synchronizes tools and packages.
It then checks Fish startup and the essential commands. Run the check separately with
mise run dotfiles:check-shell-tools.
Available tasks and read-only bootstrap status are discoverable:
mise tasks
mise bootstrap statusUse mise directly to manage dotfiles:
mise bootstrap dotfiles add --global ~/.example
mise bootstrap dotfiles apply --yesdotfiles:syncusesgit 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. - Removing a
[dotfiles]entry does not remove its existing target. Delete obsolete targets explicitly. - Mise refuses conflicting dotfile targets by default. Inspect the conflict instead of reaching for
--force. - The config assumes this repository lives at
~/code/gh/vrslev/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.
Set OPEN_MAIL_MRS_IGNORED_PROJECTS to a space-separated list of repository paths in the ignored ~/.config/mise/.env file. For those repositories, open-mail-mrs skips threads containing only opening, reviewer assignment, approval, or merge notifications, except for your own MRs. When unset, all repositories are included.
See project reconciliation for product folders, separate package projects, and automatic additions after repository sync.
writing-style guides drafts in my voice, with Russian and English examples and notes on its evidence. Mise installs it at ~/.agents/skills/writing-style. Invoke it with $writing-style, or ask Codex to write in my style. Refinements use my own corrections and human-authored prose, excluding generated or assisted drafts.