nix/darwin/yabai.nix

52 lines
1.6 KiB
Nix

{
config,
pkgs,
lib,
user,
dots,
...
}:
{
options.custom.gui = with lib; {
yabai = {
enable = mkEnableOption "Enable yabai";
};
};
config = lib.mkIf (config.custom.gui.yabai.enable && pkgs.stdenv.isDarwin) {
# csrutil enable --without fs --without debug --without nvram
# nvram boot-args=-arm64e_preview_abi
# Generate sudoers file with SHA256 hash computed at activation time
system.activationScripts.yabaiSudoers.text = ''
echo "setting up yabai sudoers..." >&2
YABAI_BIN="${pkgs.yabai}/bin/yabai"
YABAI_HASH=$(shasum -a 256 "$YABAI_BIN" | ${pkgs.gawk}/bin/awk '{print $1}')
echo "${user} ALL = (root) NOPASSWD: sha256:$YABAI_HASH $YABAI_BIN --load-sa" > /etc/sudoers.d/yabai
chmod 0440 /etc/sudoers.d/yabai
'';
system.activationScripts.yabaiScriptingAddition.text = ''
echo "loading yabai scripting addition..." >&2
sudo ${pkgs.yabai}/bin/yabai --load-sa
'';
hm.home.packages = with pkgs; [
yabai
];
hm.xdg.configFile."yabai".source = config.hm.lib.file.mkOutOfStoreSymlink "${dots}/config/yabai";
hm.home.activation.yabaiService = config.hm.lib.dag.entryAfter [ "writeBoundary" ] ''
echo "Restarting yabai service..." >&2
$DRY_RUN_CMD ${pkgs.yabai}/bin/yabai --uninstall-service || true
$DRY_RUN_CMD ${pkgs.yabai}/bin/yabai --install-service
$DRY_RUN_CMD ${pkgs.yabai}/bin/yabai --start-service
'';
hm.home.shellAliases = {
restart-yabai = ''${pkgs.yabai}/bin/yabai --uninstall-service || ${pkgs.yabai}/bin/yabai --install-service || ${pkgs.yabai}/bin/yabai --start-service'';
};
};
}