最近のdotfiles

shellscript


この記事は、 PMOB Advent Calendar 2016 の 23日目 の記事です。

年末って感じですね。大掃除の時期です。 整理整頓ゴミ掃除。 ということで設定ファイルを大掃除しようね。

zshrc

分割しました。 .zsh/以下にそれぞれの設定を書き、 .zshrcでロードするというスタイルにしています。

~/
|_ .zshrc
|_ .zsh/
  |_ ALIAS
  |_ COMPLETION
  |_ ENVIRONMENTS
  |_ PATH
  |_ PLUG-SETTINGS
  |_ PLUGINS
  |_ zplug

.zshrcに書くこと

.zshrcの中では、基本的にsourceしまくってます。 こんな感じ。

export ZDOTDIR=$HOME/.zsh
export ZPLUG_HOME=$ZDOTDIR/zplug

source $ZDOTDIR/COMPLETION

source $ZDOTDIR/PLUGINS
source $ZDOTDIR/PLUG-SETTINGS

source $ZDOTDIR/PATH
source $ZDOTDIR/ALIAS
source $ZDOTDIR/ENVIRONMENTS
source $ZDOTDIR/npm_completion
source $ZDOTDIR/pip_completion

一部順番を気にする必要があります。 なるべく依存関係を作らないように切り出していくと編集しやすくなって強い。 あとVCSで追いやすくなるかも。自分しか使ってないんであんま関係ないですけどね。

プラグイン

今まではパスの通ってるところに git submodule add してautoloadなりsourceしていました。 ですが今回 zplug を使ってみました。 めっちゃいいですね。 サポートコマンドも充実していて、ほとんどの zsh ツールに対応できると思います。 これを機に自作の zsh ツールは切り出して、zplug で管理するようにしました。

zplug 自体は dotfiles のサブモジュールにしてます。 zplug のアップデートがあるので、ignore=dirty するといいと思います。

プラグインの使用感は vim のプラグインと似たような印象でした。 zshrc に相当するセットアップソースを書くだけで完了です。

現在は以下のプラグインを使用しています。 そんなに入れてないね。

そういえばパッケージマネージャの auto-fu がクソ重いんで特定のコマンドだけ auto-fu 切りたいんですけどなんかいい方法ありますかね。

vimrc

ちょっと迷ったけど分割しました。 .vim/config以下にそれぞれの設定を書き、 .vimrcでロードするというスタイルにしています。

Vimは以下のものを使ってます。 neovimいいよって言われてちょっとマヨってる。

VIM - Vi IMproved 8.0
MacOS X (unix) version
Compiled by Homebrew

vimrcは以下のような形です。

~/
|_ .vimrc
|_ .vim/
  |_ config/
    |_ appearance.vim
    |_ keybinding.vim
    |_ plugins.vim
    |_ system.vim

どこを見れば何が設定できるか、 見やすくていい感じ。

.vimrcに書くこと

.vim/config/ 以下を走らせます。

" .vim/config/
runtime! config/*.vim

vimrc がすごいしょぼくなった。 これを気に plugin 系の設定をだいたい一箇所に集めたのでスッキリしました。 ftplugin で設定してるものもまだありますけど。

あ、プラグインマネージャは vim-plug 使ってます。

homebrew

brew doctor したらこんなメッセージが

Warning: Your Homebrew’s prefix is not /usr/local. You can install Homebrew anywhere you want but some bottles (binary packages) can only be used with a /usr/local prefix and some formulae (packages) may not build correctly with a non-/usr/local prefix.

これのせいで brew upgrade がクソ重かったのか。 ということで修正します。

/opt/homebrew派からの乗り換えの時の注意点として、 /etc/paths, /etc/shells の更新、ログインシェルの確認をするといいと思います。 あと私は dotfiles の再インスコ。

$ # uninstall dotfiles
$ cd path/to/dotfiles
$ python deploy.py unlink
$ cd ..
$ rm -rf dotfiles
$ # uninstall homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
$ sudo rm -rf /opt
$ exec -l /bin/sh
$ # re-install homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ # install dotfiles
$ curl -L https://dotfiles.matsub.tech | sh

バイナリがボコボコ落ちるようになってめっちゃ早くなりました。

あと pyenv を入れている時、 brew doctor が pyenv の config を拾って警告してくるので、 これが嫌な場合は以下のようにすると無視してくれます。 私はこれで alias 張ってます。

env PATH=${PATH/${HOME}\/\.pyenv\/shims:/} brew doctor

あと doctor が怒るとしたら、 keg-only な formula を link –force してたときくらいですかね。

リポジトリ大掃除

今までは適当にディレクトリ切ってリポジトリを置いて開発していました。

~/
|_ PMOB
  |_ some_project
|_ Develop
  |_ some_project
|_ Code
  |_ some_snippets_classified_by_lang

みたいな。

これを ghq で管理することにしたらめっちゃよかった。

ghq

ghq はリポジトリを管理するためのソフトです。 リポジトリを prefix/host/owner/repo_name/ の形で自動的に配置するソフトなんですが、 これに後述するちょちょいのちょいをちょいするとすごく良い(日本語)。 とりあえず、ghq の設定は .gitconfig で行います。

...
[ghq]
  root = ~/Develop

git config --global ghq.root= で設定すると多分パスが展開されるので手動で書き込みました。

ghq のコマンド

ghq のコマンドは結構少ないです。

command description
get Clone/sync with a remote repository
help Show a list of commands or help for one command
import Bulk get repositories from stdin
list List local repositories
look Look into a local repository
root Show repositories’ root

ghq get でガンガンリポジトリを追加していく感じです。

すごいいいコマンド

fzf を使って ghq の管理しているリポジトリに移動し、 ついでに tmux に入っている場合はセッション名を書き換えます。

function dev() {
    moveto=$(ghq root)/$(ghq list | fzf)
    cd $moveto

    # rename session if in tmux
    if [[ ! -z ${TMUX} ]]
    then
        repo_name=${moveto##*/}
        tmux rename-session $repo_name
    fi
}

デモ

すごいいい。

最後に

最近の私の dotfiles は多分こんな感じです。 みんなも大掃除しよう。

あとtpm(tmuxのマネージャ)入れたのに何も入れてません。 なんか面白いものあったら教えてください。