KiwiDeskKiwiDesk
Linuxのハックではなく、macOSのために作られたタイリング・ウィンドウマネージャー

フラットな配列で考える、タイル型

KiwiDesk はウインドウを i3 のようなツリーではなくフラットな配列で管理します。Lua で全面的に設定でき7 つのレイアウトを切り替えられます。そしてSIP を無効化しません

MIT ライセンス ↗ · Swift と Lua で記述 · 署名・公証済み · macOS 14 以降、Apple シリコン

🥝 バージョン 1.1.2

yabai・AeroSpace・Rift と比較する

「タイル型のウインドウマネージャは、ずっと一部の人の玩具でした。私はそれを、誰にとっても直感的なものにしたかったのです。ただ、こんなふうに動いてくれればいい。」

「使う人に合わせて動くウインドウマネージャがほしかったんです。こちらが動き方を教えなければいけないものではなく。」

— KiwiDesk の生みの親、Maikel Hajiabadi
キウイに会う

ウインドウがひとりでに片づくところを見る

マスコットがひと画面ぶんのウインドウを楽しげに整えていく、10 秒の小さな映像です。KiwiDesk のやり方に、ちょっとした愛嬌を添えて。

クリックで再生 — 10 秒 🥝

「ひとこと注意を。キウイがキウイを積み上げるのを眺めるのと同じくらい、妙に心地よいです。並ぶところを見たいがために、わざとウインドウを開くようになります。」

— Maikel(キウイが積み上がるのを、つい足を止めて眺めています)
KiwiDesk である理由

一つの考えを、丁寧に形にしました

フラットな一次元のウインドウモデル。そこから自然に生まれる、速くて、スクリプトから扱えて、安全なすべて。

ツリーではなくフラットな配列

どのスペースもフラットなウインドウの一覧です。レイアウトはその配列に対する純粋な関数で、ツリーをいじることは一切ありません。

7 つのレイアウト

bsp、スタック、スクロール(PaperWM 風)、モノクル、グリッド、トラック、フローティング。いつでも即座に切り替えられます。

Lua による設定

サンドボックス化された Lua 5.5 VM が ~/.config/KiwiDesk/init.lua を読み込みます。設定が壊れていてもウインドウは固まりません。500 ms のウォッチドッグが守ります。

CLI とソケット IPC

すべてをスクリプトから操作できます。ソケット経由でイベントを SketchyBar や JankyBorders、自作のツールへ流せます。

滑らかなアニメーション

モニタごとに 1 つの display link を使うので、60 Hz と 120 Hz が混在する環境でも、それぞれが本来のリズムで滑らかに動きます。

SIP を無効化しない

カーネル拡張は使いません。モーダルなキーバインドは Carbon を使うため、入力監視の許可は不要で、キーロガーにもなりません。

Sticky ウインドウ

Sticky にしたウインドウは、すべてのスペースに付いてきます。1 つの画面だけに留めることもできます。ウインドウのマークと Space Bar のバッジが、それを示します。

VoiceOver とキーボード

VoiceOver ではどの項目も名前と値を読み上げ、設定はキーボードだけでも操作できます(macOS のキーボードナビゲーションをオンに)。

ネイティブタブでも崩れない

Finder や Safari、ターミナルのタブを切り替えても、まとめても、レイアウトはそのままです。ウインドウマネージャーから見れば macOS のタブは別々のウインドウ。たいていそこで破綻します。

7 つのレイアウト

いつでも、キー 1 つ先に

どのレイアウトも、同じフラットな配列に対する純粋な関数です。だから切り替えは一瞬で、結果も読めます。

BSP

二分割:新しいウインドウがペインを半分にします。

Stack

マスター領域と、その横のスタックカラム。

Scrolling

Niri / PaperWM 式の、スクロールするカラムまたは行。

Monocle

フォーカス中のウインドウを最大化し、残りは背面へ。

Grid

動的または固定の、行 × 列。

Track

カラムまたは行。どのサイズ変更にも、対象は 1 つだけ。

Floating

macOS のデフォルトを、そのまま。

設定

Lua で書く

スライダーより、テキスト派? ~/.config/KiwiDesk/init.lua に本物の Lua を書けば、そちらが主導権を握ります。レイアウトも間隔もキーバインドも、すべてコードで。サンドボックス化された Lua 5.5 VM 上で 500 ms のウォッチドッグ付きで動くため、書き間違いでウインドウが固まることはありません。

init.lua
-- ~/.config/KiwiDesk/init.lua
KiwiDesk.set_gap_global(10)
KiwiDesk.set_mode("music", "floating")

-- one flat array per space, tidy by default
KiwiDesk.bind("cmd+alt+left", function()
    KiwiDesk.focus("left")
end)
コマンドライン

ターミナルから操る

すべての操作がコマンドです。キーに割り当てても、スクリプトから呼び出しても、Unix ソケット経由でイベントを SketchyBar や JankyBorders、自作のツールへ流し込んでも構いません。

「ウインドウマネージャがスクリプトから動かせるようになった日から、デスクトップは自分で回りはじめました。以来、ウインドウをドラッグしていません。」

— Maikel(キウイに、自分で片づけることを教えました)
zsh — kiwidesk
$ kiwidesk set_mode monocle
$ kiwidesk focus left
$ kiwidesk get_state
# ライブイベントを配信(SketchyBar や自作ツールへ)
$ kiwidesk subscribe space_change

「ターミナルはまったく苦になりませんが、思いどおりにウインドウを並べるためだけにコンテナの入れ子をずっと追いかけるのには疲れてしまいました。KiwiDesk はすべてをフラットに保ちます。無駄なオーバーヘッドも、気の散る要素もなく、ただプロジェクトに集中できます。」

クイックスタート

KiwiDesk をインストールする

パッケージマネージャーの方がよいですか。コマンド 1 つで kiwidesk CLI が PATH に入ります。どちらの方法でも、KiwiDesk はその後自動で最新に保たれます。

ドキュメントを読む

署名・公証済みのディスクイメージは、同じ App です。そちらで入れた場合は、kiwidesk CLI を PATH に通すリンクをご自分で作ってください。CLI のドキュメントで手順を案内しています。

zsh — install
$ brew install --cask kiwicanopy/tap/kiwidesk
# kiwidesk CLI も PATH に入ります
今すぐダウンロード

MIT ライセンス ↗ · Swift と Lua で記述 · 署名・公証済み · macOS 14 以降、Apple シリコン

ソースからビルドする場合
zsh — build
$ git clone https://github.com/KiwiCanopy/KiwiDesk.git
$ cd KiwiDesk
$ swift build -c release
# コントリビューター向け — 手軽なのは Homebrew
準備ができたら、いつでも

画面に、少しの静けさを

KiwiDesk をダウンロードするか、Homebrew でインストールしてください。どちらも同じ署名済みのビルドで、その後は自分で最新に保ちます。

MIT ライセンス ↗ · Swift と Lua で記述 · 署名・公証済み · macOS 14 以降、Apple シリコン

KiwiDesk は無料のオープンソースです。GitHub でスターを付けると、他の人が見つけやすくなります。

「1 日 1 個のリンゴと言いますが、キウイのほうがビタミンも多く、野心も大きいのです… 🥝」