😎

思わず試したくなるカスタマイズ性の高いウィンドウ操作「Yabai + skhd」実装ガイド

2024/12/13に公開

NISLab小板研所属 M1の片岡です。
NISLab Advent Calendarの13日目の記事になります。

私たちの研究室

https://nisk.doshisha.ac.jp/

アドベントカレンダー 13日目~

https://nislab-advent-calendar-2024-12.vercel.app/

Yabai + skhd の解説

Yabaiskhd は、macOS でのウィンドウ操作を向上させるための強力なツールです。特にキーボード主体のワークフローを好む人にピッタリです。本投稿では、これらのツールの概要、有用性、実装方法について解説します。


Yabai とは

Yabai は macOS 用のウィンドウマネジメントツールで、コマンドを使用して窓の位置、サイズ、レイアウトを制御できます。このツールはタイリングウィンドウマネージャーを実装し、高用率でカスタマイズ可能なデスクトップ環境を提供します。

Yabai の特徴

  • タイリング、スタッキング、フロートウィンドウレイアウト
  • ウィンドウサイズや位置の精微な制御
  • アプリの動作に関する設定規則
  • スペースやディスプレイの簡単な操作

skhd とは

skhd は、macOS 用のhotkey daemonです。これにより、キーコンビネーションの設定をコマンドやスクリプトに結びつけることが可能になります。Yabai と組み合わせると、キーボード操作でのスムーズなウィンドウマネジメントが実現できます。

skhd の特徴

  • シンプルなhotkey config syntax
  • Yabai などの他のツールとの簡単な組み合わせ

実装ステップ

1. Yabai のインストール

Homebrew を使用して Yabai をインストール:

brew install koekeishiya/formulae/yabai

Yabai に必要な権限を付与:

echo "$(whoami) ALL=(root) NOPASSWD: sha256:$(shasum -a 256 $(which yabai) | cut -d \" \" -f 1) $(which yabai) --load-sa" | sudo tee -a /etc/sudoers

Yabai を起動:

yabai --start-service

2. skhd のインストール

Homebrew を使用して skhd をインストール:

brew install koekeishiya/formulae/skhd

skhd を起動:

skhd --start-service

3. Yabai と skhd の設定

設定ディレクトリの作成

設定ディレクトリへ移動し、Yabai と skhd 用のフォルダを作成:

cd ~/.config
mkdir yabai skhd

設定ファイルの作成

  1. Yabai 用:
    touch ~/.config/yabai/yabairc
    
  2. skhd 用:
    touch ~/.config/skhd/skhdrc
    

設定ファイルを実行可能にする

chmod +x ~/.config/yabai/yabairc
chmod +x ~/.config/skhd/skhdrc

4. サービスの再起動

設定を適用するため、両サービスを再起動:

yabai --restart-service
skhd --restart-service

5. skhd のホットキー設定

~/.config/skhd/skhdrc を編集し、Yabai 用のホットキーバインドを追加する。
下記はサンプル設定例です:

# focus window
alt - x : yabai -m window --focus recent
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east

# swap window
shift + alt - x : yabai -m window --swap recent
shift + alt - h : yabai -m window --swap west
shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north
shift + alt - l : yabai -m window --swap east

# move window
shift + cmd - h : yabai -m window --warp west
shift + cmd - j : yabai -m window --warp south
shift + cmd - k : yabai -m window --warp north
shift + cmd - l : yabai -m window --warp east

# move window
shift + ctrl - a : yabai -m window --move rel:-20:0
shift + ctrl - s : yabai -m window --move rel:0:20
shift + ctrl - w : yabai -m window --move rel:0:-20
shift + ctrl - d : yabai -m window --move rel:20:0

# increase window size
shift + alt - a : yabai -m window --resize left:-20:0
shift + alt - s : yabai -m window --resize bottom:0:20
shift + alt - w : yabai -m window --resize top:0:-20
shift + alt - d : yabai -m window --resize right:20:0

# decrease window size
shift + cmd - a : yabai -m window --resize left:20:0
shift + cmd - s : yabai -m window --resize bottom:0:-20
shift + cmd - w : yabai -m window --resize top:0:20
shift + cmd - d : yabai -m window --resize right:-20:0

# rotate tree
alt - r : yabai -m space --rotate 90

# mirror tree y-axis
alt - y : yabai -m space --mirror y-axis

# mirror tree x-axis
alt - x : yabai -m space --mirror x-axis

# toggle desktop offset
alt - a : yabai -m space --toggle padding && yabai -m space --toggle gap

# toggle window fullscreen zoom
alt - f : yabai -m window --toggle zoom-fullscreen

# toggle window native fullscreen
shift + alt - f : yabai -m window --toggle native-fullscreen

# toggle window split type
alt - e : yabai -m window --toggle split

# float / unfloat window and restore position

# alt - t : yabai -m window --toggle float && /tmp/yabai-restore/$(yabai -m query --windows --window | jq -re '.id').restore 2>/dev/null || true
alt - t : yabai -m window --toggle float && yabai -m window --grid 4:4:1:1:2:2


6. Yabai の設定

~/.config/yabai/yabairc を編集し、Yabai の動作をカスタマイズする。
下記はサンプル設定例:

# global settings
yabai -m config mouse_follows_focus          off
# yabai -m config focus_follows_mouse          autoraise
yabai -m config focus_follows_mouse          off
yabai -m config window_placement             second_child
yabai -m config window_topmost               on
yabai -m config window_shadow                off
yabai -m config window_opacity               off
yabai -m config window_opacity_duration      0.0
yabai -m config active_window_opacity        0.0
yabai -m config normal_window_opacity        0.0
yabai -m config window_border                off
yabai -m config window_border_width          3
yabai -m config active_window_border_color   0xFF88C0D0
yabai -m config normal_window_border_color   off
yabai -m config insert_feedback_color
yabai -m config split_ratio                  0.50
yabai -m config auto_balance                 off
yabai -m config mouse_modifier               ctrl
yabai -m config mouse_action1                move
yabai -m config mouse_action2                resize
yabai -m config window_border_blur           off

# general space settings
yabai -m config layout                       bsp
yabai -m config top_padding                  01
yabai -m config bottom_padding               01
yabai -m config left_padding                 01
yabai -m config right_padding                01
yabai -m config window_gap                   0.5


# Rules
yabai -m rule --add app="^System Settings$" manage=off
yabai -m rule --add app="^Music$" manage=off
yabai -m rule --add app="^Docker$" manage=off
yabai -m rule --add app="^iTerm2$" manage=off

7. 動作の確認

skhdrc に設定したホットキーを試し、Yabai が正常に反応するか確認する。


最後に

上記のステップに従うことで、macOS で Yabaiskhd を実装し、キーボード操作ベースのウィンドウマネジメント体験を実現できます。
ぜひ試してみてください!

NISLab 小板研究室

Discussion