## title: Manage dotfiles with chezmoi
## date: "2024-03-10"
To give a bit of context, I had automated the deployment of
the configuration of my Linux environment with an Ansible
playbook (repository). This setup is compatible with almost
all Linux distributions (probably UNIX too) but I was
looking for something lighter and simpler.
(HTM) repository
I found by chance chezmoi which is able to manage dotfiles
as well as some other configurations which could be linked
to these dotfiles. The tool allows you to update files on
several different machines, it's very complete, simple and
effective.
(HTM) chezmoi
Some people pair it with Ansible but I prefer to use the
solution in a very simple way, with the tool's native
features (scripting and templating).
Something interesting about chezmoi is that it supports file
encryption with modern tools like age. This is very useful
for certain sensitive data such as SSH private keys. So you
can add configuration so that the tool can encrypt and
decrypt.
(HTM) chezmoi
(HTM) age
My configuration template looks like this (below) in the
.chezmoi.yaml.tmpl file.
{% raw %}
{{ $has_age := false }}
{{ $sudo := "sudo" }}
{{ $font := "Comic Code" }}
{{ if stdinIsATTY }}
{{ $has_age = promptBool "do you have age " }}
{{- $sudo_choices := list "sudo" "doas" -}}
{{- $sudo = promptChoiceOnce . "choice" "choose"
$sudo_choices -}}
{{ $font = promptString "font name " }}
{{ end }}
{{ if $has_age }}
encryption: "age"
age:
identity: "/home/nagi/.config/age/key.txt"
recipient:
"age14m06fd3svs9neg2w97ccw3c8470hckl95qxr6jw8fgm4ex65352q6tun06"
{{ end }}
data:
sudo: {{ $sudo }}
font: {{ $font }}
{% endraw %}
For the moment the repository is only compatible with Fedora
and Arch Linux, however it is easy to implement other
distributions.
## Apply from a different machine
To apply my configuration from another machine, simply run
the following commands.
chezmoi init https://github.com/theobori/dotfiles.git
chezmoi apply -v
## Links
https://github.com/theobori/dotfiles
(HTM) https://github.com/theobori/dotfiles