bauer's diary

凡人の凡人による凡人のための備忘録

dotfiles整理 その1:zshの構成を見なおそう

はじめに

最近ちょっと時間ができたので、随分放置してきたdotfilesを整理をすることにしました。

まずはzsh
これまでは.zshrcに全て記述していたので、前々から役割毎に分けたいと思っていました。
大まかな方針は下記の通りです。

  1. ZDOTDIR を指定して、"~/.zsh" の下にzsh関連の設定ファイルを配置したい
  2. .zshenv、.zprofile に移譲したい

構成はこんな感じを想定しています。

/Users/kitakitabauer/.
├── .zshenv -> /Users/kitakitabauer/dotfiles/.zshenv
├── .zsh
│   ├──.zprofile -> /Users/kitakitabauer/dotfiles/.zsh/.zprofile
│   ├──.zshenv -> /Users/kitakitabauer/dotfiles/.zsh/.zshenv
│   └──.zshrc -> /Users/kitakitabauer/dotfiles/.zsh/.zshrc
└── …


環境変数 ZDOTDIR の設定

ホームディレクトリがzsh関連のファイルで埋まるのが嫌なので、ZDOTDIR を指定して、zsh関連の設定ファイルを別フォルダにて管理します。

ZDOTDIR は$HOME/.zshenv に記述します。

export ZDOTDIR=$HOME/.zsh

source $ZDOTDIR/.zshenv

これで、$HOMEに置く必要があるのは.zshenvだけになります。

zshが起動時に読み込むファイルとその順番

zshには様々な設定ファイルがあり、それらは決まった順番で読み込まれます。

ログインシェルは下記の順番で読み込まれます。

/etc/zshenv
$ZDOTDIR/.zshenv
/etc/zprofile
$ZDOTDIR/.zprofile
/etc/zshrc
$ZDOTDIR/.zshrc
/etc/zlogin
$ZDOTDIR/.zlogin

インタラクティブシェルは下記の順番で読み込まれます。

/etc/zshenv
$ZDOTDIR/.zshenv
/etc/zshrc
$ZDOTDIR/.zshrc

ログインシェルとしてzshを使うので、前述の通り.zshenv、.zprofile、.zshrcの構成でいきます。
.zloginは今のところ使用しないので作成しません。
尚、全てのユーザに影響するため、etc配下の設定ファイルは変更しません。

それぞれの設定ファイルに何を記述するか

$ZDOTDIR/.zshenv

環境変数系。ヒストリー系もここで記述します。

$ZDOTDIR/.zprofile

ログインシェルだけで使いたいaliasを記述します。

$ZDOTDIR/.zshrc

上述以外の全てを記述します。

dotfilesのシンボリックリンク生成

最後にsymlink.shにて、gitリポジトリのdotfilesに対して、$HOMEにシンボリックリンクを貼ります。

basepath=$(cd $(dirname $0);pwd)

# symlink dotfiles into ~files=.*
for file in $files
do
  if [ ! -d $file -a $file != "." -a $file != ".." -a $file != ".git" ] ; then
    ln -sf $basepath/$file ~
  fi
done

# symlink zsh configuration files into ~/.zsh
if [ ! -d ~/.zsh ] ; then
  mkdir ~/.zsh
fi
for file in .zsh/.*
do
  if [ $file != "." -a $file != ".." -a $file != ".git" ] ; then
    ln -sf $basepath/$file ~/.zsh/
  fi
done


完成

まだ工事中ですが、一旦こんな感じになりました。
github.com


次の記事はこちら
kitakitabauer.hatenablog.com