rcmとは
https://github.com/thoughtbot/rcm
dotfilesの管理ツールです。
rcm自体はパッケージ名でインストールすると rcup
,rcdn
,mkrc
,lsrc
の4つのコマンドが使えます。
$HOME
へシンボリックリンクを貼ったり、解除したりがコマンドで簡単にできます。
.zshrc.local
やホストごとの管理などもできるので、 自前でinstall.shなどを作るより楽かと思います。
インストール
mac
$ brew install rcm
ubuntu
$ sudo apt install rcm
基本的な使い方
前提としてrcmはzsh専用です。
dotfiles内の構成
例えば、以下のような構成になります。
dotfiles ├── .git ├── .gitignore //このgitignoreはdotfilesリポジトリのものです。 ├── README.md ├── gitconfig ├── gitignore //このgitignoreは$HOME直下に.gitignoreとして置きたいものです。 ├── rcrc ├── tmux.conf └── zshrc
ディレクトリのトップレベルに、先頭のドットなしでファイルを作ります。
gitconfig
, gitignore
, tmux.conf
, zshrc
が管理したいrcファイルです。
先頭にドットがあると、rcmでは無視されます。
rcrc
はrcmの設定ファイルになります。
rcrcの中身
EXCLUDES="README.md" DOTFILES_DIRS="$HOME/dotfiles"
EXCLUDES
rcmで無視したいファイル指定します。 複数ある場合はスペース区切りで指定します。
DOTFILES_DIRS
dotfilesのディレクトリを指定します。複数ある場合はスペース区切りで指定します。
rcup コマンド
dotfiles内にあるファイルを$HOME配下に展開するコマンドです。
初回は環境変数のRCRCを指定する必要があるので下記を実行します。
$ env RCRC=$HOME/dotfiles/rcrc rcup
実行すると $HOME/.rcrc
が $HOME/dotfiles/rcrc
への
シンボリックリンクとして作成されるので次からは rcup
だけで実行できます。
基本的にはよくあるinstall.shのようなものです。
rcdn コマンド
rcupの逆です。 rc down
の略ですかね。
実行すると、rcupで作成されたシンボリックリンクが削除されます。
dotfiles内のファイルは削除されません。
mkrc コマンド
まだdotfileで管理していないファイルをdotfilesで管理するようにします。
具体的には、対象のファイルをdotfiles内にmvし、
元の場所にはdotfilesへのシンボリックリンクを貼ります。
$ mkrc ~/.zshenv
lsrc コマンド
現在、rcmで管理されているファイルの一覧が表示されます。 どのdotfilesからどこへシンボリックリンクになるかの一覧です。
手動管理からの移行
すでにdotfilesを手動管理している場合は、以下の手順になると思います。
- ファイルをリネームします(先頭のドットを消します。)。
- dotfiles/rcrcを作成します。
env RCRC=$HOME/dotfiles/rcrc rcup
を実行します。(すでにあるシンボリックリンクは削除しなくてもrcupで上書きされます。)
高度な使い方
ローカル用ファイルの管理
.zshrc.local
などローカル用のファイルを作成している場合、これもrcmで管理できます。
例えば、$HOME/dotfiles-local
を作成し管理したいファイルをおいておきます。
dotfiles-local ├── gitconfig.local └── zshrc.local
dotfiles(dotfiles-localではない)のrcrcのDOTFILES_DIRSにdotfiles-localを追加します。
DOTFILES_DIRS="$HOME/dotfiles $HOME/dotfiles-local"
この状態で、 rcup
コマンドを実行すると、 $HOME/.gitconfig.local
などが作成されます。
mkrcで dotfiles-local
の方に追加したい場合は、 -d
オプションを追加します。
$ mkrc -d ~/dotfiles-local/ ~/.zshrc.local
ホストごとの管理
一つのdotfilesでmac用とlinux用などそれぞれのファイルを管理することもあるかと思います。
その場合は、-B
オプションを使用することで管理するファイルを分けることができます。
例えば、 linuxでしか使用しないファイル $HOME/.colorrc
があったとします。
これをrcmで管理する場合
$ mkrc -B linux ~/.colorrc
とすると、dotfilesにhost-linxというディレクトリが作成されそこにcolorrcファイルが作成されます。
dotfiles ├── README.md ├── host-linux │ └── colorrc ├── rcrc └── zshrc
このファイルは、 rcupの際に -B linux
を指定しない限り作成されません。
なので、linux上では rcup -B linux
とし、macでは、単に rcup
とするような運用ができます。
同様のオプションに -o
と -t
があります。
-o
は、引数を取らずにhostnameの値でディレクトリが作成されます。
-t
は、tagの略でそのファイルにタグをつけて管理できます。