基于 macOS 14+ (ARM64) 环境,chezmoi v2.70.0+

一、为什么选择 Chezmoi

之前尝试过直接 symlink 和 GNU Stow,但都有痛点:

方案问题
手动 symlink难以追踪变更,多机器同步靠 rsync
GNU Stow不支持加密,目录结构受限
ChezmoiGit 版本控制 + GPG 加密 + 原子操作

Chezmoi 的核心优势:

  1. 源码与目标分离:源码在 ~/.local/share/chezmoi/,目标在 ~/
  2. 支持加密:敏感文件用 GPG/age 加密后提交
  3. 原子操作chezmoi apply 一次性应用所有配置
  4. 跨机器同步:配合 Git 仓库,新机器一条命令恢复

二、快速开始

2.1 安装

Terminal window
# Homebrew 安装
brew install chezmoi
# 或手动安装
curl -sSfL https://get.chezmoi.io | sh

2.2 初始化

Terminal window
# 初始化新仓库(自动打开编辑器创建 Git 仓库)
chezmoi init

2.3 添加文件

Terminal window
# 添加普通文件
chezmoi add ~/.zshrc
chezmoi add ~/.gitconfig
# 添加可执行文件(自动设置 executable 前缀)
chezmoi add ~/.zshrc
# 添加目录
chezmoi add --recursive ~/.config/starship

2.4 编辑文件

Terminal window
# 编辑后自动应用到目标位置
chezmoi edit ~/.zshrc
# 编辑加密文件(自动解密/加密)
chezmoi edit ~/.wakatime.cfg

2.5 应用配置

Terminal window
# 预览变更
chezmoi apply --dry-run --verbose
# 实际应用
chezmoi apply

三、工作流程

┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 编辑源码文件 │ → │ chezmoi add │ → │ Git 提交推送 │
│ ~/.zshrc │ │ ~/.zshrc │ │ │
└─────────────┘ └──────────────┘ └─────────────┘
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 应用到目标 │ ← │ 新机器拉取 │ ← │ Git 仓库 │
│ chezmoi apply│ │ chezmoi init │ │ │
└─────────────┘ └──────────────┘ └─────────────┘

四、进阶用法

4.1 加密敏感信息

使用 GPG 加密:

Terminal window
# 生成 GPG 密钥
gpg --full-generate-key
# 配置 chezmoi
echo 'encryption = "gpg"' > ~/.config/chezmoi/chezmoi.toml
echo '[gpg]' >> ~/.config/chezmoi/chezmoi.toml
echo 'recipient = "[email protected]"' >> ~/.config/chezmoi/chezmoi.toml
# 添加加密文件
chezmoi add --encrypt ~/.wakatime.cfg

4.2 忽略文件

.chezmoiignore
.local/
.cache/
*.log

4.3 多机器同步

Terminal window
# 新机器初始化
chezmoi init --apply zhijunio
# 查看状态
chezmoi status
# 拉取最新配置
chezmoi cd && git pull && chezmoi apply

4.4 在新机器上恢复

Terminal window
# 1. 安装 chezmoi
brew install chezmoi
# 2. 初始化并应用(自动克隆仓库)
chezmoi init --apply username
# 3. 验证
chezmoi doctor

如果有加密文件,需要先导入 GPG/age 密钥:

Terminal window
# GPG
gpg --import ~/backup/gpg-secret-keys.asc
# age
cat ~/backup/age-key.txt >> ~/.age-key.txt

六、当前配置示例

6.1 Sheldon 插件管理器

使用 Sheldon 替代 oh-my-zsh 管理 zsh 插件,配置更简洁、加载更快。

plugins.toml~/.config/sheldon/plugins.toml):

shell = "zsh"
[templates]
source = """{% for file in files %}source "{{ file }}"\n{% endfor %}"""
# zsh-completions - 额外补全定义 (Homebrew)
[plugins.zsh-completions]
inline = '''fpath=(
"/opt/homebrew/share/zsh-completions"
"/opt/homebrew/Cellar/zsh/5.9/share/zsh/functions"
$fpath
)'''
# zsh-syntax-highlighting - 语法高亮 (Homebrew)
[plugins.zsh-syntax-highlighting]
inline = 'source "/opt/homebrew/opt/zsh-syntax-highlighting/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"'
# zsh-autosuggestions - 自动建议 (Homebrew)
[plugins.zsh-autosuggestions]
inline = 'source "/opt/homebrew/opt/zsh-autosuggestions/share/zsh-autosuggestions/zsh-autosuggestions.zsh"'
# Starship 提示符 (Homebrew)
[plugins.starship]
inline = 'eval "$(starship init zsh)"'
# zoxide 目录跳转 (Homebrew)
[plugins.zoxide]
inline = 'eval "$(zoxide init zsh)"'

.zshrc 只需一行:

Terminal window
eval "$(command sheldon source)"

优势

  • 所有插件通过 Homebrew 安装,brew upgrade 统一更新
  • Lock 文件固定版本,跨机器一致
  • 无需 git clone 插件仓库

6.2 Ghostty 终端配置

config~/.config/ghostty/config):

# 窗口设置
window-width = 120
window-height = 40
background-opacity = 0.95
# 字体
font-family = "JetBrainsMono Nerd Font"
font-size = 14
# 链接打开(Cmd+Click)
open-url = true
open-url-modifier = cmd
# 行为
copy-on-select = true
confirm-close-surface = true

七、常用命令速查

Terminal window
# ===== 基础操作 =====
chezmoi status # 查看状态
chezmoi diff # 查看差异
chezmoi apply # 应用所有配置
chezmoi apply --dry-run # 预览变更
# ===== 文件管理 =====
chezmoi add ~/.zshrc # 添加文件
chezmoi edit ~/.zshrc # 编辑文件
chezmoi remove ~/.zshrc # 移除管理
# ===== Git 操作 =====
chezmoi git status # Git 状态
chezmoi git add . # Git 添加
chezmoi git commit -m "msg" # Git 提交
chezmoi git push # Git 推送
chezmoi git pull # Git 拉取
# ===== 高级操作 =====
chezmoi data # 查看模板数据
chezmoi doctor # 诊断问题
chezmoi managed # 列出管理的文件
chezmoi cd # 进入源码目录

七、参考资料