跳至主要內容
技術

Brewfile + chezmoi + dotfiles:Mac 開發環境的完整備份策略

Brewfile + chezmoi + dotfiles:Mac 開發環境的完整備份策略
一鍵搞定新 Mac 第 6 / 9 篇

本篇是「一鍵搞定新 Mac」系列的第 6 / 9 篇。你可以從系列總覽開始閱讀,也可以直接接著看本文。

Brewfile 解決了「裝什麼軟體」,但你的 .zshrc.gitconfig、SSH key 呢?這篇聊聊怎麼用 Brewfile + chezmoi 把整個開發環境版本控制起來,以及每個工具的職責邊界在哪裡。

問題:你的開發環境有幾層?

一個完整的開發環境其實有三層:

層級內容負責工具
軟體安裝CLI 工具、桌面 AppHomebrew (Brewfile)
系統設定dotfiles、shell config、Git configchezmoi
編輯器狀態Extensions、Settings、KeybindingsVS Code Settings Sync

很多人(包括以前的我)把所有東西塞在同一個備份機制裡,結果就是職責不清、維護困難。

各工具的職責邊界

Homebrew / Brewfile — 只管「裝什麼」

brew bundle dump --force --no-vscode --file=~/Brewfile

Brewfile 只負責記錄軟體清單,不管設定。加 --no-vscode 是因為 VS Code extensions 有自己的同步機制。

chezmoi — 只管「設定檔」

chezmoi 是一個 dotfiles 管理工具,它不直接在 $HOME 建 symlink,而是用一個獨立的 source directory 管理,透過 chezmoi apply 把設定檔「部署」到正確位置。

3 分鐘快速上手

# 安裝
brew install chezmoi

# 初始化(會建立 ~/.local/share/chezmoi)
chezmoi init

# 把現有 dotfile 加入管理
chezmoi add ~/.zshrc
chezmoi add ~/.gitconfig
chezmoi add ~/.config/starship.toml

# 看看 chezmoi 管了哪些檔案
chezmoi managed

# 編輯某個設定檔
chezmoi edit ~/.zshrc

# 看差異
chezmoi diff

# 套用變更到 $HOME
chezmoi apply

核心觀念:你永遠在 chezmoi 的 source directory 裡編輯,然後 apply$HOME。這樣 source directory 就是一個乾淨的 Git repo,可以推到 GitHub。

VS Code Settings Sync — 只管「編輯器」

登入 GitHub 帳號就自動同步 extensions、settings、keybindings、snippets。不需要任何額外設定。

三者的協作流程

初次設定(在你的主力機器上)

# 1. 產生 Brewfile
brew bundle dump --force --no-vscode --file=~/Brewfile

# 2. 初始化 chezmoi 並加入 dotfiles
chezmoi init
chezmoi add ~/.zshrc
chezmoi add ~/.gitconfig
chezmoi add ~/.config/starship.toml
# ...加入你需要的設定檔

# 3. 把 Brewfile 也交給 chezmoi 管理
cp ~/Brewfile $(chezmoi source-path)/
chezmoi add ~/Brewfile

# 4. 推到 GitHub
cd $(chezmoi source-path)
git remote add origin git@github.com:yourname/dotfiles.git
git add -A && git commit -m "initial dotfiles + Brewfile"
git push -u origin main

# 5. VS Code Settings Sync — 確認已開啟就好

換到新電腦時

# 1. 裝 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 2. 裝 chezmoi 並從 GitHub 拉下設定
brew install chezmoi
chezmoi init --apply yourname

# 3. 用 Brewfile 安裝所有軟體
brew bundle install --file=$(chezmoi source-path)/Brewfile

# 4. 開 VS Code → 登入 GitHub → Settings Sync 自動還原

四個步驟,整個開發環境就回來了。

chezmoi 的進階功能

chezmoi 不只是 symlink 工具,它還支援:

模板(Templates)— 不同機器用不同設定

# 在 .zshrc.tmpl 裡用條件判斷
{{ if eq .chezmoi.hostname "work-mac" }}
export KUBECONFIG=~/.kube/config-work
{{ else }}
export KUBECONFIG=~/.kube/config-personal
{{ end }}

Secrets 管理 — 敏感資訊不進 Git

# 搭配 1Password CLI 或 macOS Keychain
chezmoi add --template ~/.ssh/config
# 在模板裡引用 Keychain
{{ keyring "ssh-key-passphrase" "my-account" }}

自動化腳本 — 安裝後自動執行

# 建立 run_once_install.sh,chezmoi apply 時自動跑一次
#!/bin/bash
# 設定 macOS 預設值
defaults write com.apple.dock autohide -bool true
defaults write com.apple.finder AppleShowAllFiles -bool true
killall Dock Finder

什麼不該放進 chezmoi

  • 大型二進位檔:放 Git LFS 或雲端
  • 機密資訊:用 template + keyring,不要明文
  • 暫時性設定.env.local 這種專案層級的不用管
  • IDE workspace 設定:VS Code Settings Sync 管就好

反思:為什麼職責分離很重要

以前我用一個巨大的 setup script 做所有事,三百多行的 setup.sh,安裝軟體、複製設定檔、設 macOS defaults,全塞在一起。

問題是:每次只想改一個 .zshrc 設定,都要跑整個 script,還怕改壞其他東西。

拆成三個工具之後,每個工具只管一件事:

  • 想加新軟體 → 改 Brewfile,跑 brew bundle
  • 想改 shell 設定 → chezmoi edit ~/.zshrc,跑 chezmoi apply
  • 想裝新 VS Code extension → 直接在 VS Code 裝,Settings Sync 自動處理

改動範圍小 = 信心大 = 更敢改。

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →