LoginSignup
31
33

More than 5 years have passed since last update.

できるだけドットファイルがホームディレクトリに並ばないようにする設定 (OS X Mavericks)

Posted at

Mac や Linux を使っていると、気付いたらホームディレクトリ以下がドットファイルだらけに・・・
まあ、ホームディレクトリで ls -a とかやらなければわからないんだけど。
それでも放置するのはあまり気分が良くないので、ちょっと整理してみた。

zsh 関連

自分の環境では、以下の zsh 関連のドットファイルが存在した。

  • .zsh_history
  • .zcompdump
  • .zshenv
  • .zshrc

まず、.zsh_history と .zcompdump は .zshrc で

.zshrc
HISTFILE=~/.dots/zsh/history
...
autoload -U compinit
compinit -d ~/.dots/zsh/compdump

とすることで ~/.dots/zsh 以下に移動した。
次に、.zshrc と .zshenv も ~/.dots/zsh 以下に移動して、
ホームディレクトリに .zshenv を再度作成し、

.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 の設定ファイルの場所を指定する。

~/.dots/zsh/.zshenv
export PATH=${HOME}/bin:/usr/local/bin:${PATH}
export LESSKEY=${HOME}/.dots/less/less

less の設定ファイルのソースファイル lesskey を記述する。

~/.dots/less/lesskey
#command
#line-edit
#env
LESSHISTFILE = ~/.dots/less/lesshist

less を source-highlight を利用して色付けする。
source-highlight は homebrew でインストールしたものを用いる。

~/.dots/less/lesskey
#env
...
LESSOPEN     = | /usr/local/bin/src-hilite-lesspipe.sh %s

ついでにキーバインドも設定しておく。

~/.dots/less/lesskey
#line-edit
^B    left
^F    right
^D    delete
^H    backspace
^A    home
^E    end
^P    up
^N    down
^K    kill-line

更についでに、less のオプションの設定もしておく。

~/.dots/less/lesskey
#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 に以下の様な記述を加えるだけで良い。

~/.emacs.d/init.el
(setq recentf-save-file "~/.dots/recentf")
(recentf-mode 1)

.terminfo は ansi-term や multi-term 上で zsh を動かすと、プロンプトの前に 4m という文字が出てしまう症状を直すのに必要なファイルである。
このファイルを検索するディレクトリは TERMINFO 環境変数で指定される。
そのため作成した terminfo を .dots 以下に置き、適切に環境変数を設定すれば良い。

~/.dots/zsh/.zshrc
if [ "$EMACS" ];then
  export TERM=xterm-256color
  export TERMINFO=~/.dots/terminfo
fi

しかしよく考えれば、わざわざ terminfo を作成したりせずともこれでよかった気がする。

~/.dots/zsh/.zshrc
if [ "$EMACS" ];then
  export TERM=xterm-256color
  export TERMINFO=/usr/share/terminfo
fi

sbt 関連

一念発起して sbt を使ってみようかと思い、インストール & 実行してみたら、こいつも複数のドットファイルを参照する事が判明。具体的には、

  • .sbtconfig
  • .sbt/
  • .ivy2/

このうち、.sbt と .ivy2 については .sbtconfig から変更することが可能であった。

.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 の実行スクリプトを見てみたところ、
以下のような非常に単純なシェルスクリプトであった。

/usr/local/bin/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/sbt
#!/bin/bash
test -f ~/.dots/sbt/config && . ~/.dots/sbt/config
exec /usr/local/bin/sbt

かなり強引な方法 (あまりよい方法ではない)

一部のドットファイルは正攻法ではどうにもならなかった。
例えば、.latexmkrc は latexmk の設定ファイルだが、これは latexmk のソースコードにパスが直書きされているため、設定ファイルの場所を置き換えることができない。

そのため、latexmk をラップしたシェルスクリプトを作り、そこで一時的に設定ファイルへのシンボリックリンクをホームディレクトリ以下に作って終了時に削除することで、強引にドットファイルを .dots 以下に移動させた。

~/bin/latexmk
#!/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 のエイリアスにするという手法も存在する。

31
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
33