基于 macOS 14+ (ARM64) 环境,chezmoi v2.70.0+
一、为什么选择 Chezmoi
之前尝试过直接 symlink 和 GNU Stow,但都有痛点:
| 方案 | 问题 |
|---|---|
| 手动 symlink | 难以追踪变更,多机器同步靠 rsync |
| GNU Stow | 不支持加密,目录结构受限 |
| Chezmoi | Git 版本控制 + GPG 加密 + 原子操作 |
Chezmoi 的核心优势:
- 源码与目标分离:源码在
~/.local/share/chezmoi/,目标在~/ - 支持加密:敏感文件用 GPG/age 加密后提交
- 原子操作:
chezmoi apply一次性应用所有配置 - 跨机器同步:配合 Git 仓库,新机器一条命令恢复
二、快速开始
2.1 安装
# Homebrew 安装brew install chezmoi
# 或手动安装curl -sSfL https://get.chezmoi.io | sh2.2 初始化
# 初始化新仓库(自动打开编辑器创建 Git 仓库)chezmoi init2.3 添加文件
# 添加普通文件chezmoi add ~/.zshrcchezmoi add ~/.gitconfig
# 添加可执行文件(自动设置 executable 前缀)chezmoi add ~/.zshrc
# 添加目录chezmoi add --recursive ~/.config/starship2.4 编辑文件
# 编辑后自动应用到目标位置chezmoi edit ~/.zshrc
# 编辑加密文件(自动解密/加密)chezmoi edit ~/.wakatime.cfg2.5 应用配置
# 预览变更chezmoi apply --dry-run --verbose
# 实际应用chezmoi apply三、工作流程
┌─────────────┐ ┌──────────────┐ ┌─────────────┐│ 编辑源码文件 │ → │ chezmoi add │ → │ Git 提交推送 ││ ~/.zshrc │ │ ~/.zshrc │ │ │└─────────────┘ └──────────────┘ └─────────────┘ ↓┌─────────────┐ ┌──────────────┐ ┌─────────────┐│ 应用到目标 │ ← │ 新机器拉取 │ ← │ Git 仓库 ││ chezmoi apply│ │ chezmoi init │ │ │└─────────────┘ └──────────────┘ └─────────────┘四、进阶用法
4.1 加密敏感信息
使用 GPG 加密:
# 生成 GPG 密钥gpg --full-generate-key
# 配置 chezmoiecho 'encryption = "gpg"' > ~/.config/chezmoi/chezmoi.tomlecho '[gpg]' >> ~/.config/chezmoi/chezmoi.toml
# 添加加密文件chezmoi add --encrypt ~/.wakatime.cfg4.2 忽略文件
.local/.cache/*.log4.3 多机器同步
# 新机器初始化chezmoi init --apply zhijunio
# 查看状态chezmoi status
# 拉取最新配置chezmoi cd && git pull && chezmoi apply4.4 在新机器上恢复
# 1. 安装 chezmoibrew install chezmoi
# 2. 初始化并应用(自动克隆仓库)chezmoi init --apply username
# 3. 验证chezmoi doctor如果有加密文件,需要先导入 GPG/age 密钥:
# GPGgpg --import ~/backup/gpg-secret-keys.asc
# agecat ~/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 只需一行:
eval "$(command sheldon source)"优势:
- 所有插件通过 Homebrew 安装,
brew upgrade统一更新 - Lock 文件固定版本,跨机器一致
- 无需 git clone 插件仓库
6.2 Ghostty 终端配置
config(~/.config/ghostty/config):
# 窗口设置window-width = 120window-height = 40background-opacity = 0.95
# 字体font-family = "JetBrainsMono Nerd Font"font-size = 14
# 链接打开(Cmd+Click)open-url = trueopen-url-modifier = cmd
# 行为copy-on-select = trueconfirm-close-surface = true七、常用命令速查
# ===== 基础操作 =====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 # 进入源码目录