📚 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 }}

Manage your [[dotfiles]] across multiple diverse machines, securely.

If your system is written in a scripting language like Python, Perl, or Ruby, then you also need to install a compatible version of that language's runtime before you can use your system.

chezmoi is distributed as a single stand-alone statically-linked binary with no dependencies that you can simply copy onto your machine and run. chezmoi provides one-line installs, pre-built binaries, packages for Linux and BSD distributions, Homebrew formulae, Scoop and Chocolatey support on Windows, and a initial config file generation mechanism to make installing your dotfiles on a new machine as painless as possible.

  • #push [[chezmoi]]
    • loving it, used it again a bunch today
📖 stoas
⥱ context