新機器設定靠記憶 + 恐懼

症狀:「我記得我裝了什麼……」然後花 3 天拼湊,還少裝了幾個。或者更糟:根本不記得,反正「這台機器還能用先不換」。

問題:開發環境是你的工具,它的配置應該和 code 一樣被版本控制。

解法:用 chezmoi 或 bare git repo 版本控制 dotfiles;把首次安裝的指令寫成 run_once_*.sh;目標是「新機器 20 分鐘還原」。


工具裝到 200 個,但常用的不超過 10 個

症狀brew list 有 200 個套件,但你能說出用途的大概 15 個。每次 brew upgrade 要等 20 分鐘。

問題:每次遇到問題,Google 到「你需要裝 X」就裝,但從來沒清理。這些工具消耗磁碟空間、拖慢 shell 啟動(如果有 init script 的話)、版本衝突。

解法:每年做一次工具清查。brew list 一行行看,超過 6 個月沒用的考慮移除。用 brew bundle dump 輸出 Brewfile,把 Brewfile 加進 dotfiles 管理——這樣你裝的工具有清單,新機器 brew bundle install 還原。


Shell 設定每次都重寫

症狀.zshrc 已經 500 行,裡面一半是不知道哪年加的設定,不敢動,不敢刪。

問題:沒有版本控制,不知道什麼時候加了什麼,改壞了沒辦法 rollback。

解法:把 .zshrc 版本控制起來,每次改動都 commit。用 .zshrc.local 分離機器特定的設定(不進 repo),主 .zshrc 只放可以在所有機器通用的設定。


把 Secret 寫進 .zshrc / .bash_profile

症狀

# .zshrc
export OPENAI_API_KEY="sk-proj-xxxx"
export AWS_SECRET_ACCESS_KEY="xxxxxxxxxx"

問題.zshrc 如果進了 dotfiles repo(即使是 private repo),這些 secret 就暴露了。Private repo 不代表永遠安全——帳號可能被攻擊,GitHub 的 private repo 歷史也可能外洩。

解法

  • .zshrc.local(不版控)存放 secret
  • 或用 1Password CLI / Bitwarden CLI:export API_KEY=$(op read "op://Personal/OpenAI/api_key")
  • 或用 direnv.envrc 在進入 project 目錄時自動 load,且 .envrc 加入 .gitignore

個人設定跟 Team 差太多,Review 時 diff 爆

症狀:你用 tab,team 用 space。你的 prettier 設定不同。Code review 裡 diff 有一半是 formatting 的變化。

問題:Editor 設定和 formatter 設定應該是 project-level 的(進 repo),不是 personal-level 的(在 dotfiles)。

解法

  • .editorconfig(各編輯器都支援):設定 indent style、end-of-line、trim trailing whitespace
  • .prettierrc.eslintrc:這些進 repo,不在個人 dotfiles 裡
  • pre-commit hook 強制 format(這樣無論誰 commit,格式都一致)

升級 macOS 撞壞一堆

症狀:macOS 大版本升級後,Python 路徑壞了、Homebrew 出問題、Xcode Command Line Tools 需要重裝。

問題:沒有清楚知道自己的環境依賴什麼、怎麼復原。

解法:升級前:

  1. brew bundle dump 輸出 Brewfile
  2. 確認 dotfiles 都在 repo 裡
  3. 如果用 pyenv / nvm:記錄當前 active 版本

升級後如果撞壞:可以用 Brewfile 重裝,dotfiles 一行指令還原。


知識組織靠 Downloads 資料夾

症狀:Downloads 目錄有 3,000 個檔案,找東西靠搜尋,找不到的靠運氣。

問題:不只是「亂」,而是每次需要一個東西就重新找一次,做了同樣的工作 N 遍。

解法:不需要完美的分類系統,需要的是一個讓你能找到的地方——選一個(Notion、Bear、本地 Markdown 資料夾),把重要的設定文件、reference、決策記錄放進去,保持規律。參考 06-knowledge-organization.md 裡的方法。