如何優雅地在 Mac 上使用 dotfiles?
如果不清楚什麼是 dotfiles 的話,可以參閱善用 dotfiles 個人化自己的工作環境:
dotfiles,顧名思義,就是檔案名稱以 . (dot) 為 prefix 的檔案通稱,若是您的作業系統是 Mac OS X 或是 Linux 這類 *nix-based 的作業系統,一般來說在視窗環境中是看不到這些檔案的,因為對系統來說,他們是所謂的隱藏檔,這些檔案有一些共通點,那就是他們通常用來儲存一些個人化的設定或是自定的拓展功能,以符合使用者本身的使用需求與習慣,有了這些設定好的檔案之後,使用者可以讓整個系統用起來更為順手,並且大幅提昇他們自身的工作效率!因此對某些使用者來說,這些 dotfiles 設定檔對他們來說,反而可能是他們機器上最重要的檔案呢!
這份 dotfiles 是 fork 自Holman's dotfiles,並根據個人的需求修改過,如果有興趣,閱讀完這份文件之後,歡迎 fork 一份回去配置成適合自己的 dotfiles。
更多的 dotfiles 請參考GitHub does dotfiles。
Quick Start
Erase and reinstall OS X
如果你打算從乾淨的 Mac 環境開始,請參閱 OS X:如何清除並安裝。
Install Xcode
- 更新 App Store。
- 安裝 Xcode。
- 開啟 Terminal,安裝 Xcode Command Line Tools:
sh
xcode-select --install
Install dotfiles
下載或使用 git clone 一份到 $HOME
目錄底下的 .dotfiles
資料夾裡面:
sh
git clone https://github.com/amowu/dotfiles.git ~/.dotfiles
進入 .dotfiles
資料夾:
sh
cd ~/.dotfiles
安裝 dotfiles:
sh
script/bootstrap
bootstrap.sh
這個程式會自動完成以下工作:
- 檢查並安裝 Homebrew。
- 檢查並安裝 Oh My Zsh。
- 檢查並連結 dotfiles(
.zshrc
,.vimrc
,.gitconfig
,.gitignore
, ...)。 - 更新並安裝 brew packages(binaries, fonts, apps)。
- 設置 Mac OS X 的 defaults settings。
完成之後,手動安裝一些 App Store 上才有的軟體(Dash, Moom, ...)。
Restore backup
使用 Mackup 進行備份回復:
sh
mackup restore
什麼是 Mackup? 底下會介紹。
How To Use
dotfiles
執行 ~/.dotfiles/script/bootstrap
的時候,腳本會將目錄底下所有的 *.symlink
檔案透過 ln
命令建立連結至 $HOME
目錄底下:
topic | *.symlink | .dotfiles |
---|---|---|
git | gitconfig.symlink | ~/.gitconfig |
gitignore.symlink | ~/.gitignore | |
mackup | mackup.cfg.symlink | ~/.mackup.cfg |
vim | vimrc.symlink | ~/.vimrc |
zsh | zshrc.symlink | ~/.zshrc |
Topical
每一個環境的配置是以資料夾的形式被獨立區分。例如,如果想要新增 "Java" 的配置到 dotfiles,你可以簡單的新增一個命名為 java
的資料夾,然後將檔案建至目錄底下。
任何副檔名是 .zsh
的檔案將在 shell 執行時被自動載入至環境中。
任何副檔名是 .symlink
的檔案將在你執行 script/bootstrap
安裝時被連結至 $HOME
目錄底下。.
Components
一些目錄中比較特別的檔案:
-
bin/: 任何在
bin/
目錄底下的檔案可以在 shell 執行時直接使用。 -
topic/*.zsh: 任何
.zsh
結尾的檔案都會在 shell 執行時被載入至環境。 -
topic/path.zsh: 任何命名為
path.zsh
的檔案會在 shell 執行時優先被載入至$PATH
。 -
topic/*.symlink: 任何
*.symlink
結尾的檔案都會在$HOME
目錄底下建立連結。這可以讓你在配置環境的時候也保持版本控制的優點。新增 symlink 的時候需要執行script/bootstrap
安裝。
不同於 Holman's dotfiles,我修改了一些部分:
- Shell 的部分改用 Oh My Zsh取代原作者自己配置的 zsh。
- 移除 topic/aliases.zsh、topic/completion.zsh 等檔案,改用 Oh My Zsh 的 [plugins]。(https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins) 代替。
- 移除 zsh/prompt.zsh、zsh/window.zsh.zsh 等檔案,改用 Oh My Zsh 的 [themes]。(https://github.com/robbyrussell/oh-my-zsh/wiki/Themes) 代替。
- dotfiles 只專注在 topic/*.symlink、topic/path.zsh 的配置。
OS X
bin/dot
是一支簡單的腳本,會在 script/bootstrap
配置完 dotfiles 之後執行,安裝自定的 OS X 程式並設定系統參數配置。
執行 dot
之後,它會跑以下兩支腳本檔:
-
$HOME/.dotfiles/homebrew/install.sh
- Homebrew packages -
$HOME/.dotfiles/osx/set-defaults.sh
- OS X defaults setting
Homebrew packages
執行 homebrew/install.sh
的時候,腳本會使用 Homebrew 和 Homebrew Cask 來安裝 binary、font 還有 app,可以根據個人需求修改這個檔案,增加或減少自己需要的 packages:
sh
binaries=( git tree ... )
字型都是以 font-XXX 的形式命名,可以用 brew cask search /font-XXX/
搜尋是否存在。
sh
fonts=( font-roboto ... )
應用程式可以用 brew cask search XXX
或是 Cask Search 網站搜尋是否存在。
sh
apps=( dropbox google-chrome ... )
以下是目前安裝的 packages:
Binary | 說明 |
---|---|
boot2docker | Linux virtual machine provider |
docker | An open platform for distributed applications for developers and sysadmins. |
git-flow | Git branch manage model |
grc | log 上色 |
legit | optimized for Git command-line |
mackup | 同步應用程式的配置 |
nvm | Node Version Manager |
ssh-copy-id | install your public key in a remote machine’s authorized_keys |
trash | 樹狀目錄顯示 |
tree | 刪除至垃圾桶 |
Font | 說明 |
---|---|
font-roboto | Roboto |
font-source-code-pro | Source Code Pro |
App | 說明 |
---|---|
alfred | 三大神器之一 |
dash | 程式文件查詢 |
dropbox | 雲端硬碟 |
evernote | 筆記 |
flux | 螢幕色彩亮度調整 |
google-chrome | Google 瀏覽器 |
iterm2 | 加強版終端機 |
Kaleidoscope | File comparison for Mac |
Keka | 免費的Mac OS X 檔案壓縮程式 |
mou | Markdown 編輯器 |
qlcolorcode | 讓 Quick Look 支援 syntax highlighting |
qlmarkdown | 讓 Quick Look 支援 Markdown |
qlstephen | 讓 Quick Look 支援無副檔名的純文字檔 |
聊天 | |
sourcetree | Git GUI |
sublime-text3 | 程式碼編輯器 |
virtualbox | 虛擬機 |
VLC | 媒體播放器 |
OS X defaults setting
執行 osx/set-defaults.sh
之後,程式會將 Mac OS X 的一些系統設置改變,可以根據個人需求修改這個檔案,或是參考 Mathias’s dotfiles 整理好的配置。
以下是目前設定的配置:
setting | script |
---|---|
關閉電池進入深入睡眠模式 | sudo pmset -a standby 0 |
關閉電源進入深入睡眠模式 | sudo pmset -a autopoweroff 0 |
加快視窗 resize 的速度(Cocoa applications) | defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 |
預設展開儲存視窗 | defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true |
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true | |
關閉“你確定要開啟這個應用程式?”詢問視窗 | defaults write com.apple.LaunchServices LSQuarantine -bool false |
關閉 Time Machine | sudo tmutil disablelocal |
加速進入睡眠模式 | sudo pmset -a hibernatemode 0 |
開啟觸控板輕觸點擊功能 | defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true |
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 | |
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 | |
開啟觸控板/滑鼠右鍵選單功能 | defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true |
defaults write com.apple.driver.AppleBluetoothMultitouch.mouse MouseButtonMode "TwoButton" | |
開啟觸控板三指拖曳功能 | defaults -currentHost write NSGlobalDomain com.apple.trackpad.threeFingerDragGesture -bool true |
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true | |
開啟觸控板四指向下滑出現 app expose 功能 | defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerVertSwipeGesture -int 0 |
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerVertSwipeGesture -int 0 | |
defaults write com.apple.dock showAppExposeGestureEnabled -int 1 | |
加快觸控板/滑鼠的速度 | defaults write NSGlobalDomain com.apple.trackpad.scaling -int 3 |
defaults write NSGlobalDomain com.apple.mouse.scaling -int 3 | |
開啟全部視窗組件支援鍵盤控制 | defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 |
關閉鍵盤按住的輸入限制 | defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false |
加快鍵盤輸入 | defaults write NSGlobalDomain KeyRepeat -int 0 |
移除視窗截圖的影子 | defaults write com.apple.screencapture disable-shadow -bool true |
預設 Finder 起始位置為下載資料夾 | defaults write com.apple.finder NewWindowTarget -string "PfLo" |
defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}/Downloads/" | |
顯示副檔名 | defaults write NSGlobalDomain AppleShowAllExtensions -bool true |
顯示 Finder 狀態列 | defaults write com.apple.finder ShowStatusBar -bool true |
顯示 Finder 路徑列 | defaults write com.apple.finder ShowPathbar -bool true |
允許框選 Finde Quick Look 的文字 | defaults write com.apple.finder QLEnableTextSelection -bool true |
Finder 標題列顯示完整路徑 | defaults write com.apple.finder _FXShowPosixPathInTitle -bool true |
預設搜尋列的結果為當前目錄下 | defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" |
關閉改變副檔名的警告提示 | defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false |
開啟資料夾的 spring loading 功能 | defaults write NSGlobalDomain com.apple.springing.enabled -bool true |
開啟 Dock 的 spring loading 功能 | defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true |
移除 spring loading 的延遲 | defaults write NSGlobalDomain com.apple.springing.delay -float 0 |
避免在 network volumes 底下建立 .DS_Store 檔案 | defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true |
使用 column view 作為 Finder 預設顯示選項 | defaults write com.apple.finder FXPreferredViewStyle -string "clmv" |
關閉清空垃圾桶的警告提示 | defaults write com.apple.finder WarnOnEmptyTrash -bool false |
使用黑色的選單列和 Dock | defaults write NSGlobalDomain AppleInterfaceStyle Dark |
使用縮放的效果作為視窗放大縮小效果 | defaults write com.apple.dock mineffect -string "scale" |
應用程式縮小至自己的圖示 | defaults write com.apple.dock minimize-to-application -bool true |
顯示 Dock 應用程式開啟中的小亮燈提示 | defaults write com.apple.dock show-process-indicators -bool true |
關閉 Dock 開啟應用程式的彈跳動畫 | defaults write com.apple.dock launchanim -bool false |
加快 Mission Control 的動畫速度 | defaults write com.apple.dock expose-animation-duration -float 0.1 |
關閉 Mission Control 的應用程式群組化顯示 | defaults write com.apple.dock expose-group-by-app -bool false |
關閉 Dashboard | defaults write com.apple.dashboard mcx-disabled -bool true |
將 Dashboard 從多重桌面之中移除 | defaults write com.apple.dock dashboard-in-overlay -bool true |
自動隱藏 Dock | defaults write com.apple.dock autohide -bool true |
移除隱藏 Dock 的延遲 | defaults write com.apple.dock autohide-delay -float 0 |
移除 Dock 的顯示/隱藏動畫 | defaults write com.apple.dock autohide-time-modifier -float 0 |
將隱藏的應用程式 Dock 圖示半透明顯示 | defaults write com.apple.dock showhidden -bool true |
以上,若修改過 homebrew/install.sh
或 osx/set-defaults.sh
之後,直接執行指令:
sh
dot
就會再次更新 packages 還有 defaults setting。
Mackup
當初始環境都安裝好之後,剩下的就是恢復備份。除了 .zsrc
、.vimrc
這類 dotfile 比較適合放在版本控制之外,其他像是 Sublime 的 plugin、iTerm2 的 setting、Oh My Zsh 的 plugin、等等很多還有一般應用程式的配置檔需要備份,甚至是 SSH 的 key,這些我認為都不適合丟進 dotfiles 放上 GitHub。所以這裡介紹 Mackup 這個簡單的工具作為解決方案,使用方式很簡單,brew install mackup
安裝完之後只要執行:
mackup backup
就可以將檔案備份到 Dropbox 或 Google Drive。當需要恢復的時候則是執行:
mackup restore
就會將雲端硬碟上的備份以 ln
連結的方式在新電腦上同步。
配置方式也很容易,建立一份 ~/.mackup.cfg
,或是直接使用 .dofiles/mackup/mackup.cfg.symlink
來修改:
sh
[storage] engine = dropbox # 同步的雲端硬碟,有 dropbox 與 google_drive 可以選擇 directory = Mackup # 同步的資料夾,這裡會將所有備份同步至 ~/Dropbox/Mackup 底下 # 指定要同步的應用程式 [applications_to_sync] iterm2 oh-my-zsh sublime-text-3 ssh [applications_to_ignore] # 指定不想同步的應用程式
以下是目前備份的應用程式:
app | 說明 |
---|---|
aws | AWS Command Line Interface |
dash | 程式文件查詢 |
flux | 螢幕色彩亮度調整 |
iterm2 | 加強版終端機 |
moom | 視窗布局 |
oh-my-zsh | 加強版 ZSH |
sourcetree | Git GUI |
sublime-text-3 | 程式碼編輯器 |
ssh | SSH Key |
更多詳細的配置與支援的軟體請參閱 mackup 的文件。
Issue
App Store
剩下無法透過 Homebrew 安裝,或是需要透過 App Store 購買的應用程式,只能手動一個一個安裝回來了...
以下是目前安裝的應用程式:
App | 說明 |
---|---|
Moom | 視窗布局 |
Day One | 日記 |
LINE | 聊天 |
Microsoft Remote Desktop | 遠端桌面 |
其他安裝方式的應用程式:
App | 說明 |
---|---|
小麥注音輸入法 | 輸入法 |
Affinity Photo beta | 修圖軟體 |
參考文章
Bugs
If you're brand-new to the project and run into any blockers, please open an issue on this repository and I'd love to get it fixed for you!
Thanks
I forked Zach Holman's excellent dotfiles.
台灣原生種程序猿
如何正確處理 AWS API Gateway 的 Lambda Error Status
Amo阅读 3.4k
工具篇:iTerm与Zsh
super白赞 4阅读 4.7k
mac下git命令自动补全
zorro阅读 5k
前端怎么配置刚到手的mac和常用的快捷键
HappyCodingTop阅读 2k
macOS Monterey 12.2 (21D49) 正式版 ISO、IPSW、PKG 下载
sysin阅读 1.6k
macOS Monterey 12.2 (21D49) Boot ISO 原版可引导镜像
sysin阅读 1.3k
macOS Monterey 12.2.1 (21D62) 正式版 ISO、IPSW、PKG 下载
sysin阅读 959
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。