使用 chezomi 管理你的 dotfiles

  • ~2.79K 字
  1. 1. 前言
  2. 2. 快速上手
    1. 2.1. 初始化
    2. 2.2. 添加命令
    3. 2.3. 更换编辑器
    4. 2.4. 更改配置文件并应用
    5. 2.5. ~/.config/chezmoi/chezmoi.toml 配置文件
  3. 3. 模板

前言

在许久之前自己手写了一个 dotfiles 的管理工具,但在开发的过程中还是遇到了不少问题,最后还是只能在自己的机器上复现,在其他人的机器上还不如直接复制粘贴来的方便。最近发现了这个 chezmoi 工具,它可以很方便的管理你的 dotfiles,解决了跨平台与兼容性、敏感数据安全、多设备配置同步与管理和模板与自动化问题。这里来推广一下并给出一份入门级使用教程。

注意:如果你想使用这个工具,请一定提前备份已有的 dotfiles,以免因为刚上手时不清楚命令的具体运作方式导致备份丢失。

chezmoi 会在你自己的机器上新建一个 ~/.local/share/chezmoi 目录,你可以往这个目录里手动添加你需要它管理的配置文件,然后 chezmoi 会将你原来的配置文件复制并改名为以 dot_xxx 形式的文件到这个新目录下,接着就可以通过 github 平台来管理这个新目录。除了 dot_xxx 形式的文件外,还可以创建 run_xxx 等形式的文件来存储跨平台用的脚本。

快速上手

初始化

1
2
3
4
5
6
7
8
9
10
sudo pacman -S chezmoi # archlinux 安装 chezmoi
chezmoi init # 在任意路径下初始化,会自动在系统固定路径创建新目录 ~/.local/share/chezmoi
chezmoi cd # 进入这个刚创建的新目录
chezmoi add ~/.zshrc # 添加需要管理的配置文件
# 当你添加完以后
# 手动在 Github 上创建一个新的仓库
# 接着就是正常的上传操作了
git remote add origin git@github.com:$GITHUB_USERNAME/dotfiles.git
git branch -M main
git push -u origin main

添加命令

更完整的添加命令:

1
2
3
4
5
6
chezmoi add .zshrc # 添加文件
chezmoi add -x .config/fish/functions/ # 添加文件夹
chezmoi add -xa .config/fish/functions # 递归添加文件夹和子目录下的全部内容
chezmoi add -T .xprofile # 添加临时内容
chezmoi add .tmux.conf --follow # 添加软链接对应的原始内容,而不是软链接符号
chezmoi managed # 列出所管理的内容路径

~/.config/chezmoi/chezmoi.toml
使用 chezmoi edit-config 命令可以自动打开并编辑 chezmoi 的配置文件
我习惯所有修改配置文件的命令都是该程序名后面加个 c
alias chezmoic="chezmoi edit-config"

更换编辑器

更改 chezmoi 默认编辑器为 nvim:

~/.config/chezmoi/chezmoi.toml 中添加以下内容:

1
2
3
4
5
6
7
8
[editor]
command = "nvim"

# 或者官方推荐的使用 VSCode:

[editor]
command = "code"
args = ["--wait"]

更改配置文件并应用

1
2
3
4
5
6
7
8
9
10
chezmoi edit ~/.zshrc # 日后的更改都是通过修改这个新目录下的配置文件来实现的
# 注意上面的命令看似是修改了 ~/.zshrc 文件,但实际上是修改了 ~/.local/share/chezmoi/dot_zshrc 文件
# 如果你还是修改了原来的配置文件,请使用 chezmoi add ~/.zshrc 重新添加到新目录下来同步
# 注意在上面这个情况下不要使用 chezmoi apply ~/.zshrc 这可能会导致你的配置丢失

chezmoi apply # 将新目录下的配置文件覆盖机器上的配置文件,请特别注意这条命令的使用,可能会导致你的现有更改消失
# 之后再使用 git 命令像正常开发一样提交更改到 Github 上

# 或者更方便些,融合上面两条命令
chezmoi edit ~/.zshrc --apply # 编辑并立即应用

为了便于平常更改,我在 ~/.zshrc 中添加了以下内容:

1
alias zshc="chezmoi edit ~/.zshrc --apply && source ~/.zshrc"

查看更改

比较本地的两个配置文件之间的差异

1
2
chezmoi diff
chezmoi diff ~/.zshrc

~/.config/chezmoi/chezmoi.toml 配置文件

这个配置文件可以配置chezmoi自身的一些行为,这里提供我的一份简单配置:

1
2
3
4
5
6
7
8
9
10
11
[data]
email = ""
name = ""

[edit]
command = "nvim"
apply = true

[git]
autoCommit = true
autoPush = true

值得注意的是,chezmoi 不允许添加自己的配置文件管理,也就是说这份 toml 文件是无法 chezmoi add 的。

模板

chezmoi 解决在多台机器上管理配置文件的方案是使用模板。模板里会留有一些变量,在不同机器上会根据机器的自身特性来动态替换这些变量。

以添加 ~/.gitconfig 为例

1
2
3
4
chezmoi data | jq # 查看当前机器的模板变量
# 如果有 name 变量但是没有 email 变量,就还需要在配置文件中添加 email 变量

chezmoi add ~/.gitconfig --template # 会在 ~/.local/share/chezmoi 目录下创建一个 .gitconfig.tmpl 文件

在其他设备上初始化时,可以使用如下命令:

1
chezmoi init https://github.com/kingpoem/dotconfig.git

上传加密文件

1
2
sudo pacman -S age # archlinux 安装 age 加密工具
chezmoi add --encrypt ~/.ssh/id_rsa # 加密文件

参考
chezmoi 官方文档
Hank 的博客
初等記憶體的博客
chezmoi 作者自己的点文件