跳至主要內容
技術

新 Mac 開箱後,我怎麼 30 分鐘裝好所有東西

新 Mac 開箱後,我怎麼 30 分鐘裝好所有東西
一鍵搞定新 Mac 第 1 / 9 篇

這是「一鍵搞定新 Mac」系列的第一篇,帶你建立整套自動化策略的全景圖。後續文章會針對每一層深入展開。

買了新 Mac,開心拆箱、過完設定精靈之後,接下來通常是最痛苦的時刻——一個一個裝回你熟悉的軟體、調回你習慣的設定。

Chrome、VS Code、iTerm2、Line、Notion⋯⋯光是想就累了。更別說那些藏在系統偏好裡的小設定:Dock 要自動隱藏、Finder 要顯示隱藏檔、觸控板的滑動方向⋯⋯

如果你有不只一台 Mac(公司的、家裡的),或是每隔幾年就會換一次電腦,這篇就是寫給你的。

我會用四個層級,帶你從「手動裝到哭」進化到「一行指令全搞定」。

全景圖:四層自動化策略

在開始之前,先看一下全貌。Mac 的個人化設定其實散落在四個地方:

層級管什麼工具難度
軟體安裝App、CLI 工具Homebrew Bundle★☆☆
設定檔Shell、Git、編輯器設定Dotfiles + Git★★☆
系統偏好Dock、Finder、鍵盤快捷鍵defaults write 腳本★★☆
機敏資料SSH 金鑰、密碼、token每台重產 + *.local★☆☆

每一層獨立處理,組合起來就是一套完整的自動化 setup。

第一層:Homebrew Bundle — 軟體一鍵安裝

Homebrew 是 macOS 上最主流的套件管理工具。即使你不是工程師,只要會在終端機貼指令,就能用它一次裝完所有軟體。

在舊電腦上匯出清單

brew bundle dump --file=~/Brewfile --describe

這會產生一個 Brewfile,記錄你目前裝了什麼:

# CLI 工具
brew "git"           # 版本控制
brew "node"          # JavaScript runtime
brew "zsh"           # Shell

# GUI 應用程式(透過 cask)
cask "google-chrome"
cask "visual-studio-code"
cask "iterm2"
cask "raycast"
cask "notion"
cask "line"

# Mac App Store 的 App(透過 mas)
mas "Xcode", id: 497799835
mas "Keynote", id: 409183694

兩個之後會踩的坑,先記著:① 如果 dump 出來的清單裡有 vscode "..." 行,建議刪掉——VS Code 自己的 Settings Sync 已經在管擴充套件,留著會兩邊重複(本系列有一篇專門講怎麼清掉這些白工)。② 上面的 mas 行(Mac App Store 的 App)在較新的 macOS 上 mas install 會需要 sudo,跑全自動腳本時可能卡住;保守做法是 Brewfile 只管 cask,App Store 的 App 先到商店登入再手動裝。

在新電腦上一鍵安裝

# 先裝 Homebrew(新電腦必須)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 然後一行搞定所有軟體
brew bundle --file=~/Brewfile

就這樣。CLI 工具、GUI App、甚至 Mac App Store 的軟體,全部一次裝回來。

3 分鐘快速上手

裝完 Homebrew 後,你只需要記住這幾個指令:

brew install <套件>     # 安裝 CLI 工具
brew install --cask <app> # 安裝 GUI App
brew list                 # 看裝了什麼
brew update && brew upgrade  # 更新所有套件
brew bundle dump --file=~/Brewfile  # 匯出目前的軟體清單
brew bundle --file=~/Brewfile       # 從清單一鍵安裝

最小可用流程

  1. 打開「終端機」(在 Spotlight 搜尋 “Terminal”)
  2. 貼上 Homebrew 安裝指令,等它跑完
  3. 執行 brew install --cask google-chrome 試試看——Chrome 會自動下載安裝,不用開瀏覽器下載 .dmg

給非工程師的小提醒Brewfile 就是一份「軟體清單」,純文字格式。你可以用任何文字編輯器打開它,手動新增或刪除不需要的軟體。

第二層:Dotfiles — 設定檔版本控制

macOS(和大部分 Unix 系統)的應用程式設定檔都放在家目錄,檔名以 . 開頭(所以叫 dotfiles),例如:

  • .zshrc — Shell 的設定(別名、環境變數)
  • .gitconfig — Git 設定(使用者名稱、預設編輯器)
  • .ssh/config — SSH 連線設定

這些檔案平常看不到(macOS 預設隱藏),但它們決定了你的工作環境長什麼樣子。

# 1. 建立 dotfiles 資料夾
mkdir ~/dotfiles && cd ~/dotfiles
git init

# 2. 把設定檔搬進來
cp ~/.zshrc ~/dotfiles/
cp ~/.gitconfig ~/dotfiles/

# 3. 建立 symlink(讓系統讀到正確位置)
ln -sf ~/dotfiles/.zshrc ~/.zshrc
ln -sf ~/dotfiles/.gitconfig ~/.gitconfig

# 4. 推到 GitHub 保存
git add -A && git commit -m "initial dotfiles"

進階:用 chezmoi 管理

如果你有多台電腦、或是設定檔裡有些值每台不同(例如工作用的 Git email vs 個人 email),chezmoi 是目前功能最完整的 dotfiles 管理工具。

# 安裝
brew install chezmoi

# 初始化(第一台電腦)
chezmoi init
chezmoi add ~/.zshrc
chezmoi add ~/.gitconfig
chezmoi cd  # 進入 chezmoi 管理的資料夾
git add -A && git commit -m "initial" && git push

# 在新電腦上,一行搞定
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply your-github-username

chezmoi 3 分鐘快速上手

chezmoi add <>      # 把檔案加入管理
chezmoi edit <>     # 編輯受管理的檔案
chezmoi apply           # 把所有變更套用到系統
chezmoi diff            # 預覽變更(不實際套用)
chezmoi update          # 從 GitHub 拉最新版本並套用
chezmoi cd              # 進入 chezmoi 的 source 資料夾

最小可用流程

  1. chezmoi init — 初始化
  2. chezmoi add ~/.zshrc — 加入你最重要的設定檔
  3. chezmoi cdgit add -A && git commit -m "add zshrc" && git push — 推到 GitHub
  4. 換台電腦 → chezmoi init --apply your-github-username — 一行還原

chezmoi 的殺手級功能是模板——同一份 .gitconfig 可以根據機器自動填入不同的 email。但這是進階用法,先把基本流程跑通就很夠用了。

另一個輕量選擇是 GNU Stow,它只做一件事:根據資料夾結構自動建立 symlink。沒有模板、沒有加密,但也因此幾乎不用學。

第三層:macOS 系統偏好 — defaults write 腳本

macOS 的系統偏好設定(Dock 大小、Finder 行為、觸控板⋯⋯)其實都存在 plist 檔案裡,可以用 defaults 指令讀寫。

把你喜歡的設定寫成一個 shell script,換電腦時跑一次就好:

#!/bin/bash
# macos-defaults.sh — 我的 macOS 偏好設定

# === Dock ===
defaults write com.apple.dock autohide -bool true          # Dock 自動隱藏
defaults write com.apple.dock tilesize -int 48              # 圖示大小
defaults write com.apple.dock minimize-to-application -bool true  # 最小化到 App 圖示

# === Finder ===
defaults write com.apple.finder ShowPathbar -bool true      # 顯示路徑列
defaults write com.apple.finder ShowStatusBar -bool true    # 顯示狀態列
defaults write com.apple.finder AppleShowAllFiles -bool true  # 顯示隱藏檔

# === 鍵盤 ===
defaults write NSGlobalDomain KeyRepeat -int 2              # 按鍵重複速度(越小越快)
defaults write NSGlobalDomain InitialKeyRepeat -int 15      # 按鍵重複延遲

# === 觸控板 ===
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true  # 三指拖曳

# === 截圖 ===
defaults write com.apple.screencapture location -string "~/Screenshots"  # 截圖存到指定資料夾
defaults write com.apple.screencapture type -string "png"    # 截圖格式

# 重新啟動受影響的服務
killall Dock
killall Finder
killall SystemUIServer

echo "macOS 偏好設定已套用!部分設定需要登出再登入才會生效。"

我把用了十幾年的 Mac 設定全部匯出,檔案竟然有 5.3MB。 用了十幾年的 Mac 匯出 defaults,檔案大小 5.3MB

匯出的 macos-defaults-backup.plist 內容竟然有 14 萬多行! macos-defaults-backup.plist 內容超過 14 萬行

(這正是為什麼直接拿 defaults read 的全量匯出當備份——這 5.3MB、14 萬行裡絕大多數是各個 app 的暫存狀態,雜訊遠多於訊號。一份你看得懂的手寫 defaults.sh 反而更可靠、更好維護。本系列後面有一篇專門拆解「5.3MB 的 plist 為什麼不如 130 行的 shell script」。)

怎麼發現更多可設定的項目?

# 匯出目前所有設定(超長,但很有參考價值)
defaults read > ~/current-defaults.txt

# 查看特定 App 的設定
defaults read com.apple.dock

推薦參考 mathiasbynens/dotfiles.macos 檔案,裡面有幾百行精心整理的設定,是這個領域的經典。你不需要全用,挑你需要的就好。

第四層:機敏資料 — 小心處理

SSH 金鑰、API token、密碼這類東西不應該放在 Git repo 裡。但與其急著找一個「同步機密」的工具,我更建議先問一個問題:這東西能不能重新產生? 答案會決定你要不要費工去加密、去搬移。

我把機密分成兩桶:

  • 桶 1:可以重新產生——SSH 私鑰、GPG 簽章金鑰、GitHub token、大多數 API token。 這類東西每台新機重產一組就好,不要搬舊的。對 SSH key 來說這本來就是資安最佳實踐:私鑰永遠不離開那台機器,哪台退役就只撤銷那一把。
  • 桶 2:不可以重新產生——換了就回不來的東西(某些不可重發的 license、2FA 備份碼……)。 這才是真正要小心保存的,放在 *.local 檔案裡(例如 ~/.gitconfig.local 放 email、~/.zshenv.local 放 token)。這些檔不進 Git、每台手動建

SSH 金鑰怎麼處理(重產派做法):新電腦不要從舊電腦搬 ~/.ssh/。裝好 gh 後跑 gh auth login、選 SSH,它會幫你產一把全新的 key 並自動把公鑰上傳到 GitHub——一步同時搞定認證又免搬私鑰。(這步是 private repo 在新機的第一道關卡,本系列後面有專篇細講。)

我自己不用 1Password(也不用其他商業密碼管理器)。如果你已經在用 1Password / Bitwarden,它們確實能同步密碼、也支援 SSH Agent,照用沒問題;但它不是必需品。光是「可重產的每台重產、不可重產的放 *.local」,就能覆蓋大多數人的需求。

至於免每次重打 SSH key 密碼——用 macOS 內建的鑰匙圈(Keychain) 就好:ssh-add --apple-use-keychain ~/.ssh/id_ed25519,不必為了這個裝密碼管理器。

原則:如果一個檔案裡有密碼或 token,它就不該出現在 GitHub 上,即使是 private repo。chezmoi 的 age 加密只有在你的「桶 2」長大到有「不可重產必須版控」的機密時才需要——桶 2 是空的,你連 age 都不用碰。

組合技:一鍵 Setup 腳本

把前面四層串起來,就是一個完整的新電腦 setup 腳本:

#!/bin/bash
# install.sh — 新 Mac 一鍵配置

set -e  # 遇到錯誤就停止

echo "=== Step 1: 安裝 Homebrew ==="
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"   # Apple Silicon:把 brew 加進當前 shell

echo "=== Step 2: GitHub 認證 + 產一把新 SSH key ==="
# 這步要先做:dotfiles 放 private repo 的話,沒先認證根本 clone 不下來。
# gh auth login 選 SSH 會自動產一把新 key 並上傳公鑰到 GitHub,一步搞定認證又免搬私鑰。
brew install gh chezmoi
gh auth login   # → GitHub.com → SSH → "Generate a new SSH key?" → Yes

echo "=== Step 3: 套用 dotfiles(順手把 Brewfile 一起拉下來)==="
chezmoi init --apply your-github-username
# 或者如果用 Stow:
# cd ~/dotfiles && stow zsh git ssh

echo "=== Step 4: 安裝所有軟體 ==="
brew bundle --file="$(chezmoi source-path)/Brewfile"

echo "=== Step 5: 套用 macOS 偏好設定 ==="
chmod +x "$(chezmoi source-path)/macos-defaults.sh"
"$(chezmoi source-path)/macos-defaults.sh"

echo "=== Done! ==="
echo "記得手動處理:"
echo "  1. 建立 ~/.gitconfig.local(email)和 ~/.zshenv.local(GITHUB_TOKEN 等 secrets)"
echo "  2. 登入 iCloud、VS Code Settings Sync 等 App 內建同步"
echo "  3. 登出再登入讓所有設定生效"

注意 Step 2 的順序:很多人(包括早期的我)會把「裝軟體」放在最前面,結果新機要 clone 自己的 private dotfiles repo 時,卡在沒有認證。先用 gh auth login(選 SSH、產新 key)把認證和金鑰一次搞定,後面才會順。這個「新機第一步認證的雞生蛋」本系列後面有專篇細講。

別忘了這些 App 自帶的同步功能

有些軟體有內建的設定同步,善用它們可以省更多事:

軟體同步方式
VS Code內建 Settings Sync(登入 GitHub 即可)
Chrome登入 Google 帳號同步書籤、擴充套件
Raycast內建 Cloud Sync
1Password雲端同步
Claude Code複製 ~/.claude/ 資料夾

我的建議:從 Brewfile 開始就好

如果上面看起來很多,不用一次全做。我的建議是:

  1. 今天就做:跑 brew bundle dump --file=~/Brewfile,把軟體清單匯出來
  2. 這週做:建一個 dotfiles Git repo,先放 .zshrc.gitconfig
  3. 有空再做:慢慢累積 macos-defaults.sh,遇到什麼設定就加什麼

不需要一開始就完美。每次你調了一個設定、裝了一個新工具,順手更新 dotfiles repo,半年後你就會有一套很完整的自動化配置。

下次換電腦,你會感謝現在的自己。

留言討論

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