kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

rcmを使ったdotfilesの管理

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を手動管理している場合は、以下の手順になると思います。

  1. ファイルをリネームします(先頭のドットを消します。)。
  2. dotfiles/rcrcを作成します。
  3. 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の略でそのファイルにタグをつけて管理できます。

参考

https://qiita.com/manicmaniac/items/b50e1fc1a05202542fb0