什麼是dotfile (點檔案/點文件)?簡言之就是應用程式的設定檔,例如~/.vimrc
就是dotfile。Linux萬物皆檔案,程式設定多半寫在單一檔案裡面,並且程式通常會將dotfile放在隱藏目錄(Linux檔名以點開頭就會變成隱藏檔案),不讓一般使用者看到。
那麼這些設定檔會放在哪裡呢?多半散落在使用者家目錄下。Dotfile如果管理不當,就會導致 dotfile泛濫成災的問題
時間久了,你可能會忘記設定檔放在哪裡,換電腦要重新備份dotfile是很困擾的事情。尤其對喜歡自定義桌面的人來說,換電腦全部重設文件實在麻煩。
所以,我們需要一款dotfile管理程式。本篇文章Ivon要分享的是Tom Payne開發的「Chezmoi」。
chez moi唸做 /ʃeɪ mwa/ ,在法文為「我家」的意思。chezmoi類似以前流行的GNU Stow,但是功能更多。
chezmoi可以將散落在各個目錄的dotfile統一管理,變成Git儲存庫,追蹤檔案變更,方便日後搬移、還原、多裝置同步。它還支援搭配secret manager管理密碼檔案。
1. 安裝chezmoi#
參考 Github說明
chezmoi大多數Linux發行版都有收:
# Ubuntu
sudo snap install chezmoi
# Arch
sudo pacman -S chezmoi
或者,你也可以直接抓作者提供的二進位檔安裝,預設會安裝至~/.bin
sh -c "$(curl -fsLS get.chezmoi.io)"
2. 初始化chezomi儲存庫#
- 建立儲存庫,預設位於
~/.local/share/chezmoi
chezmoi init
- 建議先將初始化chezmoi儲存庫,並推到自己的Github儲存庫備份。
cd ~/.local/share/chezmoi
git remote add origin https://github.com/Github使用者名稱/dotfiles.git
git add -a
git commint -m ""
git push -u origin main
3. chezmoi的dotfile管理方式#
chezmoi可以追蹤單一檔案或者目錄。
根據 官方文件,chezmoi的管理方式是這樣運作的。你本機的檔案,就好像一個大型git儲存庫一樣,能夠隨時提交或回退。
- 將要追蹤的dotfile或目錄加入,chezmoi會紀錄其路徑,並複製一份到自己儲存庫。chezmoi並不會建立符號連結。
chezmoi add ~/.vimrc
chezmoi add ~/.bashrc
chezmoi add ~/.config/yt-dlp
日後編輯dotfile就用chezmoi管理,使用指令
chezmoi managed
列出已加入的dotfile。chezmoi cd
可快速切換到儲存庫所在的目錄。編輯的時候chezmoi修改的會是儲存庫下的檔案,比如這裡
~/.vimrc
實際上是在編輯~/.local/share/chezmoi/dot_vimrc
這個檔案。至於開啟的編輯器為何則是看你的$EDITOR
數值。
chezmoi edit ~/.vimrc
- 等到編輯完成,輸入
chezmoi apply -v
指令,才會真的套用變更到原始檔案
# 對照變更
chezmoi diff
# 套用變更
chezmoi apply -v
- 如果沒有使用chezmoi指令,卻自行修改了dotfile的話要怎麼辦呢?只要重新把它加入追蹤即可
# 對照變更
chezmoi diff
chezmoi add ~/.vimrc
4. chezmoi其他用法#
chezmoi支援後面直接串git指令,不過有引數的話要用--
隔開防止chezmoi誤判。
chezmoi git add .
chezmoi git add dot_vimrc
chezmoi git -- commit -m "Add .vimrc"
chezmoi status
:列出儲存庫狀態。
chezmoi verify
:檢驗dotfile是否存在。
chemozi merge <dotile>
:開啟vimdiff程式,方便你查看多個檔案的差異。
chezmoi forget <dotile>
:取消追蹤特定檔案,但不刪除。
chezmoi rm <dotfile>
:刪除dotfile。
chezmoi purge
:刪除全部儲存庫下的dotfile。
5. 在多個裝置同步dotfile#
理想上用單一的Git儲存庫同步會比較方便。
要在其他電腦還原設定檔,那麼就在該電腦用chezmoi複製儲存庫,再Apply套用。
# 複製儲存庫
chezmoi init https://github.com/你的儲存庫網址
# 檢查差異
chezmoi diff
# 套用
chezmoi apply -v