mirror of
https://github.com/willemml/dotfiles.nix.git
synced 2025-04-12 11:17:17 +00:00
Initializes yabai on darwin
This commit is contained in:
parent
8305d2a247
commit
741385da20
3 changed files with 194 additions and 0 deletions
|
@ -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 = {
|
||||
|
|
78
nixos/modules/yabai/default.nix
Normal file
78
nixos/modules/yabai/default.nix
Normal 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];
|
||||
}
|
114
nixos/modules/yabai/scripting-additions.nix
Normal file
114
nixos/modules/yabai/scripting-additions.nix
Normal 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
|
||||
'';
|
||||
}
|
Loading…
Add table
Reference in a new issue