Initializes yabai on darwin

This commit is contained in:
willemml 2023-11-15 22:45:39 -08:00
parent 8305d2a247
commit 741385da20
Signed by: willemml
GPG key ID: C3DE5DF6198DACBD
3 changed files with 194 additions and 0 deletions

View file

@ -4,6 +4,8 @@
../modules/nix/link-inputs.nix
../modules/nix/use-flake-pkgs.nix
../users/willem/home/darwin.nix
../modules/yabai/default.nix
../modules/yabai/scripting-additions.nix
];
nix = {

View file

@ -0,0 +1,78 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) lists strings;
floating-apps = [
"System Settings"
"Software Update"
"Kodi"
"App Store"
"Activity Monitor"
"Calculator"
"Dictionary"
"mpv"
"Software Update"
];
floating-rules = lists.forEach floating-apps (
name: "yabai -m rule --add app='${name}' manage=off"
);
floating-rules-str = strings.concatStringsSep "\n" floating-rules;
in {
services.yabai = {
enable = true;
enableScriptingAddition = true;
config = {
window_placement = "second_child";
window_shadow = "on";
window_border = "off";
window_border_width = "2";
active_window_border_color = "0xff$CACTV";
normal_window_border_color = "0xff$CNORM";
insert_window_border_color = "0xff$CINSE";
mouse_follows_focus = "off";
focus_follows_mouse = "autofocus";
window_opacity = "off";
window_opacity_duration = "0.0";
active_window_opacity = "1.0";
normal_window_opacity = "0.90";
split_ratio = "0.50";
auto_balance = "off";
mouse_modifier = "ctrl";
mouse_action1 = "move";
mouse_action2 = "resize";
mouse_drop_action = "swap";
# Turning on breaks kodi
window_topmost = "off";
layout = "bsp";
top_padding = "10";
bottom_padding = "10";
left_padding = "10";
right_padding = "10";
window_gap = "10";
};
extraConfig =
floating-rules-str
+ "\n"
+ ''
yabai -m rule --add label="Finder" app="^Finder$" title="(Co(py|nnect)|Move|Info|Pref)" manage=off
yabai -m rule --add label="Safari" app="^Safari$" title="^(General|(Tab|Password|Website|Extension)s|AutoFill|Se(arch|curity)|Privacy|Advance)$" manage=off
yabai -m rule --add label="System Preferences" app="^System Preferences$" title=".*" manage=off
yabai -m rule --add label="About This Mac" app="System Information" title="About This Mac" manage=off
set +x
echo "yabai configuration loaded.."
'';
};
environment.systemPackages = [pkgs.yabai];
}

View file

@ -0,0 +1,114 @@
{
lib,
pkgs,
config,
...
}: {
services.yabai = {
enableScriptingAddition = true;
extraConfig = ''
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
sudo yabai --load-sa
'';
};
environment.etc = {
"sudoers.d/10-yabai".text = ''
%admin ALL=(root) NOPASSWD: ${pkgs.yabai}/bin/yabai --load-sa
'';
};
environment.systemPackages = [pkgs.skhd];
services.skhd.enable = true;
services.skhd.skhdConfig = let
yabai = "${pkgs.yabai}/bin/yabai";
# Don't use nix emacs. Homebrew has a better version
# emacs = "${pkgs.emacs}/bin/emacs";
kitty = "${pkgs.kitty}/bin/kitty";
# Handle any weird inversion bindings
cmd = "cmd";
ctrl = "ctrl";
in ''
# Prevent hide
cmd - h : :
cmd - m : :
rcmd - w : :
${ctrl} - return : ${kitty} --single-instance
# Close window
${cmd} + shift - c : osascript -e 'tell application "System Events" to perform action "AXPress" of (first button whose subrole is "AXCloseButton") of (first window whose subrole is "AXStandardWindow") of (first process whose frontmost is true)'
# Restart yabai
${cmd} + shift - r : ${yabai} --restart-service
# Toggle window split type
# ${ctrl} - v : ${yabai} -m window --toggle split
# Changes insertion modes
${ctrl} - h : ${yabai} -m window --insert east
${ctrl} - v : ${yabai} -m window --insert south
# Moves around windows
${ctrl} - left : ${yabai} -m window --focus west
${ctrl} - down : ${yabai} -m window --focus south
${ctrl} - up : ${yabai} -m window --focus north
${ctrl} - right : ${yabai} -m window --focus east
# Moves windows
shift + ${ctrl} - left : ${yabai} -m window --warp west
shift + ${ctrl} - down : ${yabai} -m window --warp south
shift + ${ctrl} - up : ${yabai} -m window --warp north
shift + ${ctrl} - right : ${yabai} -m window --warp east
# Warps window to space
shift + ${ctrl} - 1 : ${yabai} -m window --space 1 && ${yabai} -m space --focus 1
shift + ${ctrl} - 2 : ${yabai} -m window --space 2 && ${yabai} -m space --focus 2
shift + ${ctrl} - 3 : ${yabai} -m window --space 3 && ${yabai} -m space --focus 3
shift + ${ctrl} - 4 : ${yabai} -m window --space 4 && ${yabai} -m space --focus 4
shift + ${ctrl} - 5 : ${yabai} -m window --space 5 && ${yabai} -m space --focus 5
shift + ${ctrl} - 6 : ${yabai} -m window --space 6 && ${yabai} -m space --focus 6
shift + ${ctrl} - 7 : ${yabai} -m window --space 7 && ${yabai} -m space --focus 7
shift + ${ctrl} - 8 : ${yabai} -m window --space 8 && ${yabai} -m space --focus 8
shift + ${ctrl} - 8 : ${yabai} -m window --space 9 && ${yabai} -m space --focus 9
shift + ${ctrl} - 0 : ${yabai} -m window --space 10 && ${yabai} -m space --focus 10
# Resize windows
${cmd} - left : ${yabai} -m window --resize left:-50:0; \
${yabai} -m window --resize right:-50:0
${cmd} - down : ${yabai} -m window --resize bottom:0:50; \
${yabai} -m window --resize top:0:50
${cmd} - up : ${yabai} -m window --resize top:0:-50; \
${yabai} -m window --resize bottom:0:-50
${cmd} - right : ${yabai} -m window --resize right:50:0; \
${yabai} -m window --resize left:50:0
# TODO: Add this back in when scripting addons works
# Changes spaces
${ctrl} - 1 : ${yabai} -m space --focus 1
${ctrl} - 2 : ${yabai} -m space --focus 2
${ctrl} - 3 : ${yabai} -m space --focus 3
${ctrl} - 4 : ${yabai} -m space --focus 4
${ctrl} - 5 : ${yabai} -m space --focus 5
${ctrl} - 6 : ${yabai} -m space --focus 6
${ctrl} - 7 : ${yabai} -m space --focus 7
${ctrl} - 8 : ${yabai} -m space --focus 8
${ctrl} - 9 : ${yabai} -m space --focus 9
${ctrl} - 0 : ${yabai} -m space --focus 10
# Make window native fullscreen
${ctrl} - f : ${yabai} -m window --toggle zoom-fullscreen
shift + ${ctrl} - f : ${yabai} -m window --toggle native-fullscreen
# Float / Unfloat window
${ctrl} + shift - space : \
${yabai} -m window --toggle float; \
${yabai} -m window --toggle border
# Open Emacs
${ctrl} + shift - n : ${config.home-manager.users.willem.programs.emacs.finalPackage}/bin/emacsclient -c -n
# Open Firefox window
${ctrl} + shift - f : /Applications/Firefox.app/Contents/MacOS/firefox -new-window
'';
}