i3wmの使い心地が最強すぎる

コンポジット型ウィンドウマネージャに分類される Windows や Mac のようなウィンドウマネージャを使っていたのだけれど、これらは万人受けする一方で何もかもが押し付けられているように感じていて。
もっと自由な開発環境を求め、初めてLinuxを使い始めたのが10年以上前。
Ubuntu8.04とかそのあたりだった気がする。KDE、Gnome、LXDEを環境として色々触るようになった。
これらは設定の幅が広くて、更にOSSの拡張機能や自作スクリプトでアレンジしてWindowsよりも優れたカスタマイズ体験をもたらしてくれたけど、それでもまだWindowsを使っていた頃と同じ窮屈な感覚を感じずにはいられなかった。
そして今ではArchLinuxにi3wmと言われるタイリングウィンドウマネージャを入れて動かすことで落ち着いている。
必要最低限すら入っていない環境に必要な機能を組み込んでいく。
自分で好みに育て上げる感じが楽しく、キーバインドや操作性は自由に設定出来て、何かしらのアプリや設定よりも高い優先度を持ち全てのキーバインドを制御できる。デフォルトで用意されているものに合わせる必要もない。設定は全てdotfilesで管理しているので、新しく環境を作ったときも数コマンドで環境を作れる。
自分で考えた設定なので覚えやすいし、アイデア次第でどんどん使いやすくしていける。
ワークスペースを自在に操れるのは勿論、ルールに基づいてウィンドウを自動で整理することが出来る。もうウィンドウに迷うことはないし、動作は軽量でウィンドウを瞬時に切り替えることが出来る。
コマンドを組み合わせて、開発環境の一式を1コマンドで特定のワークスペースで起動するなんてことも余裕で出来る。
この使いやすさを味わうと、もうMacやWindowsには戻れない。控えめに言って最高なので、ちょっと見てほしい。
そもそもタイリングウィンドウマネージャとは何なのか
タイリングウィンドウマネージャは、シンプルに言えばそのウィンドウを自動で並べて配置出来ること。 ほとんどの操作をキーボードのみで行えるように設計されていて、これを設定ファイルで自由にカスタマイズ出来る。
タイリングウィンドウマネージャには、必要最低限すら機能が用意されていない。コミュニティによって様々なツールが提供されていて、これを利用してデスクトップ環境として使える形にしていく。
アプリケーションランチャーのRofi
ステータスバーのPolybar
ウィンドウ装飾のPicom
この他にも、デスクトップ環境として使うために様々な設定が必要になる。
- 背景の設定
- monitorの定義
- Networkの管理
- Bluetooth管理
- 通知デーモン
- ファイラー
- …
これらがメンドイと感じる人には、タイリングウィンドウマネージャはまず向かない。 このメンドクササに立ち向かってでもオリジナルを作りたいという強い意志と時間の消費の覚悟が必要。
けど恐れる必要はなく、界隈にはriceと言われるカスタマイズされた設定や外観を共有する文化があり、Redditでは頻繁に設定が共有されてる。また、GitHubで公開されてるdotfilesを覗けば、どんどん設定を育てられる。 すでに定義されたdotfilesを使う場合でも、いずれ設定の理解が必要になるが、使いながら覚えていけばいい。
数あるタイリングマネージャの中でi3wmを使う理由
タイリングウィンドウマネージャには多くの種類がある。
X11ではこのi3wmを始め、bspwm、awesome、qtile、xmonad、waylandではi3wm互換のsway、Hyprland、niri…
いろんなタイリングマネージャを使ってみた中で、自分にはi3wmが最も馴染んだ。
- X11上で動き、設定がシンプル
- 整備されたドキュメント、コミュニティの規模
- viライクにタイリングを操作可能
- dotfilesで管理しやすい設定ファイルと拡張性
- コミュニティに構築されたエコシステムとの親和性
- モードという概念の素晴らしさ
i3wmには色々良さがあるけれど、特にモードという概念が決め手になっている。
モードという概念の素晴らしさ
特にTWMはキーボードでほとんどの操作を行なう都合上、多くのキーバインドを必要とする。
キーバインドはアプリケーションによっても排他的に使用されるので、それぞれがコンフリクトしないように配慮するとなるとCtrlやShiftのキーバインドは使用できず、Super(俗に言うWinキー)やAlt(meta)を多用することとなる。
僕は物理的なスイッチが両手で50コの分割キーボードを好んで使っているが、ただでさえタイリングウィンドウマネージャ、ブラウザ、エディタなどの各アプリケーションで多数のキーバインドを必要とするのに、その操作をキーバインドだけで実現しようとすると必然的にキーの同時押しが増えてしまう。

それを解決する手段が、このモードという概念。
通常がノーマルモードだとすると、ヴィジュアルモードのような別のモードを作ることができ、そのモード中はノーマルモードのキーバインドが全て無効になり別の定義が可能となる。Vimを使ったことがあるならこのモードの概念を割と理解してもらいやすいと思う。
例えば、Super+Ctrl+Alt+1のようなキー入力をしようとすると、Super+Ctrl+Alt+Layer(fn)+1の合計 5 種類のキーを押す必要がある…この操作はモタツキの原因となり、生産性の低下に直結する。
そこでモードを活用できる。
例えばSuper+gのキーバインドをモードAに入るキーバインドとして定義したとする。2ストローク目でaをキー入力した場合にSuper+Ctrl+Alt+1でやろうとしていた操作をaというワンキーで行うように設定すれば良い。
つまりストローク数を増やし、同時押しを減らすことが出来る。
キーストロークこそ増えてしまうものの、通常ではバインドしにくかったアルファベット領域[a-z]へのキーバインドを有効活用できることとなる。
このモードの素晴らしさは、同時押しを減らせることだけじゃない。
特定のモード中は、ノーマルモードのキーバインドが無効になる。それを利用し、敢えてキーバインドを指定しないモードを用意することで、キーバインドが存在しない状態を作り出すことも出来る。これはゲーム用途などで敢えてキーバインドを設定したく無い場合に有用である。
また、モードをチェインして複数のモードを相互に移動することが出来る。これはつまり階層構造が作れる事を意味する。これも更に一次キーバインドの枯渇を防ぐ仕組みとして活用できる。
気になったらぜひ使ってみてほしい。 この記事は書きかけなので、気が向いたときに追記していく予定。