新機器設定靠記憶 + 恐懼
症狀:「我記得我裝了什麼……」然後花 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-commithook 強制 format(這樣無論誰 commit,格式都一致)
升級 macOS 撞壞一堆
症狀:macOS 大版本升級後,Python 路徑壞了、Homebrew 出問題、Xcode Command Line Tools 需要重裝。
問題:沒有清楚知道自己的環境依賴什麼、怎麼復原。
解法:升級前:
brew bundle dump輸出Brewfile- 確認 dotfiles 都在 repo 裡
- 如果用 pyenv / nvm:記錄當前 active 版本
升級後如果撞壞:可以用 Brewfile 重裝,dotfiles 一行指令還原。
知識組織靠 Downloads 資料夾
症狀:Downloads 目錄有 3,000 個檔案,找東西靠搜尋,找不到的靠運氣。
問題:不只是「亂」,而是每次需要一個東西就重新找一次,做了同樣的工作 N 遍。
解法:不需要完美的分類系統,需要的是一個讓你能找到的地方——選一個(Notion、Bear、本地 Markdown 資料夾),把重要的設定文件、reference、決策記錄放進去,保持規律。參考 06-knowledge-organization.md 裡的方法。