- chezmoi
- GitHub Star 5900
- Go
- 1Password や Keychain などに保存した機密情報を利用できる
- dotbot
- GitHub Star 5000
- Python
- yadm
- GitHub Star 3100
- Python
- GnuPG, OpenSSL, transcrypt, git-crypt を使った機密情報の暗号化機能
- rcm
- GitHub Star 2700
- Perl
- fresh
- GitHub Star 1100
- Ruby
Installation
Setup
~/.local/share/chezmoi をソースディレクトリとして使うので、以下のコマンドで初期化すると ~/.local/share/chezmoi が作られる。
このディレクトリを Git のような VCS で管理していく。
$ chezmoi init
$ chezmoi cd
$ git remote add origin https://github.com/<username>/<reponame>.git
Usage
add で追加すると、chezmoi の管理対象になる。
例えば以下のコマンドを実行すると ~/.vimrc が管理対象になり、 ~/.local/share/chezmoi/dot_vimrc ができる。
$ chezmoi add ~/.vimrc
managed で確認できる。
$ chezmoi managed
.vimrc
chezmoi cd でソースディレクトリに移動して git コマンドを直接叩いてもよいが、 chezmoi git でも操作できる。
$ chezmoi git -- add -A
$ chezmoi git -- commit -m 'add .vimrc'
$ chezmoi git -- push origin main
$ chezmoi init https://github.com/<username>/<reponame>.git
update コマンドを使う。内部的には git pull して apply しているっぽい。
$ chezmoi update
Apply External Repositories
tpm や Oh My Zsh のようなプロダクトを使う場合に有用。使い方は ~/.local/share/chezmoi/.chezmoiexternal.toml に設定を書くだけ。
[".tmux/plugins/tpm"]
type = "archive"
url = "https://github.com/tmux-plugins/tpm/archive/master.tar.gz"
exact = true
stripComponents = 1
refreshPeriod = "168h"
Template
text/template を使ったテンプレートの機能が用意されている。
例として以下のような JSON を管理することを考える。
{
"email": "account1@example.com"
}
account1@example.com を data として ~/.config/chezmoi/chezmoi.toml に定義する。
[data]
email = "account1@example.com"
--autotemplate を使って add すると、テンプレートファイル dot_example.json.tmpl として追加することができる。
$ chezmoi add --autotemplate ~/.example.json
{
"email": "{{ .email }}"
}
email を設定すれば異なる値を利用することができる。
[data]
email = "account2@example.com"
{
"email": "account2@example.com"
}
Credential
$ eval $(op signin <subdomain>.1password.com <email>)
op get item <uuid> | jq .
$ op list items --vault <vault-name> | jq '.[] | select(.overview.title == "<item-name>")'
op get の結果のオブジェクトが渡ってくるので、必要なフィールドを指定して利用する。
export GITHUB_TOKEN={{ (onepassword "<uuid>").details.password | quote }}