.zshrc を様々な Mac や Linux マシンなどで使い回したいという人は多いと思います
しかし github で共有するには Mac だけでやりたい設定やそのマシンだけでやりたい設定などをうまく共有できるようにしなければなりません
その辺りをどう解決するのかを真剣に考えた結果を共有します
zshenv
~/.zshenv
に
export ZDOTDIR=$HOME/.zsh
とすれば ~/.zsh/.zshrc
を読み込みに行くので ~/.zsh/
ディレクトリに設定をまとめて Git 管理にできます
zsh で OS 依存のコードを分離する
case ${OSTYPE} in
darwin*)
# ここに Mac 向けの設定
;;
linux*)
# ここに Linux 向けの設定
;;
esac
とやるのも良いですが,少し煩雑なので以下のようにファイルを分割するのがお勧めです
[ -f $ZDOTDIR/.zshrc_`uname` ] && . $ZDOTDIR/.zshrc_`uname`
とすると .zshrc_Darwin
, .zshrc_Linux
に OS 依存のコードを書くことができます
ファイルがなければ右式は評価されないのでエラーは出ません
そのため FreeBSD など全部用意しなくても大丈夫です
マシンごとの設定をするローカルファイルも同様に設定できます
.zshrc_local
を .gitignore
に追加して
[ -f $ZDOTDIR/.zshrc_local ] && . $ZDOTDIR/.zshrc_local
と .zshrc
の一番最後に書くとマシン依存のコードを .zshrc_local
に書けます
.zshrc_local
は git 管理しないので代わりに .zshrc_local.tmp
とかをコミットしておいて手元で cp
するのが良いでしょう
主に PATH の設定はマシン毎によって異なるのでここでやるのがおすすめです
rbenv など
if [ -d ${HOME}/.rbenv ]; then
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
. ~/.rbenv/completions/rbenv.zsh
fi
最近では LL をインストールする場合は rbenv のようなものを使うのが一般的になりました
rbenv を一般的な構成でインストールすると ~/.rbenv
ディレクトリが存在するはずなのでそのディレクトリが存在したら rbenv を起動するようにすると便利です
~/.rbenv
ディレクトリが存在しない限り動かないようにすることで rbenv が入ってない環境でエラーが起こることを防ぎます
coreutils
Mac 限定になりますが,Mac は例えば ls
などが BSD 由来で Linux で一般的な GNU のものとはオプションが異なります
また Linux なら入っているコマンドが Mac ではなかったりします
普段開発は Linux で行う人が多いと思うのでこの Mac の微妙な違いにイライラを感じたことがある人は多いと思います
それらの多くは Homebrew で coreutils をインストールすることで解消できます
Homebrew は私の周りでも使い方を把握していない人が多いので,私の書いたものですが Zsh - Macで開発したい人のための基本的なことまとめ - Qiita [キータ] の Homebrew の解説を読むことをおすすめします
それで brew info coreutils
を読むと書いてありますが,デフォルトのコマンドを上書きしないように ls
は gls
のようにインストールされるコマンドに対してプレフィックスとして g
が付きます
このプレフィックスを除くには PATH
を通す必要があります
その設定例です
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
rbenv などと同じように coreutils が入っていることを前提にしないようにしましょう
この例では coreutils が入っていなかったら ls
に簡単に色だけつけています
色も共有する
端末の色を設定したい場合は LS_COLORS
を設定します(BSD 由来の LSCOLORS
とは別物)
.zshrc
にそのまま書くとかなり煩雑になるので ~/.dircolors
として外部ファイルに定義するのがおすすめです
seebi/dircolors-solarized が個人的におすすめです
これを読み込むには dircolors
が必要です
このコマンドは GNU 由来なので Mac は coreutils 必須です
そのためここでも coreutils が入っていることを前提にしないようにします
## dircolors
if [[ -f ~/.dircolors && -x `which dircolors` ]]; then
eval `dircolors ~/.dircolors`
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
fi
この例ではついでにディレクトリを補完するときにも色の設定を適用するようにしています
git submodule を活用する
Github で
この辺りおすすめなので git submodule で入れておきましょう
読み込み方などはそれぞれの README を読んで rbenv などと同じ要領で読み込んでください
【おまけ】エディタの設定
ここはおまけです
Google の Shell Style Guide ではインデントがスペース 2 つなのでインデントは 2 つにするのがおすすめです(というか Google は 2 インデントが好き)
また今回 .zshrc*
のようなファイルをたくさん作りましたが,これだとエディタの shell-script のシンタックスハイライトが効かないかもしれません
私は Emacs 派なので 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 で!!
私が実際に使っている .zshrc です
参考になれば!!