使用 chezmoi 管理 dotfiles 时,核心原则是:只管理那些需要跨设备同步、版本控制且配置逻辑相对稳定的文件。

以下是按优先级分类的 chezmoi 最佳实践建议:

✅ 强烈推荐管理 (核心配置)

这些文件通常包含你的编辑器习惯、版本控制设置、系统偏好等,是 dotfiles 的“骨架”。

  • 编辑器配置
    • ~/.config/nvim/ (Neovim):你的 init.vim 或 init.lua。
    • ~/.config/vim/ (Vim):vimrc。
    • ~/.config/karabiner/ (Karabiner-Elements):Mac 键盘映射。
    • ~/.config/hypr/ (Hyprland):Hyprland 配置。
    • ~/.config/fish/ (Fish Shell):config.fish。
  • 版本控制与开发工具
    • ~/.gitconfig:Git 全局设置。
    • ~/.ssh/:SSH 密钥和配置(注意:chezmoi 会加密文件,但绝对不要上传私钥 id_rsa 等,建议仅管理 config 和 id_ed25519.pub 等公钥)。
    • ~/.config/starship.toml:Shell 提示符样式。
    • ~/.config/tmux/:Tmux 配置。
  • 系统偏好
    • ~/.bashrc / ~/.zshrc:Shell 初始化(建议只管理 source 的部分,或者确保逻辑清晰)。
    • ~/.config/gtk-3.0/settings.ini:GTK 外观配置。
    • ~/.config/waybar/:Wayland 状态栏。

⚠️ 谨慎管理 (需特殊处理)

这些文件容易因环境不同而失效,或者包含敏感信息。

  • 环境变量 (~/.bashrc, ~/.zshrc 等)
    • 建议:不要直接在 chezmoi 中写死 export PATH=...。使用 chezmoi 的 {{ .chezmoi.os }} 或 {{ .chezmoi.homeDir }} 模板功能来适配不同系统。
    • 技巧:将环境变量提取到 ~/.config/chezmoi/chezmoi.toml 或单独的 env.toml 模板文件中,通过 chezmoi 生成 ~/.bashrc 时注入。
  • SSH 密钥
    • 绝对禁止:将 ~/.ssh/id_rsa 等私钥放入 Git 仓库。
    • 方案:使用 chezmoi 的加密功能(chezmoi add --encrypted),或者更推荐的方式是:让 chezmoi 生成 ~/.ssh/config 文件,而私钥通过其他安全渠道(如 ssh-agent 或物理传输)在首次设置时生成。
  • 本地路径相关的配置
    • 例如 ~/.config/spotify/scripts/... 或特定的 IDE 项目目录。
    • 方案:使用 {{ .chezmoi.homeDir }} 变量来替代硬编码路径。

❌ 不建议管理 (动态或高度敏感)

  • 自动生成的缓存文件:~/.cache/, ~/.local/share/ 中的临时文件。
  • 密码管理器的核心数据库:如 ~/.gnupg/ (除非你非常清楚如何安全备份),或者 ~/.password-store/(虽然可以管理,但需极度小心加密)。
  • 特定机器的硬件配置:如 ~/.config/nvidia/ 或 ~/.config/dconf/ 中的某些硬件相关设置,如果不想每次切换设备都出问题。
  • 临时文件或日志:~/.config/termite/logs 等。

🚀 进阶实践建议

  1. 使用 ~/.config/chezmoi/chezmoi.toml 这是 chezmoi 的主配置文件。你可以在这里定义:

    • 你的 Git 仓库 URL。
    • 加密密钥(如 pgp)。
    • 忽略规则(ignore)。
    • 目标路径的默认权限。
  2. 利用模板功能 (Templates) chezmoi 基于 Go 模板引擎。你可以创建 ~/.config/chezmoi/chezmoi.toml.tmpl 或 .bashrc.tmpl,在其中使用变量:

    # .bashrc.tmpl
    export PATH={{ .chezmoi.homeDir }}/bin:{{ .chezmoi.homeDir }}/go/bin:$PATH
    
    {{- if eq .chezmoi.os "darwin" }}
    # macOS specific settings
    export BROWSER="open"
    {{- else if eq .chezmoi.os "linux" }}
    # Linux specific settings
    export BROWSER="xdg-open"
    {{- end }}
    
  3. 处理敏感数据 使用 chezmoi add --encrypted 将敏感配置文件(如包含 API Key 的 credentials.toml)加密存储。在恢复时,chezmoi 会自动解密并放到正确位置。

  4. 目录结构建议 保持仓库整洁,按功能分类:

    dotfiles/
    ├── .chezmoiexternals.toml   # 外部依赖
    ├── .chezmoiremote.toml      # 远程配置
    ├── .chezmoi.toml            # 主配置
    ├── .bashrc.tmpl             # 模板
    ├── .gitconfig.tmpl
    ├── bin/                     # 可执行脚本
    │   └── myscript.sh
    ├── config/                  # 应用配置
    │   ├── neovim/
    │   │   └── init.vim
    │   └── fish/
    │       └── config.fish
    └── secrets/                 # 敏感数据 (加密)
        └── credentials.toml.enc
    

总结

核心原则:chezmoi 最适合管理静态配置和可参数化的模板。 避免:管理那些高度依赖特定硬件、自动生成的垃圾文件或包含未加密的私钥。

通过这种方式,你可以在新设备上通过一条命令 chezmoi apply 获得一个几乎完全一致的开发环境。