52 lines
1.6 KiB
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'';
|
|
};
|
|
};
|
|
}
|