Skip to content

Provisioning: migrate dev CLIs from brew to mise + bootstrap #1

Description

@marcodeltongo

Provisioning: migrate dev CLIs from Homebrew to mise + bootstrap

Context

mise bootstrap graduated from experimental in v2026.7.4 (July 2026) and provides a unified, cross-platform provisioning pipeline: system packages, git repos, dotfiles, macOS defaults, LaunchAgents, login shell, and [tools] (CLI management) — all in one mise bootstrap command.

Currently the dotfiles bare repo (~/.dotfiles) tracks shell config, gitconfig, and topgrade config but doesn't yet include a mise config.toml or leverage mise bootstrap for machine setup.

Goals

1. Transfer dev CLIs from brew → mise [tools]

Many CLI tools currently installed via brew leaves can be managed by mise with pre-built binaries (aqua: backend), which is faster and cross-platform (same config works on macOS and Linux).

Candidates (aqua: — pre-built, instant):

Tool Mise backend
bat aqua:sharkdp/bat
fd aqua:sharkdp/fd
fzf aqua:junegunn/fzf
gh aqua:cli/cli
glow aqua:charmbracelet/glow
jq aqua:jqlang/jq
lazydocker aqua:jesseduffield/lazydocker
lazygit aqua:jesseduffield/lazygit
starship aqua:starship/starship
topgrade aqua:topgrade-rs/topgrade
xh aqua:ducaale/xh
zoxide aqua:ajeetdsouza/zoxide
crush aqua:charmbracelet/crush
hunk aqua:modem-dev/hunk
worktrunk aqua:max-sixty/worktrunk
helix aqua:helix-editor/helix (optional — or keep in brew)

Candidates (cargo: — compiles from source):

  • ezacargo:eza

Remains in brew (system deps, shells, build toolchain): fish, git, cmake, coreutils, pkgconf, ffmpeg, pandoc, macchina, git-delta, eva, tz, mole, peekaboo.

2. Add ~/.config/mise/config.toml to the dotfiles bare repo

A new tracked file containing:

  • [tools] — all transferred CLIs
  • [bootstrap.macos.defaults] — declarative macOS system preferences (optional)
  • [bootstrap.macos.launchd.agents] — user LaunchAgents (optional)

3. Define the fresh-machine bootstrap procedure

Document in README.md or a BOOTSTRAP.md:

macOS:

xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install fish mise
git clone --bare git@github.com:marcodeltongo/dotfiles.git ~/.dotfiles
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME checkout
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish
exec fish
dotfiles status
mise bootstrap

Linux (Beelink Debian/Ubuntu):

curl https://mise.run | sh
sudo apt install -y fish git
git clone --bare git@github.com:marcodeltongo/dotfiles.git ~/.dotfiles
git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME checkout
# … set fish as login shell, etc.
mise bootstrap

4. Handle cross-platform splits

  • [bootstrap.packages] must be conditional: brew blocks on macOS, apt blocks on Linux.
  • macOS-specific shell commands (like /opt/homebrew/bin/...) need conditionals in config.fish.
  • mise manages [tools] identically on both platforms — that's the whole point.

Tasks

  • Research mise bootstrap capabilities and candidate tools
  • Create ~/.config/mise/config.toml with [tools] block
  • dotfiles add ~/.config/mise/config.toml and commit
  • Test: brew uninstall --ignore-dependencies for each transferred tool, verify all work via mise
  • Test: full mise bootstrap on macOS from scratch (or dry-run)
  • Test: full mise bootstrap on Linux (Beelink) from scratch (or dry-run)
  • Add bootstrap docs to repo README or BOOTSTRAP.md
  • Update topgrade config to enable mise step (already configured) and remove now-unnecessary brew-formula steps?

Future / Nice-to-have

  • [bootstrap.macos.defaults] — Dock, Finder, Keyboard, Trackpad preferences declaratively
  • [bootstrap.repos] — auto-clone work repos alongside dotfiles
  • [bootstrap.linux.systemd.units] — user services on the Beelink

/label ~"enhancement"
/label ~"devx"
/milestone %"Infrastructure"

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions