homeshick
homesickとhomeshickの違いでも述べたように、homeshickはシェルスクリプトで書かれたdotfiles管理のためのアレです。
実行環境
- Linux Mint 16 Cinnamon 64bit
- Linux Kernel 3.11.0-12-generic
- GNOME 端末 3.6.2
要は普通のシェルなら動きます。cshもtcshもfishもzshも一緒です。
とりあえずbash(zsh)の場合で話を進めます。
インストール
~ $ git clone git://github.com/andsens/homeshick.git
~ $ printf '\nsource "$HOME/.homesick/repos/homeshick/homeshick.sh"' >> $HOME/.bashrc
~ $ printf '\nsource "$HOME/.homesick/repos/homeshick/completions/homeshick-completion.bash"' >> $HOME/.bashrc
~ $ source .bashrc
1行目でhomeshickの本体をcloneし、2行目でhomeshickへのPATHを通し、3行目でtab補完のための設定をし、4行目で通したPATHの反映をします。3行目のはbashとzshで変わってきます。
~ $ printf '\nfpath=($HOME/.homesick/repos/homeshick/completions $fpath)' >> $HOME/.zshrc
zshならこう書きます。
ちなみに、ディレクトリ名が.homesick
になっているのは、前述のhomesickとの互換性を意識してのことだろうと思われます。
dotfilesの管理
~ $ homeshick generate my_shick_castle
~ $ touch .vimrc
~ $ touch .gvimrc
homeshickでは(homesickでもそうですが)dotfilesの管理はcastle
という単位で行われます。まずcastleをgenerate
コマンドで作成します。補完が効くのでgene
くらいでtabを押せばだいぶ楽になると思います。
castleができたら、今までに書き溜めてきたdotfilesを早速管理します。(上ではまさに今作ってますけど)
~ $ homeshick track my_shick_castle .vimrc .gvimrc
track
コマンドに続けてcastleの名前、追加したいdotfilesを指定することで、dotfilesの本体はcastleの中に入り、ホームディレクトリにはそのシンボリックリンクが張られます。
~ $ homeshick cd my_shick_castle
~/.homesick/repos/my_shick_castle $ ls -la
合計 16
drwxr-xr-x 4 unasuke unasuke 4096 3月 28 23:42 .
drwxr-xr-x 4 unasuke unasuke 4096 3月 28 23:42 ..
drwxr-xr-x 7 unasuke unasuke 4096 3月 28 23:53 .git
drwxr-xr-x 2 unasuke unasuke 4096 3月 28 23:53 home
では、どのように管理されているかを見てみます。(homeshickの)cd
コマンドに続けてcastleの名前を入力すると、実際に管理されているcastleディレクトリの中に移動します。ls
すればわかるように、gitで管理されています。
あとは、GitHubやbitbucketで作った空のリポジトリにpushしてしまいましょう。
dotfilesの取得
新しいマシンに今までのdotfilesを移したり、よく出来ているdotfilesをGitHubから持ってきたりしたいときには、clone
コマンドを使います。
~ $ homeshick clone robbyrussell/oh-my-zsh
この場合、oh-my-zsh
というcastleが新たに作成されます。既存のcastleがある場合、競合を避けてか、シンボリックリンクは張られません。外部のリポジトリも含めた管理をするなら、submoduleとして導入したほうがいいでしょう。
また、 ディレクトリに対してはシンボリックリンクを張ってくれない ので、自分でシンボリックリンクを作成する必要があります。
~ $ ln -s ~/.homesick/repos/my_shick_castle/home/.vim .vim
submoduleやディレクトリの管理
submoduleとして導入する場合や、ディレクトリの管理を行いたい場合、castleディレクトリ内のhomeディレクトリに実体を移し、手動でシンボリックリンクを張る必要があります。
これは、 もともとホームディレクトリにあった実体をcastleディレクトリに移しシンボリックリンクを張る ため、はじめからホームディレクトリに存在しないものについては何もしてくれないっぽいからです。
「track
できないの」と思うかもしれませんが、track
コマンドではディレクトリを指定することができないため、例えばShougo/neobundle.vimを新たにtrack
したいと思っても、ファイルのパスをすべて列挙して指定しなければならず、不便です。
まとめ
-
homeshick generate castle_name
で管理する単位を作る -
homeshick track castle_name file_name
で管理開始 -
homeshick clone username/reponame
で持ってくる -
ディレクトリへのシンボリックリンクは手動
参考
andsens/homeshick
Homeshickでdotfilesを管理することにした
Git Submodules: コアコンセプト、ワークフロー、コツ