bash_itをフォークしてdotfilesにする
はじめに
CLIをよく使う方だとdotfiles
を管理&運用していることも多いと思います。今回はbash_itというbashのフレームワークをフォークして、オリジナルのdotfilesに仕立て上げる方法について書きます。
注意:bashのフレームワークをベースにしているので、環境に応じてzshやfishを使い分けている方には本記事の内容は合わない可能性が高いです。
bash_itとは?
bashのフレームワーク。oh-my-zshを使ったことがある方であれば、それのbash版と思えばOK。bash_itを使うとプロンプト表示やエイリアスや補完を簡単に管理できます。
参考:テーマ設定の仕方(本記事ではテーマ設定については解説しません。)
なぜbash_itをdotfilesのように使うのか?
玄人は別として、dotfilesをはじめたての人の多くに「ベストプラクティスがわからない」というものがあります。ネットで「dotfiles」と検索すると、様々な人がdotfilesを紹介しています。(それがdotfiles文化の良いところなのですが、)始めた手の人は、結局どのようにして管理して良いか分からないという事態に陥りがちです(ソース:ぼく調べ)
そこで、bash_it
のようなそこそこ普及しているbashのフレームワークに備わっている仕組みを利用することで、そこそこ多くの人にとってそこそこ使いやすいdotfilesを簡単に構築するという狙いがあります。
bash_itの使い方
bash_itには様々なプラグインが標準装備されています。
プラグインにはaliases
, completion
, plugins
の3つのカテゴリがあります。(プラグインのカテゴリにplugin
があるのが少しややこしいですね)
利用可能なプラグインの一覧は次のコマンドで確認できます。(次のコマンドはalasesカテゴリのプラグイン一覧を表示しています。結果は一部省略しています。)
$ bash-it show aliases
Alias Enabled? Description
apt [ ] Apt and dpkg aliases for Ubuntu and Debian distros.
atom [ ] Atom.io editor abbreviations
bash-it [ ] Aliases for the bash-it command (these aliases are
clipboard [ ] xclip shortcuts
composer [ ] common composer abbreviations
curl [ ] Curl aliases for convenience.
dnf [ ] dnf aliases for fedora 22+ distros
docker [ ] docker abbreviations
docker-compose [ ] docker-compose abbreviations
emacs [ ] emacs editor
fuck [ ] fuck/please to retry last command with sudo
general [x] general aliases
git [ ] common git abbreviations
gitsvn [ ] common git-svn abbreviations
(その他多数)
一般的によく使われているエイリアスはデフォルトで入っています。(ここに入っていないものは自分で追加していく必要があります。それは記事の後半で解説しています。)
プラグインを使うためには、プラグインを有効化する必要があります。
次のコマンドで有効化できます。(ここではaliases
のgit
を有効化しています。)
$ bash-it enable alias git
$ source ~/.bashrc (←.bashrcを再読み込みして反映)
これでgitプラグインが有効化されました。
alias->git
プラグインは次の内容が含まれています。
alias g='git'
alias ga='git add'
.
.
大量のエイリアス定義
.
.
試しにターミナルで'ga'と打ってみてください。git add
コマンドが走ると思います。
bash_itの構造
bash_itのファイル構造は↓のようになっています。(今回の記事で解説しないファイルは省略しています。)
.
├── aliases
├── bash_it.sh
├── completion
├── plugins
└── vendor
それぞれのファイルの役割を簡単に解説します。
bash_it.sh
ターミナルでbash-it xxx yyy
と打った時にこのファイルが実行されます。bash_it
の詳しい実装を追っていくときは、このファイルを読み進めることになります。
aliases, completion, plugins
これらは、プラグインを格納するディレクトリです。カテゴリに応じてファイルの格納先が分かれています。
たとえば先ほどのalias
カテゴリのgit
プラグインは下記の場所に定義されています。
$ cat aliases/available/git.aliases.bash | head -n 20
# shellcheck shell=bash
about-alias 'common git abbreviations'
alias g='git'
alias get='git'
# add
alias ga='git add'
alias gall='git add -A'
alias gap='git add -p'
alias gav='git add -v'
# branch
alias gb='git branch'
alias gba='git branch --all'
bash_itに新たにプラグインを追加する
新しくプラグインを作成してみましょう。
次のファイルを作成してください。
aliases/availables/ls.aliases.bash
about-alias 'aliases for ls command'
alias ll='ls -l'
これでls
というエイリアスを作ることができました。
bash-it show aliases
と打つと、ls
がプラグイン一覧に追加されているはずです。
有効化してみましょう
$ bash-it enable alias ls
$ source ~/.bashrc
ll
コマンドが機能すれば成功です
もう一つプラグインを作成してみる
今度はもう少し実用的なプラグインを作成してみましょう。
pnpm
というJavascriptのパッケージ管理コマンドを設定するプラグインを書いてみましょう。(ここでは詳しいpnpmの効果は知らなくてもOKです。)
cite about-plugin
about-plugin 'setup pnpm'
if [[ -d "$HOME/.local/share/pnpm" ]]; then
export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
fi
ソースコードの詳しい意味がよく分からない場合はChatGPTに聞いてください。
有効化しましょう
$ bash-it enable plugin pnpm
$ source ~/.bashrc
pnpm
コマンドが使えるようになれば成功です。
ここまでの内容で、自由にプラグインを作成できるようになりました。
bash_it
に足りない機能があればどんどん追加していきましょう。
vimrcをbash_itで管理する
次は、.vimrc
や.tmux.conf
などのファイルを含むものをどうbash_it
で扱うか解説していきます。
今回は.vimrc
をbash_it
で管理してみましょう。
まず、.vimrc
ファイルの置き場です。
どこに置くのが良いでしょうか?
1つは、pluginsディレクトリの中に直接ファイルを置ことです。
$ cd plugins/available/
$ ls vim.plugin.bash
vim.plugin.bash
$ ls vim/**
.vimrc
.vim/autload
.
.
.
少しpluginsディレクトリが散らかりますが、うまく機能します。
もう1つはvendorディレクトリを利用することです。(筆者はこの方法を利用しています。)
.bash_it/vendor/github.com/{自分のgithubのユーザー名}
のようなディレクトリを作成し、その中に自由にファイルを置きます。(vendorディレクトリはbash_itではメンテナンスしていないが便利な機能が格納されているディレクトリです)
筆者はvendor
の中にvim
やtmux
の設定ファイルを置いています。
詳しくは↓を参照ください。
そしてplugins/available/vim.plugin.bash
に次のような内容を書いています。
cite about-plugin
about-plugin 'Vim plugin for bash'
# BASH_ITという変数でbash_itのルートディレクトリが取得できます。
VIM_DIR="${BASH_IT}/vendor/github.com/ppdx999/vim"
mkdir -p "$HOME/.vim/autoload"
# vendor配下のvimrcを`~/.vimrc`に配置するためのエイリアス
alias apply-vim-conf='cp ${VIM_DIR}/.vimrc ${HOME}/.vimrc && cp ${VIM_DIR}/plug.vim ${HOME}/.vim/autoload/plug.vim'
# vendor配下のvimrcを編集するためのエイリアス
alias edit-vim-conf='vim ${VIM_DIR}/.vimrc'
ここは正直自由なので、どこでも良いと思います。~/.vimrc
や~/.vim
にシンボリックリンクをはるでも良いと思います。
環境を再構築する
bash_it
は起動時にenabled
ディレクトリの配下にあるファイルを有効化するという仕組みで動いています。
そのため、現在のシステム環境で有効化されているプラグインの一覧はenabled
直下のファイルを見ればわかります。
逆に言えば、新しく環境を再構築するときは、enabled
ディレクトリに有効化したいプラグインのシンボリックリンクをはるコマンドを作成しておき、それを実行すれば良いです。
環境に合わせて起動するプラグインを自由に組み替えましょう。
最後に
bash_itのコア部分をPOSIX Shell互換に書き直して、bashやzshすらもプラグインとして扱えるようにすれば、dotfilesの移植性がより高まると思うので、いつかやってみたい。
Discussion