chezmoi是一款基于模板的dot配置管理器,使用go语言编写,并使用https://pkg.go.dev/text/template来对配置进行模板化以适应不同平台差异。
实际上,chezmoi使用的是sprig扩展了的go语言的模板:http://masterminds.github.io/sprig/
chezmoi的灵感来自于https://puppet.com/
dot配置管理器对比
Comparison Guide # 列举了其他几款管理器:
- dotbot
- rcm
- homesick
- yadm
这几款貌似都不支持Windows。
chezmoi上手
使用scoop安装:
scoop bucket add twpayne https://github.com/twpayne/scoop-bucket && scoop install chezmoi
chezmoi init
会在~/.local/share/chezmoi
创建一个git仓库。
最新版的git会提示把主分支改为master以外的名字,比如main或者trunk,可以使用下面的配置
git config --global init.defaultBranch <name>
git branch -m <name>
使用chezmoi edit ~/.bashrc
会使用默认编辑器来编辑 ~/.local/share/chezmoi/dot_bashrc
。使用chezmoi -v apply
来将改动同步到~/.bashrc
。
chezmoi cd
可以开启一个新的shell,进到~/.local/share/chezmoi
。此处可以执行git命令来将配置存入git仓库。
也就是说chezmoi将git配置管理交给了用户,然后可以将git配置同步到github, sr.ht等git服务提供商。
如何将配置搬到其他机子上呢:
chezmoi init https://github.com/username/dotfiles.git
chezmoi apply
或者如果仓库命名方式就是dotfiles,那么可以:
chezmoi init --apply username
Templating Guide
模板文件要么以.tmpl结尾,要么在.chezmoitemplates目录。
使用chezmoi data
来列举模板数据,数据来自:
- .chezmoi
.chezmoidata.<format>
,可以是json, toml或者yaml- 配置文件中的data片区
将配置文件添加为模板:chezmoi add --template ~/.zshrc
同上,并替换其中的模板数据:chezmoi add --autotemplate ~/.zshrc
将既有配置转化为模板:chezmoi chattr +template ~/.zshrc
手动创建模板文件:
chezmoi cd
$EDITOR dot_zshrc.tmpl
.chezmoitemplates中的模板必须手动创建:
chezmoi cd
mkdir -p .chezmoitemplates
cd .chezmoitemplates
$EDITOR mytemplate
对模板进行测试:chezmoi execute-template "{{ .chezmoi.hostname }}"
,其中"{{ .chezmoi.hostname }}"
代表的是模板内容。
也可以这么来:chezmoi execute-template < dot_zshrc.tmpl
。
剩余略
Manage machine-to-machine differences
使用模板,在~/.config/chezmoi/chezmoi.toml
中创建:
[data]
email = "me@home.org"
- 保存私有数据的话,需要确保chezmoi.toml的访问权限为0600
- 除了toml以外,还可以使用json或者yaml,只要https://github.com/spf13/viper支持即可
- 变量名以字母开头,可以包含数字和字母
使用chezmoi add --autotemplate ~/.gitconfig
可以自动对添加的.gitconfig中的配置自动进行模板变量检查。
chezmoi re-add
可以重新添加某配置,只是不支持模板。也可以通过chezmoi merge
来化解冲突。
使用chezmoi data
可以列举出所有支持的模板变量。
Use KeePassXC
需要在配置文件~/.config/chezmoi/chezmoi.toml
中添加类似如下配置:
[keepassxc]
database = "/home/user/Passwords.kdbx"
目前Chezmoi只能明文输入密码,参考ReadPassword
如何在Go中读取密码,参考getpasswd functionality in Go?
Comparison Guide
- dotbot
- rcm
- homesick
- yadm
- gnu stow
Reference Manual
一些概念:
- source state,可用于本机的配置文件
- source directory,chezmoi用于保存配置的git仓库:
~/.local/share/chezmoi
- target state,已用于本机的配置文件
- destination directory,默认为home目录
- target,目标配置文件,目录或者符号链接
- destination state,默认为home目录里面的所有配置文件
- config file,用于chezmoi自身的配置文件,默认为
~/.config/chezmoi/chezmoi.toml
。
其他
小贴士
- 使用
doskey cm=chezmoi $*
可以在cmd.exe里面起一个短名cm用来替代chezmoi,参考Aliases in Windows command prompt - 使用
chezmoi unmanaged
可以列举所有不归属chezmoi管理的文件。 - 可以通过source state中的
.chezmoiignore
来显示阻止某些文件添加到chezmoi管理。 - 可以通过
chezmoi doctor
来检查当前主机上chezmoi的配置状况
(未完待续)