diff --git a/modules/base/macos-vram.nix b/modules/base/macos-vram.nix index 362b46b..ae1d2de 100644 --- a/modules/base/macos-vram.nix +++ b/modules/base/macos-vram.nix @@ -3,6 +3,14 @@ with lib; let cfg = config.modules.vram; + + setWiredLimitMb = optionalString (cfg.wiredLimit != null) '' + wired_memsize_mb=$(($(sysctl -n hw.memsize) / 1024 / 1024)) + sysctl -w iogpu.wired_limit_mb="$((wired_memsize_mb - ${toString (cfg.wiredLimit * 1024)}))" + ''; + setWiredLowWaterMarkMb = optionalString (cfg.wiredLowWatermark != null) '' + sysctl -w iogpu.wired_lwm_mb="$((${toString (cfg.wiredLowWatermark * 1024)}))" + ''; in helpers.darwinAttrs { options.modules.vram = { wiredLimit = mkOption { @@ -19,18 +27,18 @@ in helpers.darwinAttrs { }; config = mkIf (cfg.wiredLimit != null || cfg.wiredLowWatermark != null) { - system.activationScripts.postActivation.text = let - setWiredLimitMb = optionalString (cfg.wiredLimit != null) '' - wired_memsize_mb=$(($(sysctl -n hw.memsize) / 1024 / 1024)) - sysctl -w iogpu.wired_limit_mb="$((wired_memsize_mb - ${toString (cfg.wiredLimit * 1024)}))" - ''; - setWiredLowWaterMarkMb = optionalString (cfg.wiredLowWatermark != null) '' - sysctl -w iogpu.wired_lwm_mb="$((${toString (cfg.wiredLowWatermark * 1024)}))" - ''; - in '' + system.activationScripts.postActivation.text = '' ${setWiredLimitMb} ${setWiredLowWaterMarkMb} ''; + + launchd.daemons."sysctl-wired-limit" = { + serviceConfig.RunAtLoad = true; + script = '' + ${setWiredLimitMb} + ${setWiredLowWaterMarkMb} + ''; + }; }; }