📕 subnode [[@flancian/chezmoi]] in 📚 node [[chezmoi]]

Example from my initial upload:

sh -c "`curl -fsLS chezmoi.io/get`"
chezmoi add ~/.bashrc
chezmoi add ~/.vimrc
chezmoi add ~/.tmux.conf
chezmoi add ~/.gnupg
chezmoi cd
git add .
git commit -m 'Initial commit from paramita."

After creating an empty repo in any host (I used [[gitlab]]), you can upload the local repo you cd'd into above as per standard [[git]] procedure:

git remote add origin git@gitlab.com:flancian/flancian.git
git branch -M main
git push -u origin main 

Then for syncing files into a new machine, you install chezmoi and then pass the repo as argument to chezmoi init:

sh -c "`curl -fsLS chezmoi.io/get`"
chezmoi init https://gitlab.com/flancian/flancian
chezmoi apply -v

To upload changes to files already tracked by chezmoi from any host:

chezmoi re-add
chezmoi cd
git commit -a -m "chezmoi from $HOSTNAME"
git push

[[Chezmoi]] supports [[templates]] to special-case files depending on the host they're being installed in.

To apply a template to an already tracked file, e.g. .config/sway/config (in my case):

chezmoi chattr +template .config/sway/config
chezmoi edit .config/sway/config

Then use template syntax (see https://www.chezmoi.io/user-guide/templating/#simple-logic for the gist of it if you're interested in per-hostname cases, which is what I was after) and then use chezmoi apply to "run" the template and produce the file in any host.

Note that after that you need to edit the file with chezmoi edit every time essentially, unless you intend to get conflicts later. It seems like a fair tradeoff.

An example from my sway config which shows the syntax for if .. else if .. else:

{{ if eq .chezmoi.hostname "nostromo" }}
set $focused #b43757
{{ else if eq .chezmoi.hostname "paramita" }}
set $focused #472dbc
{{ else }}
set $focused #b46b37
{{ end }}
  • #push [[chezmoi]]
    • loving it, used it again a bunch today
📖 stoas
⥱ context