
Tiling window manager macOS: yabai và skhd thay đổi workflow hoàn toàn
Trải nghiệm quản lý cửa sổ mặc định trên macOS thường khiến lập trình viên và người dùng chuyên nghiệp cảm thấy hạn chế. yabai là một tiling window manager dành cho macOS hoạt động giống như i3 hay bspwm trên Linux, kết hợp với skhd – daemon hotkey mạnh mẽ, cho phép bạn kiểm soát mọi khía cạnh của màn hình chỉ bằng bàn phím. Bộ đôi này biến macOS thành môi trường làm việc năng suất cực đại mà không cần chuột.

Tại sao cần tiling window manager trên macOS?
macOS Mission Control và Stage Manager cung cấp một số tính năng quản lý cửa sổ cơ bản, nhưng thiếu linh hoạt và không hỗ trợ keyboard-driven workflow. Các nhà phát triển đã quen với workflow trên Linux (i3, sway, Hyprland) thường thấy khó chịu khi chuyển sang Mac. yabai lấp đầy khoảng trống này bằng cách mang tiling tự động, quản lý workspace ảo, và scriptable API đến macOS.
Khác với các giải pháp như Rectangle, Magnet hay Amethyst, yabai hoạt động ở cấp độ hệ thống thông qua macOS Accessibility API và SIP (System Integrity Protection) partial disable. Điều này cho phép yabai quản lý cửa sổ một cách mượt mà, tự động chia layout, và duy trì layout khi khởi động lại ứng dụng.
Cài đặt yabai và skhd
Trước khi cài đặt, cần tắt một phần SIP (csrutil) để yabai có thể inject code vào Dock process. Trên Apple Silicon Mac:
- Khởi động vào Recovery Mode (Command+R khi boot)
- Mở Terminal, chạy:
csrutil enable --without fs --without debug --without nvram - Khởi động lại máy
Sau đó cài đặt qua Homebrew:
brew install koekeishiya/formulae/yabai
brew install koekeishiya/formulae/skhd
brew services start yabai
brew services start skhd
Khởi chạy yabai và skhd lần đầu sẽ yêu cầu cấp quyền Accessibility trong System Settings > Privacy & Security > Accessibility.

Cấu hình yabai cơ bản
File cấu hình chính là ~/.config/yabai/yabairc (shell script) hoặc yabai.yml (YAML – khuyến nghị). Ví dụ cấu hình phổ biến:
# yabai.yml
global:
mouse_follows_focus: true
focus_follows_mouse: autoraise
window_placement: second_child
window_topmost: false
window_shadow: float
window_opacity: true
window_opacity_duration: 0.0
active_window_opacity: 1.0
normal_window_opacity: 0.9
layout:
type: bsp
padding:
top: 12
bottom: 12
left: 12
right: 12
gap: 8
space:
layout: bsp
display: main
Layout bsp (Binary Space Partitioning) tự động chia màn hình theo nhị phân mỗi khi mở cửa sổ mới. Các layout khác: stack, float.
Quản lý hotkey với skhd
skhd xử lý tất cả các phím tắt toàn cục. File cấu hình ~/.config/skhd/skhdrc:
# Focus window
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
# Move window
alt + shift - h : yabai -m window --warp west
alt + shift - j : yabai -m window --warp south
alt + shift - k : yabai -m window --warp north
alt + shift - l : yabai -m window --warp east
# Toggle float
alt - t : yabai -m window --toggle float
# Resize
alt + ctrl - h : yabai -m window --resize left:-50:0
alt + ctrl - l : yabai -m window --resize right:50:0
alt + ctrl - j : yabai -m window --resize bottom:0:50
alt + ctrl - k : yabai -m window --resize top:0:-50
# Space management
alt - 1 : yabai -m space --focus 1
alt - 2 : yabai -m space --focus 2
alt - 3 : yabai -m space --focus 3
# Send window to space
alt + shift - 1 : yabai -m window --space 1
alt + shift - 2 : yabai -m window --space 2
Tích hợp với SketchyBar và status bar
yabai có thể tích hợp với SketchyBar – một status bar hoàn toàn tùy chỉnh được viết bằng Lua. Điều này cho phép hiển thị thông tin workspace, window title, system stats ngay trên thanh menu bar mà không cần ứng dụng thứ ba.
Cài đặt SketchyBar:
brew install felixkratz/formulae/sketchybar
brew services start sketchybar
Sau đó cấu hình script Lua để hiển thị các space yabai, active window title, CPU/RAM usage, v.v.
Các quy tắc ứng dụng (rules)
Một số ứng dụng không phù hợp với tiling (System Preferences, Calculator, các dialog popup). Sử dụng rules để loại trừ:
yabai -m rule --add app="^System Settings$" manage=off
yabai -m rule --add app="^Calculator$" manage=off
yabai -m rule --add app="^Preview$" manage=off
yabai -m rule --add title="Preferences" manage=off
yabai -m rule --add title="Settings" manage=off
Điều này đảm bảo các cửa sổ hệ thống luôn ở chế độ float, không bị tiling tự động.
Scripting và automation
yabai cung cấp CLI và message API cho phép viết script tự động hoá phức tạp. Ví dụ: tự động move terminal vào space 2 khi mở, hoặc resize tất cả cửa sổ Chrome thành layout 70/30.
Kết hợp với Hammerspoon (Lua automation cho macOS), bạn có thể tạo các workflow như: auto-arrange windows khi kết nối màn hình ngoài, hoặc switch layout tùy theo ứng dụng đang active.
Kết luận
yabai và skhd mang trải nghiệm tiling window manager chuyên nghiệp từ Linux đến macOS một cách hoàn chỉnh. Mặc dù cài đặt ban đầu đòi hỏi một chút công sức (tắt SIP một phần, cấu hình file), nhưng lợi ích về năng suất là rất lớn: không còn chuột, không còn kéo thả cửa sổ, mọi thao tác chỉ cần vài phím tắt.
Nếu bạn là developer, sysadmin, hoặc bất kỳ ai dành phần lớn thời gian làm việc trên terminal và editor, yabai + skhd là sự thay đổi game-changer cho workflow hàng ngày trên Mac. Cộng đồng yabai trên GitHub và Discord rất hoạt động, luôn sẵn sàng hỗ trợ khi bạn gặp vấn đề trong quá trình cấu hình.
Nguồn tham khảo
- yabai GitHub Repository – Tiling window manager chính thức
- skhd GitHub Repository – Simple hotkey daemon
- FelixKratz dotfiles – Cấu hình SketchyBar và yabai
- Hammerspoon – Lua automation cho macOS
