Mac や Linux を使っていると、気付いたらホームディレクトリ以下がドットファイルだらけに・・・
まあ、ホームディレクトリで ls -a とかやらなければわからないんだけど。
それでも放置するのはあまり気分が良くないので、ちょっと整理してみた。
zsh 関連
自分の環境では、以下の zsh 関連のドットファイルが存在した。
- .zsh_history
- .zcompdump
- .zshenv
- .zshrc
まず、.zsh_history と .zcompdump は .zshrc で
HISTFILE=~/.dots/zsh/history
...
autoload -U compinit
compinit -d ~/.dots/zsh/compdump
とすることで ~/.dots/zsh 以下に移動した。
次に、.zshrc と .zshenv も ~/.dots/zsh 以下に移動して、
ホームディレクトリに .zshenv を再度作成し、
export ZDOTDIR=${HOME}/.dots/zsh
source ${ZDOTDIR}/.zshenv
のように記述することで、~/.dots/zsh 以下のドットファイルが読み込まれるように設定した。
なお、この ~/.zshenv はログイン時にのみ読み込まれ、
それ以降は ~/.dots/zsh/.zshenv が読み込まれることとなる。
そのため、zsh がログインシェルになっていなければならない(たぶん)。
less 関連
ページャとして less を使っていると、.lesshst というファイルがホームディレクトリ以下に作成される。
これは less の検索などの履歴ファイルである。
less の設定は基本的に lesskey というものを使って行うのだが、
OS X 標準の less にはこの lesskey が存在しない (´・ω・`)
なので、homebrew でいい感じの less をインストールする。
brew tap homebrew dupes
brew install less
新しくインストールした方の less を使うように ~/.dots/zsh/.zshenv を修正し、
また、less の設定ファイルの場所を指定する。
export PATH=${HOME}/bin:/usr/local/bin:${PATH}
export LESSKEY=${HOME}/.dots/less/less
less の設定ファイルのソースファイル lesskey を記述する。
#command
#line-edit
#env
LESSHISTFILE = ~/.dots/less/lesshist
less を source-highlight を利用して色付けする。
source-highlight は homebrew でインストールしたものを用いる。
#env
...
LESSOPEN = | /usr/local/bin/src-hilite-lesspipe.sh %s
ついでにキーバインドも設定しておく。
#line-edit
^B left
^F right
^D delete
^H backspace
^A home
^E end
^P up
^N down
^K kill-line
更についでに、less のオプションの設定もしておく。
#env
...
LESS = -i -q -x2 -N -R
ちなみに、それぞれのオプションの意味は、
- -i : 大文字小文字を区別しないで検索。ただし検索パターンに大文字を含む場合は区別する。
- -q : あまりアラートを鳴らさない。
- -x2: タブ幅を2にする。
- -N : 行番号を表示する。
- -R : ANSI Color のエスケープシーケンスを色表示する
less の設定ファイルは設定ファイルとしては珍しく、バイナリとなっている。
そのため lesskey をコンパイルする必要がある。
lesskey ~/.dots/less/lesskey
emacs 関連
.emacs.d についてはぶっちゃけこのままのほうがわかりやすいので、このままで良いものとする。
私の環境上では、emacs に関連するドットファイルは .emacs.d 以外に .recentf と .terminfo があったため、今回はこれらを移動する。
.recentf の移動は非常に簡単で、~/.emacs.d/init.el に以下の様な記述を加えるだけで良い。
(setq recentf-save-file "~/.dots/recentf")
(recentf-mode 1)
.terminfo は ansi-term や multi-term 上で zsh を動かすと、プロンプトの前に 4m という文字が出てしまう症状を直すのに必要なファイルである。
このファイルを検索するディレクトリは TERMINFO 環境変数で指定される。
そのため作成した terminfo を .dots 以下に置き、適切に環境変数を設定すれば良い。
if [ "$EMACS" ];then
export TERM=xterm-256color
export TERMINFO=~/.dots/terminfo
fi
しかしよく考えれば、わざわざ terminfo を作成したりせずともこれでよかった気がする。
if [ "$EMACS" ];then
export TERM=xterm-256color
export TERMINFO=/usr/share/terminfo
fi
sbt 関連
一念発起して sbt を使ってみようかと思い、インストール & 実行してみたら、こいつも複数のドットファイルを参照する事が判明。具体的には、
- .sbtconfig
- .sbt/
- .ivy2/
このうち、.sbt と .ivy2 については .sbtconfig から変更することが可能であった。
# ヒープ・スタック領域
heap_max="-Xmx1536M"
heap_default="-Xms512M"
max_perm_size="-XX:MaxPermSize=384M"
stack_size="-Xss1M"
# 設定ファイル等の場所
settings_dir="-Dsbt.global.base=${HOME}/.dots/sbt"
boot_dir="-Dsbt.boot.directory=${HOME}/.dots/sbt/boot"
repos_dir="-Dsbt.repository.config=${HOME}/.dots/sbt/repos"
ivy_repos="-Dsbt.ivy.home=${HOME}/.dots/ivy2"
# その他
encoding="-Dfile.encoding=UTF-8"
unload_enable="-XX:+CMSClassUnloadingEnabled"
export SBT_OPTS="${heap_max} ${heap_default} ${max_perm_size} ${stack_size} ${encoding} ${settings_dir} ${boot_dir} ${repos_dir} ${ivy_repos} ${unload_enable}"
.sbtconfig の場所を変えられないかどうかチェックしようと思い、sbt の実行スクリプトを見てみたところ、
以下のような非常に単純なシェルスクリプトであった。
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.1/libexec/sbt-launch.jar "$@"
なので、これをラップした単純なシェルスクリプトを書いて、~/bin 以下に配置することで強引に .sbtconfig の位置を無理矢理変えてみた。(あまりおすすめできない方法だが)
#!/bin/bash
test -f ~/.dots/sbt/config && . ~/.dots/sbt/config
exec /usr/local/bin/sbt
かなり強引な方法 (あまりよい方法ではない)
一部のドットファイルは正攻法ではどうにもならなかった。
例えば、.latexmkrc は latexmk の設定ファイルだが、これは latexmk のソースコードにパスが直書きされているため、設定ファイルの場所を置き換えることができない。
そのため、latexmk をラップしたシェルスクリプトを作り、そこで一時的に設定ファイルへのシンボリックリンクをホームディレクトリ以下に作って終了時に削除することで、強引にドットファイルを .dots 以下に移動させた。
#!/bin/bash
if [ ! -r ${HOME}/.latexmkrc ] ; then
ln -s ${HOME}/.dots/latex/latexmkrc ${HOME}/.latexmkrc
trap "rm ${HOME}/.latexmkrc" EXIT
/usr/texbin/latexmk $@
else
/usr/texbin/latexmk $@
fi
trap を利用することで、abort したときなどでもシンボリックリンクが消えるようになっている。
ちなみに、latexmk の場合は設定を設定ファイルに書かずに、それらの設定をオプションとして記述したものを latexmk のエイリアスにするという手法も存在する。