近来无事,凑着周末休息的时间,想折腾一下 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
玩过 linux 的差不多应该都听过 i3wm 吧。Yabai 可以看做是一款在 Mac Os 上的 i3wm
PS:
sudo yabai –install-sa一直失败。所以下面我就按我成功后的操作来记录了。# 安装yabaibrew install koekeishiya/formulae/yabai --HEAD# 安装 skhd brew install koekeishiya/formulae/skhd# 安装 jq -> 主要在寻找桌面和显示器的时候使用。brew install jq# 命令成功之后需要执行一下命令sudo yabai --install-sasudo yabai --load-sa# 下面会讲如何自动执行PS:安装完之后别着急启动。
我是直接把yabai 配置文件放在了 ``~/.config/yabai/`下。当然,这个目录是自己创建的=,=
mkdir ~/.config/yabai# 注意,在.config 下的话,用的是 yabairc 没有.哦cp /usr/local/opt/yabai/share/yabai/examples/yabairc ~/config/yabai/yabaircchmod u+x ~/config/yabai/yabaircyabai 配置文件可以放的位置
$XDG_CONFIG_HOME/yabai/yabairc$HOME/.config/yabai/yabairc$HOME/.yabairccp /usr/local/opt/yabai/share/yabai/examples/skhdrc ~/.skhdrcbrew services start yabai brew services start skhd第一次启动 skhd 和 yabai 之后,macOS 会提示是否允许两者访问辅助功能。在系统偏好设置->安装性与隐私->隐私中添加权限后,再执行一次上述命令,或者下面的命令即可
brew services restart yabai brew services restart skhd
启动后的效果图~

可以看到~~当前窗口是 Finder 在激活,后台窗口中都增加了透明度,这是我特别喜爱的一个功能~
接下来就上一下配置吧。这才是核心。至于怎么使用,看配置的注释就能看懂咯。玩过平铺式桌面的同学,肯定更容易上手。
#!/usr/bin/env sh# 这里参考了 yabai 的 wiki 。具体步骤下面讲sudo yabai --load-sayabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"# 窗口布局 bsp: 平铺 float: 浮动yabai -m config layout bsp# 默认拆分规则 first_child second_childyabai -m config window_placement second_child# 窗口间距设置yabai -m config top_padding 5yabai -m config bottom_padding 5yabai -m config left_padding 5yabai -m config right_padding 5yabai -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.9yabai -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=offyabai -m rule --add app="^提醒事项$" manage=offyabai -m rule --add app="^关于本机$" manage=offecho "yabai configuration loaded.."# ================================ 窗口设置 ================================# focus window : 激活窗口快捷键 h: 左 j: 下 k: 右 l: 上 alt - h : yabai -m window --focus westalt - j : yabai -m window --focus southalt - k : yabai -m window --focus northalt - l : yabai -m window --focus east # 交换窗口位置shift + alt - h : yabai -m window --swap westshift + alt - j : yabai -m window --swap southshift + alt - k : yabai -m window --swap northshift + alt - l : yabai -m window --swap east# 移动窗口位置shift + cmd - h : yabai -m window --warp westshift + cmd - j : yabai -m window --warp south# 因与IDEA shift + cmd + K push code 冲突,故注释了此快捷键# shift + cmd - k : yabai -m window --warp northshift + 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分屏左1ctrl + alt - d : yabai -m window --grid 1:3:0:0:1:1# 3分屏左2ctrl + alt - e : yabai -m window --grid 1:3:0:0:2:1# 3分屏中1ctrl + alt - f : yabai -m window --grid 1:3:1:0:1:1# 3分屏右2ctrl + alt - t : yabai -m window --grid 1:3:1:0:2:1# 3分屏右1ctrl + 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 screenalt - t : yabai -m window --toggle float;yabai -m window --grid 4:4:1:1:2:2alt - r : yabai -m space --rotate 90# 调整窗口大小ctrl + alt + cmd - left : yabai -m window --resize left:-50:0; yabai -m window --resize right:-50:0ctrl + alt + cmd - down : yabai -m window --resize bottom:0:50; yabai -m window --resize top:0:50ctrl + alt + cmd - up : yabai -m window --resize top:0:-50; yabai -m window --resize bottom:0:-50ctrl + alt + cmd - right : yabai -m window --resize right:50:0; yabai -m window --resize left:50:0# 重启 Yabaicmd + alt - r : /usr/bin/env osascript <<< "display notification \"正在重启 Yabai\" with title \"Yabai\""; launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"# ================================ 多桌面配置 ================================# 创建一个新桌面,并把当前活动的窗口发送到新桌面,并且自动跳转到新桌面 需要jq支持 brew install jqshift + 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 1alt - 2 : yabai -m space --focus 2alt - 3 : yabai -m space --focus 3alt - 4 : yabai -m space --focus 4alt - 5 : yabai -m space --focus 5alt - 6 : yabai -m space --focus 6alt - 7 : yabai -m space --focus 7alt - 8 : yabai -m space --focus 8alt - 9 : yabai -m space --focus 9# 关闭当前桌面cmd + alt - w : yabai -m space --destroy# 把窗口发送到桌面,并跟随过去 send window to desktop and follow focusshift + cmd - z : yabai -m window --space next; yabai -m space --focus nextshift + cmd - 1 : yabai -m window --space 1; yabai -m space --focus 1shift + cmd - 2 : yabai -m window --space 2; yabai -m space --focus 2shift + cmd - 3 : yabai -m window --space 3; yabai -m space --focus 3shift + cmd - 4 : yabai -m window --space 4; yabai -m space --focus 4shift + cmd - 5 : yabai -m window --space 5; yabai -m space --focus 5shift + cmd - 6 : yabai -m window --space 6; yabai -m space --focus 6shift + cmd - 7 : yabai -m window --space 7; yabai -m space --focus 7shift + cmd - 8 : yabai -m window --space 8; yabai -m space --focus 8shift + cmd - 9 : yabai -m window --space 9; yabai -m space --focus 9# ================================ APPS ================================# iTerm2cmd - 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 pipsudo visudo -f /private/etc/sudoers.d/yabai# 然后输入一下内容,其中 <user>为当前 mac 的用户名<user> ALL = (root) NOPASSWD: /usr/local/bin/yabai --load-sa# 之后在 yabairc 中添加以下命令即可,也就是上面的配置文件中的 345 行,已经添加完了sudo yabai --load-sayabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"至此,可以尽情的在 mac 上享受平铺式桌面的快感了~~