我们经常需要对软件和系统进行各种个性化配置,这些配置文件通常被称为"dotfiles",因为它们的文件名以点(.)开头,例如.bashrc、.vimrc等。这些文件通常遵循 XDG 约束规范
默认被存放在 $HOME/.config
下
:::info
什么是 XDG 约束规范
参考 arch wiki XDG_Base_Directory
XDG Base Directory Specification 约束了不同类型的文件的存放位置和命名规则,主要包括配置文件,缓存文件,数据文件等。它的提出能极大地改善上述配置文件太凌乱的情况。
XDG 主要定义了三个很必须的路径,它很好地告诉了你,哪些是配置文件应该保留,哪些是缓存当空间不够时可以删除,软件依赖了哪些数据文件。
环境变量 | 说明 | 默认值 |
---|---|---|
XDG_CONFIG_HOME | 软件的配置文件存放位置 | $HOME/.config |
XDG_CACHE_HOME | 软件的缓存应该存放的位置 | $HOME/.cache |
XDG_DATA_HOME | 软件的依赖数据存放的位置 | $HOME/.local/share |
传统的做法是在特定目录中保留原始配置文件,并在其原本对应的位置创建软链接。然而,这种方法存在一些缺点,例如需要手动创建目录结构,手动建立版本管理,而且无法轻松地处理隐私数据的加密和不同平台下配置文件的差异。
为了解决这些问题,最终我决定转而使用 Chezmoi 来管理我的 dotfiles。
ps: home-manager 学习成本较高,其他的管理器参考这个文档: dotfiles 管理器对比,
安装地址 https://www.chezmoi.io/install/
-
无远程仓库
chezmoi init
会在~/.local/share/chezmoi
创建一个本地git仓库。
chezmoi cd
可以直接进入到该目录后续可以为其添加远程仓库
git remote add origin git@github.com:{username}/{remote-repository}.git git checkout {branch}
-
有远程仓库
当然如果你已经有远程仓库则初始化时候可以直接指定仓库地址
chezmoi init git@github.com:{username}/{remote-repository}.git
chezmoi add {file} # 添加文件
通过git进行管理
chezmoi cd
git add {file}
git commit -m 'add {file}'
git push origin main
# 或 chezmoi 后面直接接 git 命令
chezmoi git add {file}
chezmoi git commit -- -m 'add {file}'
chezmoi git push origin main
# chezmoi git add . && chezmoi git commit -- -m "update" && chezmoi git push
修改chezmoi目录的文件。 比如 chezmoi/dot_vimrc"
chezmoi edit {file}
应用修改
chezmoi apply
等价于
chezmoi edit ~/.bashrc --apply
$ chezmoi managed # 列出所管理的内容路径
$ chezmoi source pull -- --rebase && chezmoi diff
远程仓库有更新了,需要拉取到本地。
chezmoi update
等价于
chezmoi git pull origin main
chezmoi apply
如何将配置搬到其他机器:
chezmoi init git@github.com:{username}/{remote-repository}.git
chezmoi apply
or
chezmoi init --apply git@github.com:{username}/{remote-repository}.git
如果仓库命名方式就是dotfiles,那么可以:
chezmoi init --apply username
chezmoi 支持模版,可以为不同的 host 生成不同的配置文件。
模板文件以 .tmpl 结尾,或者放在 .chezmoitemplates 目录。
使用 chezmoi data
可参考模板可用变量
以 .gitconfig 为例:
[user]
name = example
email = example@example.com
为了在不同的设备电脑上使用不同的 git 账户这一需求,要将其中的用户信息数据与配置文件进行绑定,而原文件将作为 .tmpl 为后缀的模板文件保存。
# ~/.local/share/chezmoi/dot_gitconfig.tmpl
[user]
name = "{{ .name }}"
email = "{{ .email }}"
chezmoi 提供了自动生成模板的功能,但有时需要手动进一步修改
$ chezmoi add --autotemplate ~/.gitconfig
对模板进行测试:chezmoi execute-template "{{ .chezmoi.hostname }}"
,其中"{{ .chezmoi.hostname }}"
代表的是模板内容。
也可以这样写:chezmoi execute-template < dot_zshrc.tmpl
。