Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,216 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lev's dotfiles

I use macOS, Visual Studio Code, Codex, Ghostty, Fish, and mise.

Notable places

Migrate this Mac

Once this version is checked out at ~/code/dotfiles, migrate the existing installation with:

mise bootstrap --yes

Bootstrap 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.

Set up a new Mac

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/dotfiles

Install mise:

eval "$(/opt/homebrew/bin/brew shellenv)"
brew install mise

Bootstrap from the global config source before it has been linked into place:

MISE_GLOBAL_CONFIG_FILE="$PWD/home/.config/mise/config.toml" \
  mise bootstrap --yes

The 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.

Maintenance

The routine command to remember is:

mise run sync:all

It 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 status

Use mise directly to manage dotfiles:

mise dotfiles add --global ~/.example
mise dotfiles apply --yes

Caveats

  • sync:all uses git 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 are latest, 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.app used by Codex. An identical existing bundle can be adopted; a different bundle at that path blocks installation rather than being overwritten.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Used by

Contributors

Languages