Skip to content

Instantly share code, notes, and snippets.

@catatsuy
Last active December 21, 2015 14:39
Show Gist options
  • Save catatsuy/6320954 to your computer and use it in GitHub Desktop.
Save catatsuy/6320954 to your computer and use it in GitHub Desktop.

.zshrc を Github で管理したい!!

自己紹介

  • catatsuy(KANEKO Tatsuya)
  • 東工大
  • はてなインターン 2012
  • ピクシブアルバイト

注:特にネタ要素は仕込んでません

.zshrc を共有できれば…

  • パソコンを初期化しても慣れた環境にすぐ復旧できる
  • 複数台のパソコンやサーバー間で設定を共有できる

共有方法

  • Dropbox
    • バージョン管理が貧弱
    • サーバーなど入れられない環境もある
  • Github
    • バージョン管理ができる
    • 公開リポジトリで作ればサーバーなどにも楽々ダウンロード!
    • 頻繁に更新すれば Github の Activty が貯まる!!

共有するには

  • ファイルを 1 つのディレクトリにまとめる
  • Linux/Mac 環境でどちらでも使えるようにしたい
  • サーバーなど様々な用途にも対応できるようにしたい

zshenv

~/.zshenv

export ZDOTDIR=$HOME/.zsh

とすれば ~/.zsh/.zshrc を読み込みに行くので ~/.zsh/ ディレクトリに設定をまとめて Git 管理にする

zsh で OS 依存のコードを分離する

case ${OSTYPE} in
  darwin*)
    # ここに Mac 向けの設定
    ;;
  linux*)
    # ここに Linux 向けの設定
    ;;
esac

とやるのも良いが少し煩雑

OS 依存のコードをファイルに分割する

[ -f $ZDOTDIR/.zshrc_`uname` ] && . $ZDOTDIR/.zshrc_`uname`

として .zshrc_Darwin, .zshrc_Linux に依存のコードを書くと OS 依存のコードのファイルに分割できる

  • ファイルがなければ右式は評価されないのでエラーは出ない
  • FreeBSD など全部用意しなくても大丈夫

ローカルファイル

PC 毎に依存する適当なファイルが存在する可能性が高い

.zshrc_local.gitignore に追加して

[ -f $ZDOTDIR/.zshrc_local ] && . $ZDOTDIR/.zshrc_local

.zshrc に書くと端末依存のコードを書ける

  • .zshrc_local が存在しなくてもエラーにはならない
  • .zshrc_local.tmp とかをコミットしておき,手元で mv する

注:.zshrc_localgit でコミットしないこと

rbenv など

if [ -d ${HOME}/.rbenv ]; then
  export PATH=$HOME/.rbenv/bin:$PATH
  eval "$(rbenv init -)"
  . ~/.rbenv/completions/rbenv.zsh
fi
  • 色んな環境間で共有するためにディレクトリの有無で分岐する
  • ~/.rbenv ディレクトリが存在しない限り動かない

coreutils

  • Mac の ls は BSD 由来で GNU のものとはオプションが異なる
  • Linux なら入っているコマンドが Mac ではなかったりする
  • coreutils をインストールすれば解消する
    • デフォルトのを上書きしないようにプレフィックスに g が付く(lsgls など)
    • プレフィックスを除くには PATH を通す必要がある
    • brew info coreutils をよく読む

coreutils 設定例 .zshrc_Darwin

if [ -d /usr/local/opt/coreutils/libexec/gnubin ]; then
  export PATH=/usr/local/opt/coreutils/libexec/gnubin:$PATH
  export MANPATH=/usr/local/opt/coreutils/libexec/gnuman:$MANPATH
  alias ls='ls --color=auto'
else
  export LSCOLORS=gxfxcxdxbxegedabagacad
  alias ls='ls -G'
fi
  • coreutils が入っていることを前提にしない
  • coreutils が入っていなかったら ls に簡単に色だけつける

色も共有したい

  • LS_COLORS を設定する(LSCOLORS とは別物)
  • .zshrc に書くと煩雑になるので ~/.dircolors として外部ファイルで定義する
  • seebi/dircolors-solarized が個人的おすすめ

dircolors

  • GNU 由来なので Mac は coreutils 必須
  • ついでにディレクトリを補完するときにも適用する
## dircolors
if [[ -f ~/.dircolors && -x `which dircolors` ]]; then
  eval `dircolors ~/.dircolors`
  zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
fi

git submodule を活用する

Github で

この辺りおすすめです

エディタの設定

Emacs の設定例

;; indent
(add-hook 'sh-mode-hook '(lambda () (interactive)
        (setq sh-basic-offset 2 sh-indentation 2)))

;; .zshrc* を shell-script-mode に
(add-to-list 'auto-mode-alist
        '("\\.zshrc" . shell-script-mode))

続きは Github で!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment