0. Background
When changing computers,
you need to migrate some configuration files from the old computer to the new one,
such as .zshrc, .vimrc, .gitconfig, and so on.
Some files may not necessarily be located in the home directory,
such as .ssh/config, .config/.starship.yaml.
It's a bit of a hassle to migrate these files manually.
Therefore, you need a tool to manage these configuration files.
1. Requirements
- Support multiple platforms, such as macOS, Linux, Windows.
- Support version management, such as git.
- Support templates.
I did a little research and found that there are several tools that can manage dotfiles:
chezmoi meets my requirements,
and it's written in Golang without any dependencies, so I decided to use chezmoi.
2. Install
sh -c "$(curl -fsLS get.chezmoi.io)"
You could find more installation methods here
3. Usage
3.1 Initialize
After initialization, a ~/.local/share/chezmoi directory (local repository) will be generated in the home directory to store chezmoi configuration files.
You can enter the directory with the chezmoi cd command.
3.2 Add files
3.3 Update files
After updating the file, remember to commit to the remote repository. You can refer to the previous section.
3.4 Fetch files from remote repository
Fetch files from remote repository and apply them.
chezmoi update
It's equivalent to
chezmoi git pull origin main
chezmoi apply
3.5 Extend usage
3.5.1 Templating
chezmoi supports templates,which can generate different configuration files for different hosts and so on.
For example, I want to configure different account names for different computers, I can do this:
- Create
~/.account.jsonfile, the content is as follows:
{
"name": "thewang"
}
- Configure the
datafield in~/.config/chezmoi/chezmoi.toml.
[data]
name = "thewang"
- Add file with
--autotemplateflag.
chezmoi add --autotemplate ~/.account.json
{
"name": "{{ .name }}"
}
