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