diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 2a714b2..ad63b9a 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -6,6 +6,7 @@ kernelPatches ? [ ], extraConfig ? "", sccacheDir ? "/var/cache/sccache", + sccacheServerUds ? "/run/sccache/server.sock", enforceSccache ? true, }: @@ -62,6 +63,7 @@ pkgs.callPackage ( pkgs.writeShellScriptBin name '' set -euo pipefail export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" fi @@ -74,6 +76,7 @@ pkgs.callPackage ( rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" fi @@ -83,6 +86,7 @@ pkgs.callPackage ( hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" fi @@ -131,18 +135,19 @@ pkgs.callPackage ( ] ; - # Start with clean stats so the build-phase check reports only this build. preBuild = (args.preBuild or "") + lib.optionalString enforceSccache '' - ${pkgs.sccache}/bin/sccache --start-server || true - ${pkgs.sccache}/bin/sccache --zero-stats || true + export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds} ''; buildPhase = if enforceSccache then '' runHook preBuild + export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds} export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" rm -f "$SCCACHE_ENFORCE_MARKER" make "''${makeFlags[@]}" "''${buildFlags[@]}" diff --git a/flake.nix b/flake.nix index 43b685f..e6b208f 100644 --- a/flake.nix +++ b/flake.nix @@ -113,6 +113,7 @@ "thek0tyara" ]; extra-sandbox-paths = [ + "/run/sccache" "/var/cache/sccache" ]; download-buffer-size = 160000000; @@ -121,6 +122,29 @@ # setgid, чтобы файлы/папки сохраняли группу nixbld "d /var/cache/sccache 2770 root nixbld - -" ]; + systemd.services.sccache = { + description = "Shared sccache server for Nix builds"; + after = [ "local-fs.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "simple"; + User = "root"; + Group = "nixbld"; + RuntimeDirectory = "sccache"; + RuntimeDirectoryMode = "0770"; + UMask = "0007"; + ExecStart = "${pkgs.sccache}/bin/sccache"; + Restart = "always"; + RestartSec = 2; + }; + environment = { + SCCACHE_DIR = "/var/cache/sccache"; + SCCACHE_SERVER_UDS = "/run/sccache/server.sock"; + SCCACHE_IDLE_TIMEOUT = "0"; + SCCACHE_START_SERVER = "1"; + SCCACHE_NO_DAEMON = "1"; + }; + }; boot = { loader = { systemd-boot.enable = true;