この記事は大阪公立大学高専 Advent Calendar 2022 17日目の記事です。(前半の日程がほとんど空いているせいで 5 人目とかだけど)
はじめに
キュレェです。17, 18 日に Advent Calendar の記事を投稿する予定でしたが、祖父が急逝して記事を書いている暇じゃなくなったので 22 日に延期して脳死で書ける dotfiles 盆栽について書こうと思います。
dotfiles って何?
これを見るとわかりやすい(おれはこれを見て dotfiles を作りました)
dotfiles を晒す
おれのリポジトリは以下です。 github.com 上で上げた記事のようにこだわりポイントを晒そうと思うけど、よくよく考えると Emacs が dotfiles の大半を占めているので init.el 晒しっぽくなってしまうかもしれない。
Zsh 編
デフォルトシェルは fish と迷いましたが、Arch Linux でデフォルトシェルに fish を使うことが推奨されていなかったので Zsh を使っています(今は WSL Ubuntu を使っているので問題はないと思うけど今更変える気とかないなった)
プラグインマネージャ
zplug を使っています。プラグインマネージャだけどだいたいのリポジトリからバイナリを拾ってこれるっぽいので asdf(ツールのバージョン管理ツール、anyenv みたいなやつ)もこれで拾ってきています。
見た目
starship を使っています。Rust 製でモダン...... みたいな話をしたいが、正直モダンか否かとかあんまりわからない。Zsh はもちろん他のメジャーなシェルにはだいたい対応しているので、設定ファイルを共通化させて Powershell でも同じ見た目を再現できるという点が面倒くさがりなので嬉しい。
cd コマンドの強化
上で上げた zplug と同じ人が作っているらしい。天才?
"cd" と入力するだけでよく使うディレクトリを出してくれます。そこから絞り込みも可能で入れたら離れられない。このプラグインはもちろん zplug で入れています。
非同期処理
これ入れるだけ
predict-on
Zsh を使う人の中でも使う人と使わない人が分かれるかなり癖のあるオプションだと思います。数文字入力するとそこまでで打った数文字と部分一致するような打ったコマンドを履歴から引っ張ってきて自動で出してくれます。 これ、マジで使っていて意図したコマンドが一発で打てて嬉しいときと意図していないコマンドが入力されてムカつくときが半々くらいなので一時期は無効にしていたのですが、後述する設定のお陰でムカつくとはいえ幾分か仲良くなれました。
キーバインディング
Emacs キーバインドにすると Ctrl-k でカーソルより後ろの文字をカットできるようになるため、predict-on で意図しない文字が入ったときに一瞬で消せるので楽です。
setxkbmap -layout us bindkey -e # emacs mode bindkey '^[Oc' forward-word bindkey '^[Od' backward-word bindkey '^[[1;5D' backward-word bindkey '^[[1;5C' forward-word bindkey '^H' backward-kill-word # delete previous word with ctrl+backspace bindkey '^[[Z' undo # Shift+tab undo last action
Emacs 編
パッケージ管理ツール
昔は use-package が流行っていたのでコピペで書いてたけれど、自分でどういう設定化を把握せずコピペしまくって気分悪くなったので leaf.el に変えました。
leaf.el で簡潔に設定を記述できるので本当に助かっています。これがないと生きていけない。貼るまでもないパッケージな気がします。
補完
company + counsel とかいうほぼ典型みたいな感じです。
入力補助
aggressive-indent
各モードのインデントオプションを参照して自動的にインデントを矯正してくれます。適当に書いているとカッコがガチャガチャ動くのが面白い。
smart-hungry-delete
消したい空白が一気に消えるので便利です。昔はなんか消したい空白を消すんじゃなくて yank するしょりになっていたせいで kill-ring に空白だけ残るイライラがあったけど、pull request で改善されてました。
モダンエディタっぽい見た目にする
centaur-tabs
emacs-dashboard
doom-modeline
centaur-tabs で VSCode とかでよく見るタブの切り替えができます。これと emacs-dashboard を併用するときれいになる。
doom-modeline は、元々メジャーモードしか表示してくれないので、よく diminish とか blackout でマイナーモードを非表示にするとかをしなくてよくなるからオススメです。
Org-mode
org-modern
見出しを UTF-8 の記号とかに自動的に置換してくれるので見た目がきれいになって嬉しい。下の org-beautify-thme と併用するとなおよしだけれど......?
org-beautifiy-theme
WSL だとこれを入れると異常に Org-mode の動作が重くなるので入れないほうがいいです。マジで意味わからんくらいフリーズする。これを入れることを勧める記事も結構多かったので WSL 以外だとよさそう(見た目はタイトルが大きく表示されたりして実際にきれいになる)です。
init.el が初回に起動したときに発火するコマンド
(unless (file-exists-p "~/.emacs.d/.tmp/first-startup-over") (make-empty-file "~/.emacs.d/.tmp/first-startup-over") (fira-code-mode-install-fonts t) (all-the-icons-install-fonts t))
いいファイル名が思いつかなかったです。クソダサいゴミファイルができてしまう。こういう便利関数を詰め込んだパッケージとか作りたいですけど、たぶんありそう。 (fira-code-mode-install-fonts t)、(all-the-icons-install-fonts t) を leaf のブロックに囲んじゃうと、毎回起動時にフォントをインストールしてしまう欠陥があるのでファイルの有無を判断して発火させています。
Emacs 27 未満で発火するコマンド
(when (< emacs-major-version 27) (load "~/.emacs.d/early-init.el"))
iSH (というか Alpine Linux)で Emacs を入れると 26 が入って early-init.el が読み込まれなくてビビったので書きました。この設定は役に立たないほうが嬉しいです。
まとめ
なんか書いてる暇とかあんまりないのに 1 時間くらい書いてしまったのでやめます。 盆栽について語ると楽しい