dotfileの管理をGithubに置いて一元化したりどこでもセットアップできるようにする

これまではバックアップ的にDropboxに置いていたものの、
環境を新しく作る際に何かと手間が掛かっていたので、
Gitと組み合わせてコマンド一つで設定できるようにした。

dotfileとは?

.bashrcや.vimrc、.tmux.confなど「.(ドット)」で始まるファイルのこと。
LinuxUnix系OSの設定ファイル名はこの形式を取ることが多い。

0. 置き場所を決める

Githubに置くのもよし、自分でGitサーバを用意するもよし。
.ssh/config等、外部に公開したくないファイルを含める場合はPrivate Repositoryが作れる有料版に申し込むか、Bitbucketcodebreak;等の利用も検討すること。

1. 下準備 〜 dotfileの置き場所をローカルに作り、dotfileを移動させる

$ cd
$ mkdir -p ~/dotfiles
$ mv .vimrc ~/dotfiles/
$ mv .gvimrc ~/dotfiles/
$ mv .vim/ ~/dotfiles/
$ mv .bashrc ~/dotfiles/
$ mv .ssh ~/dotfiles/.ssh # GithubなどでPublicなとこに置く際は要注意
$ mv .gitconfig ~/dotfiles
$ mv .gitconfig_global ~/dotfiles

他にも必要なファイルがあれば随時移動する。

※注意

上記例では .sshも含めているが、configや秘密鍵などもアップする際には充分注意すること

2. シンボリックリンクを張るシェルスクリプトを用意する

$ vim dotfiles/setup.sh

シェルスクリプトの中身はこんな感じ。

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

# スクリプトがあるディレクトリの絶対パス
dir=$(cd $(dirname $0);pwd)

# リンクを作成しないファイル名のリスト
ignorefiles=("." ".." ".git" "${0##*/}")

for dotfile in .?*; do
  is_ignored=0
  for ignorefile in ${ignorefiles[@]}; do
    if [ $dotfile = $ignorefile ]; then
      is_ignored=1
      break
    fi
  done

  if [ $is_ignored -ne 1 ]; then
    ln -s -v -f "$dir/$dotfile" $HOME
  fi
done

3. git pushする

$ cd ~/dotfiles
$ git init
$ git add .
$ git commit -m “first commit”
$ git remote add origin git@github.com:madai0517/dotfiles.git
$ git push -u origin master

これで環境は完成。

4. 利用方法

新しく環境を作るサーバで以下のコマンドを実行すればOK。

$ git clone --recursive git://github.com/madai0517/dotfiles.git
$ cd dotfiles
$ chmod +x setup.sh
$ ./setup.sh
$ source ~/.bashrc

自分のホームディレクトリにシンボリックリンクが作成されているはず。 めでたしめでたし。