Mac下的平鋪式桌面 - Yabai

葉雲軒發表於2022-03-06

Mac下的平鋪式桌面 - Yabai

近來無事,湊著週末休息的時間,想折騰一下 Mac。很久之前就有朋友給我推薦過一款名為“Yabai”的平鋪式桌面管理軟體,今天,就折騰起來了。

老樣子,先上配置。因為這次折騰時,有一點意外情況。好在通過 GitHub 的朋友給解決掉了。

PS:遺憾的是出差在外,網路不佳,狀態列(一個類似 i3-status 的東西)一直 clone 不下來。所以就沒有狀態列的折騰日記了~

系統 MacOS Monterey 12.2.1 系統
軟體包管理器 Homebrew 3.4.0 軟體包管理器
Yabai 3.3.10 平鋪式桌面管理器
skhd 0.3.5 快捷鍵繫結

什麼是 Yabai

Yabai

玩過 linux 的差不多應該都聽過 i3wm 吧。Yabai 可以看做是一款在 Mac Os 上的 i3wm

安裝

PS:

  1. 我就是在這裡除了意外。因為我是按文件直接安裝的,但是在 Monterey 中sudo yabai –install-sa一直失敗。所以下面我就按我成功後的操作來記錄了。
  2. 此次安裝的前提是預設已經安裝過 Homebrew 了。至於國內怎麼安裝 Homebrew。那就自己搜吧,有時間的話,我就在記錄一篇到博文中~~
# 安裝yabai
brew install koekeishiya/formulae/yabai --HEAD

# 安裝 skhd 
brew install koekeishiya/formulae/skhd

# 安裝 jq -> 主要在尋找桌面和顯示器的時候使用。
brew install jq

# 命令成功之後需要執行一下命令
sudo yabai --install-sa
sudo yabai --load-sa
# 下面會講如何自動執行

配置

PS:安裝完之後彆著急啟動。

  1. 建立 yabai 的配置檔案
  2. 建立 skhd 的配置檔案
  3. 啟動 yabai
  4. 啟動 shkd

yabai 配置檔案

我是直接把yabai 配置檔案放在了 ``~/.config/yabai/`下。當然,這個目錄是自己建立的=,=

mkdir ~/.config/yabai

# 注意,在.config 下的話,用的是 yabairc 沒有.哦
cp /usr/local/opt/yabai/share/yabai/examples/yabairc ~/config/yabai/yabairc

chmod u+x ~/config/yabai/yabairc

yabai 配置檔案可以放的位置

  • $XDG_CONFIG_HOME/yabai/yabairc
  • $HOME/.config/yabai/yabairc
  • $HOME/.yabairc
  • 自定義位置,手動載入

skhd 配置檔案

cp /usr/local/opt/yabai/share/yabai/examples/skhdrc ~/.skhdrc

啟動 yabai

brew services start yabai 
brew services start skhd

第一次啟動 skhd 和 yabai 之後,macOS 會提示是否允許兩者訪問輔助功能。在系統偏好設定->安裝性與隱私->隱私中新增許可權後,再執行一次上述命令,或者下面的命令即可

brew services restart yabai 
brew services restart skhd

啟動後的效果圖~

可以看到~~當前視窗是 Finder 在啟用,後臺視窗中都增加了透明度,這是我特別喜愛的一個功能~

接下來就上一下配置吧。這才是核心。至於怎麼使用,看配置的註釋就能看懂咯。玩過平鋪式桌面的同學,肯定更容易上手。

配置篇

yabairc

#!/usr/bin/env sh

# 這裡參考了 yabai 的 wiki 。具體步驟下面講
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"

# 視窗布局 bsp: 平鋪 float: 浮動
yabai -m config layout                       bsp
# 預設拆分規則 first_child second_child
yabai -m config window_placement             second_child
# 視窗間距設定
yabai -m config top_padding                  5
yabai -m config bottom_padding               5
yabai -m config left_padding                 5
yabai -m config right_padding                5
yabai -m config window_gap                   4
# 自動平衡所有視窗始終佔據相同的空間
yabai -m config auto_balance                 off
# 如果禁用自動平衡,此項屬性定義的是新視窗占用的空間量。0.5意為舊視窗占用50%
yabai -m config split_ratio                 0.50
# 滑鼠修飾鍵 意思就是按著這個鍵就可以使用滑鼠單獨修改視窗大小了
yabai -m config mouse_modifier               fn
# fn + 左鍵 移動
yabai -m config mouse_action1                move
# fn + 右鍵 
yabai -m config mouse_action2                resize
# 焦點跟隨滑鼠 預設off: 關閉  autoraise:自動提升 autofocus: 自動對焦
yabai -m config focus_follows_mouse          autofocus
# 設定滑鼠是否跟隨當前活動視窗 預設 off: 關閉 on: 開啟
yabai -m config mouse_follows_focus          on

# 浮動視窗問題在頂部
yabai -m config window_topmost               on
# 修改視窗陰影 on: 開啟 off: 關閉 float: 只顯示浮動視窗的陰影
yabai -m config window_shadow                float

# 視窗透明度設定
yabai -m config window_opacity               on
# 配置活動視窗不透明度
yabai -m config active_window_opacity        1.0             
yabai -m config normal_window_opacity        0.9
yabai -m config window_opacity_duration      0.0

# 在主顯示器上的每個空間頂部新增 20 填充 底部新增 0 填充
# yabai -m config external_bar main:20:0
# 在所有顯示器上的每個空間頂部新增 0 填充 底部新增 0 填充
yabai -m config external_bar all:0:5

# ================================ 規則 ================================
# 開啟系統偏好設定,不使用平鋪模式
yabai -m rule --add app="^系統偏好設定$" manage=off
yabai -m rule --add app="^提醒事項$" manage=off
yabai -m rule --add app="^關於本機$" manage=off

echo "yabai configuration loaded.."

.skhdrc

# ================================ 視窗設定 ================================
# focus window : 啟用視窗快捷鍵  h: 左  j: 下  k: 右 l: 上 
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 
# 交換視窗位置
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
# 移動視窗位置
shift + cmd - h : yabai -m window --warp west
shift + cmd - j : yabai -m window --warp south
# 因與IDEA shift + cmd + K push code 衝突,故註釋了此快捷鍵
# shift + cmd - k : yabai -m window --warp north
shift + cmd - l : yabai -m window --warp east
# 浮動視窗設定 參考了Magent預設設定。因為之前用習慣了。。。。
# 恢復原始視窗大小
ctrl + alt - 0 : yabai -m space --balance
# 把浮動視窗左右平分整個螢幕  rows:cols:start-x:star-y:width:height  m行:n列:x:y:w:h
# 最大化
ctrl + alt - return : yabai -m window --grid 1:1:0:0:1:1
# 2分屏上
ctrl + alt - up     : yabai -m window --grid 2:1:0:0:2:1
# 2分屏左
ctrl + alt - left   : yabai -m window --grid 1:2:0:0:1:1
# 2分屏右
ctrl + alt - right  : yabai -m window --grid 1:2:1:1:1:1
# 2分屏下
ctrl + alt - down   : yabai -m window --grid 2:1:0:1:2:1
# 4分屏左上
ctrl + alt - u : yabai -m window --grid 2:2:0:0:1:1
# 4分屏右上
ctrl + alt - i : yabai -m window --grid 2:2:0:1:1:1
# 4分屏左下
ctrl + alt - j : yabai -m window --grid 2:2:1:0:1:1
# 4分屏右下
ctrl + alt - k : yabai -m window --grid 2:2:1:1:1:1
# 3分屏左1
ctrl + alt - d : yabai -m window --grid 1:3:0:0:1:1
# 3分屏左2
ctrl + alt - e : yabai -m window --grid 1:3:0:0:2:1
# 3分屏中1
ctrl + alt - f : yabai -m window --grid 1:3:1:0:1:1
# 3分屏右2
ctrl + alt - t : yabai -m window --grid 1:3:1:0:2:1
# 3分屏右1
ctrl + alt - g : yabai -m window --grid 1:3:3:0:1:1
# 9分屏居中
ctrl + alt - c : yabai -m window --grid 3:3:1:1:1:1

# 浮動/不浮動視窗 float / unfloat window and center on screen
alt - t : yabai -m window --toggle float;yabai -m window --grid 4:4:1:1:2:2

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

# 調整視窗大小
ctrl + alt + cmd - left : yabai -m window --resize left:-50:0; yabai -m window --resize right:-50:0
ctrl + alt + cmd - down : yabai -m window --resize bottom:0:50; yabai -m window --resize top:0:50
ctrl + alt + cmd - up : yabai -m window --resize top:0:-50; yabai -m window --resize bottom:0:-50
ctrl + alt + cmd - right : yabai -m window --resize right:50:0; yabai -m window --resize left:50:0

# 重啟 Yabai
cmd + alt - r : /usr/bin/env osascript <<< "display notification \"正在重啟 Yabai\" with title \"Yabai\""; launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"

# ================================ 多桌面配置  ================================
# 建立一個新桌面,並把當前活動的視窗傳送到新桌面,並且自動跳轉到新桌面 需要jq支援 brew install jq
shift + cmd - n : yabai -m space --create && index="$(yabai -m query --spaces --display | jq '.| length')" && yabai -m window --space "${index}" && yabai -m space --focus "${index}"

# 切換回最近的一個桌面
alt - x : yabai -m space --focus recent
# 切換回第一個桌面
alt - 1 : yabai -m space --focus 1
alt - 2 : yabai -m space --focus 2
alt - 3 : yabai -m space --focus 3
alt - 4 : yabai -m space --focus 4
alt - 5 : yabai -m space --focus 5
alt - 6 : yabai -m space --focus 6
alt - 7 : yabai -m space --focus 7
alt - 8 : yabai -m space --focus 8
alt - 9 : yabai -m space --focus 9
# 關閉當前桌面
cmd + alt - w : yabai -m space --destroy

# 把視窗傳送到桌面,並跟隨過去 send window to desktop and follow focus
shift + cmd - z : yabai -m window --space next; yabai -m space --focus next
shift + cmd - 1 : yabai -m window --space  1; yabai -m space --focus 1
shift + cmd - 2 : yabai -m window --space  2; yabai -m space --focus 2
shift + cmd - 3 : yabai -m window --space  3; yabai -m space --focus 3
shift + cmd - 4 : yabai -m window --space  4; yabai -m space --focus 4
shift + cmd - 5 : yabai -m window --space  5; yabai -m space --focus 5
shift + cmd - 6 : yabai -m window --space  6; yabai -m space --focus 6
shift + cmd - 7 : yabai -m window --space  7; yabai -m space --focus 7
shift + cmd - 8 : yabai -m window --space  8; yabai -m space --focus 8
shift + cmd - 9 : yabai -m window --space  9; yabai -m space --focus 9

# ================================ APPS ================================
# iTerm2
cmd - return : open -a iTerm

# ================================ 多顯示器配置 ================================
# focus monitora : 
# ctrl + alt - z  : yabai -m display --focus prev
# ctrl + alt - 3  : yabai -m display --focus 3

# send window to monitor and follow focus
# ctrl + cmd - c  : yabai -m window --display next; yabai -m display --focus next
# ctrl + cmd - 1  : yabai -m window --display 1; yabai -m display --focus 1

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

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

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

# set insertion point in focused container
# ctrl + alt - h : yabai -m window --insert west

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

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

# 浮動/不浮動視窗 float / unfloat window and center on screen
#alt - t : yabai -m window --toggle float;yabai -m window --grid 4:4:1:1:2:2

# toggle sticky(+float), topmost, picture-in-picture
# alt - p : yabai -m window --toggle sticky;\
#           yabai -m window --toggle topmost;\
#           yabai -m window --toggle pip

MacOS BigSur以上版本啟動自動載入指令碼步驟

sudo visudo -f /private/etc/sudoers.d/yabai

# 然後輸入一下內容,其中 <user>為當前 mac 的使用者名稱
<user> ALL = (root) NOPASSWD: /usr/local/bin/yabai --load-sa
# 之後在 yabairc 中新增以下命令即可,也就是上面的配置檔案中的 345 行,已經新增完了

sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"

至此,可以盡情的在 mac 上享受平鋪式桌面的快感了~~

相關文章