前段時間看到「码农的自我修养之保持干净的 $HOME 目录」,瞭解到了 xdg-ninja 這個工具。
我也是一個賽博潔癖。我還另外使用 stow 配合 git 管理我的 .config。這樣可以做到版本管理和快捷複製(duplicate)到其他環境。
XDG Base Directory Specification
就是 XDG 基本目錄規範,概念來自 freedesktop。
具體都有這些細分。也就是我在 .zprofile 中 export 的路徑。
XDG_CONFIG_HOME = "$HOME/.config"
XDG_DATA_HOME = "$HOME/.local/share"
XDG_STATE_HOME = "$HOME/.local/state"
XDG_CACHE_HOME = "$HOME/.cache"
# MacOS 下沒有指定的 RUNTIME 目錄,CACHE 效果相同
XDG_RUNTIME_DIR = "$HOME/.cache"
xdg-ninja
xdg-ninja 是一個能夠檢測你 $HOME 下不符合 XDG 基本目錄規範的檔案,然後給出對應的解決方案。當然也會有類似 .trash,.yarn 或者 .anydesk 這類檢測到無法解決的目錄。
透過 Brew 安裝後,執行 xdg-ninja 檢測不合規範的目錄,然後根據對應的提示修改。我會同時安裝 glow ,讓輸出的內容顯示為渲染後的 Markdown 格式。
其中一個比較特殊的配置項就是 zsh,需要在 /etc/zshenv 中 export 對應的 $ZDOTDIR 路徑。
echo 'export ZDOTDIR="$HOME"/.config/zsh' | sudo tee -a /etc/zshenv
我將 zsh 目錄放置在 $HOME/.config/zsh,也就是上述的指令碼。
同時我也會使用外掛管理器 antidote,所以需要把 $HOME 下的 .zsh_plugins.txt 也手動放置在 $ZDOTDIR。
遷移完配置檔案到 XDG 的標準目錄下後,我還需要版本管理。
stow
我第一次認識到這個工具是在 Dreams of Autonomy 頻道下的影片。但是我的管理方式會與他略有不同,我會把 .config 下的文件直接放置在 ~/dotfiles 內。
首先在 %HOME 下創建一個目錄 ~/dotfiles。
因為我會把最終由 stow 管理的檔案上傳到 Gholts/dotfiles,所以不能把所有 .config 下的檔案全扔進 ~/dotfiles。
挑選完沒有隱私資訊的配置文件後,就可以直接嘗試開始符號鏈接。前提是保證 .config 下沒有對應的文件,不然會連接失敗。
cd dotfiles
stow -t ~/.config .
配置就會被鏈接到 ~/.config。 如果需要編輯某一個受管理的配置檔案,直接打開原路徑即可,比如 nvim ~/.config/xxx/xxx.json。
除此之外,我還需要使用 git 進行版本管理。
可以根據 4.2 Types And Syntax Of Ignore Lists 得知 stow 會預設屏蔽 git 產生的檔案。
可我需要創建 README,或是不想 .DS_Store 也被到處鏈接,需要一定的設定。
可以在 $HOME 下創建 .stow-global-ignore,將要排除的檔案名稱放進去。但十分遺憾,這個檔案本身並不支援 XDG 基本目錄規範。
取消 stow 的符號鏈接透過下面的程式碼。
cd dotfiles
stow -D .
在這些都完成之後,不僅 $HOME 目錄下整潔不少,關鍵的配置檔案也可以進行版本管理和遠端存儲。
最後我的 dotfiles 置在了 Gholts/dotfiles。