From 0b9c676fc479671763744a31afae4d673daca313 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Sun, 15 Mar 2026 09:49:53 +0200 Subject: [PATCH 01/18] wezterm caseless search --- home.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.nix b/home.nix index ee3f644..b698aee 100644 --- a/home.nix +++ b/home.nix @@ -900,6 +900,9 @@ extraConfig = '' local wezterm = require 'wezterm' + keys = { { key = 'F', mods = 'CTRL|SHIFT', action = wezterm.action.Search({ CaseInSensitiveString = "" }) } } + + local config = wezterm.config_builder() config.default_prog = { "fish", "--login" --, "-c", "tmux attach -t dev || tmux new -s dev" From 20828a09fc9061a61ae9bd8bfb0a118e5a2dfd88 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Sun, 15 Mar 2026 09:50:52 +0200 Subject: [PATCH 02/18] kernel bump --- custom/modules/default.nix | 9 +++------ flake.nix | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index 9c06295..38ab417 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -4,13 +4,9 @@ kernel-src, ... }: - -let - linuxMainline = import ./kernel.nix { inherit pkgs lib kernel-src; }; -in { boot = { - kernelPackages = pkgs.linuxPackagesFor linuxMainline; + kernelPackages = pkgs.linuxPackagesFor (import ./kernel.nix { inherit pkgs lib kernel-src; }); kernelPatches = [ { name = "gpu"; @@ -77,10 +73,11 @@ in ); } { - name = "network"; + name = "network and wireless"; structuredExtraConfig = ( with lib.kernel; { + BT = no; # VLAN_8021Q = no; } ); diff --git a/flake.nix b/flake.nix index da4ccb7..425dcc1 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,8 @@ intel-hw.url = "github:MordragT/nixos"; nix-flatpak.url = "github:gmodena/nix-flatpak/latest"; kernel-src = { - # url = "git+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git?ref=master"; - url = "git+https://gitlab.freedesktop.org/drm/tip.git?rev=6884fe03ff2bc5a2f501ba4710f950dd4933ac84&shallow=1"; + # url = "git+https://gitlab.freedesktop.org/drm/tip.git?shallow=1"; + url = "git+https://gitlab.freedesktop.org/drm/tip.git?rev=bbe6ae2e40f59b05f04a75989b3b3bbb005342a2&shallow=1"; flake = false; }; sccache = { From 6e63bb0a9068f0a04df4e7d15754bb3604c53efd Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Tue, 17 Mar 2026 03:57:48 +0200 Subject: [PATCH 03/18] LET'S GO GAMBLING!!!!!! --- configuration.nix | 2 +- custom/modules/kernel.nix | 21 +- custom/override.nix | 523 +++++++++++++++++++++++++++++++++----- flake.lock | 62 ++--- flake.nix | 10 +- 5 files changed, 521 insertions(+), 97 deletions(-) diff --git a/configuration.nix b/configuration.nix index c65d8bc..6832da4 100644 --- a/configuration.nix +++ b/configuration.nix @@ -178,7 +178,7 @@ gamescope telegram-desktop ladybird - # krita # BOOST BROKE, FUCK + krita meld pavucontrol pwvucontrol diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 6d67533..7956fa7 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -5,7 +5,7 @@ structuredExtraConfig ? { }, kernelPatches ? [ ], extraConfig ? "", - sccacheDir ? "/var/cache/sccache", + sccacheDir ? "/var/cache/sccache/nix-builds/kernel", sccacheServerUds ? null, enforceSccache ? true, }: @@ -57,12 +57,17 @@ pkgs.callPackage ( realHostLd = lib.getExe' buildLlvm.lld "ld.lld"; realRustc = lib.getExe' rust "rustc"; realHostRustc = realRustc; + sccacheConfig = pkgs.writeText "kernel-sccache.conf" '' + [cache.disk] + dir = "${sccacheDir}" + size = "100G" + ''; mkSccacheWrapper = name: compiler: pkgs.writeShellScriptBin name '' set -euo pipefail - export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" @@ -75,7 +80,7 @@ pkgs.callPackage ( hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" @@ -85,7 +90,7 @@ pkgs.callPackage ( hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" @@ -138,7 +143,9 @@ pkgs.callPackage ( preBuild = (args.preBuild or "") + lib.optionalString enforceSccache '' - export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} + chmod 0777 ${lib.escapeShellArg sccacheDir} || true + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} ''; @@ -146,7 +153,9 @@ pkgs.callPackage ( if enforceSccache then '' runHook preBuild - export SCCACHE_DIR=${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} + chmod 0777 ${lib.escapeShellArg sccacheDir} || true + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" rm -f "$SCCACHE_ENFORCE_MARKER" diff --git a/custom/override.nix b/custom/override.nix index 711198c..ad13ce9 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -1,8 +1,245 @@ final: prev: let winePkg = final.wineWow64Packages.full; + sandboxSccacheDir = "/var/cache/sccache/nix-builds/packages"; + sharedSccacheConfig = final.writeText "sccache.conf" '' + [cache.disk] + dir = "${sandboxSccacheDir}" + size = "100G" + ''; + versionBumpAttrs = + oldVersion: version: attrs: + if final.lib.versionOlder oldVersion version then attrs else { }; + modify = + target: f: + if target ? overridePythonAttrs then + target.overridePythonAttrs f + else if target ? overrideAttrs then + target.overrideAttrs f + else if target ? overrideScope then + target.overrideScope f + else + throw "modify: target does not support overridePythonAttrs, overrideAttrs, or overrideScope"; + mkSccacheLauncher = + { + name, + sccacheDir ? null, + sccacheServerUds ? null, + sccacheCacheSize ? "100G", + noDaemon ? false, + passthroughWrappedCompiler ? false, + }: + let + sccacheConfig = final.writeText "${name}-config" '' + [cache.disk] + dir = "${if sccacheDir != null then sccacheDir else sandboxSccacheDir}" + size = "${sccacheCacheSize}" + ''; + effectiveSccacheConfig = + if sccacheDir == null && sccacheCacheSize == "100G" then sharedSccacheConfig else sccacheConfig; + in + final.writeShellScriptBin name '' + is_cmake_derivation() { + case " ''${nativeBuildInputs:-} ''${propagatedNativeBuildInputs:-} " in + *"/cmake-"*) return 0 ;; + esac + + [ -n "''${cmakeFlags:-}" ] || [ -n "''${cmakeDir:-}" ] || [ -n "''${cmakeBuildType:-}" ] + } + + is_cmake_probe_invocation() { + local arg + for arg in "$@"; do + case "$arg" in + *CMakeFiles/*CompilerId*|*CMakeFiles/CMakeTmp/*|*CMakeScratch/*) + return 0 + ;; + esac + done + + return 1 + } + + export SCCACHE_CONF=${final.lib.escapeShellArg effectiveSccacheConfig} + unset SCCACHE_START_SERVER + ${final.lib.optionalString noDaemon '' + export SCCACHE_NO_DAEMON=1 + unset SCCACHE_SERVER_UDS + ''} + ${final.lib.optionalString (!noDaemon && sccacheServerUds != null) '' + export SCCACHE_SERVER_UDS=${final.lib.escapeShellArg sccacheServerUds} + ''} + if [ "$#" -eq 0 ] || [ "''${1#-}" != "$1" ]; then + exec ${final.sccache}/bin/sccache "$@" + fi + + compiler="$1" + shift + + if [ "''${SCCACHE_WRAPPED_COMPILER_PASSTHROUGH:-}" = 1 ] || { + is_cmake_derivation && is_cmake_probe_invocation "$@" + }; then + exec "$compiler" "$@" + fi + + ${final.lib.optionalString passthroughWrappedCompiler '' + export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 + ''} + exec ${final.sccache}/bin/sccache "$compiler" "$@" + ''; + buildSccacheLauncher = mkSccacheLauncher { + name = "build-sccache"; + }; + mkBuildSccacheAttrs = + old: + { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ buildSccacheLauncher ]; + + preConfigure = (old.preConfigure or "") + '' + + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} + chmod 0777 ${final.lib.escapeShellArg sandboxSccacheDir} || true + export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" + export SCCACHE_IDLE_TIMEOUT=0 + unset SCCACHE_NO_DAEMON + mkdir -p "$(dirname "$SCCACHE_SERVER_UDS")" + if ! ${buildSccacheLauncher}/bin/build-sccache --show-stats >/dev/null 2>&1; then + rm -f "$SCCACHE_SERVER_UDS" + if ! ${buildSccacheLauncher}/bin/build-sccache --start-server >/tmp/sccache-start.log 2>&1; then + if ! grep -Fq "Address already in use" /tmp/sccache-start.log; then + cat /tmp/sccache-start.log >&2 + exit 1 + fi + fi + fi + ''; + + postBuild = (old.postBuild or "") + '' + + ${buildSccacheLauncher}/bin/build-sccache --show-stats --stats-format text || true + ${buildSccacheLauncher}/bin/build-sccache --stop-server || true + ''; + }; + mkCmakeSccacheAttrs = + old: + let + sccacheLauncher = mkSccacheLauncher { + name = "cmake-sccache"; + passthroughWrappedCompiler = true; + }; + in + { + cmakeFlags = (old.cmakeFlags or [ ]) ++ [ + "-DCMAKE_C_COMPILER_LAUNCHER=${sccacheLauncher}/bin/cmake-sccache" + "-DCMAKE_CXX_COMPILER_LAUNCHER=${sccacheLauncher}/bin/cmake-sccache" + ]; + + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ sccacheLauncher ]; + + preConfigure = (old.preConfigure or "") + '' + + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} + chmod 0777 ${final.lib.escapeShellArg sandboxSccacheDir} || true + export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" + export SCCACHE_IDLE_TIMEOUT=0 + unset SCCACHE_NO_DAEMON + mkdir -p "$(dirname "$SCCACHE_SERVER_UDS")" + if ! ${sccacheLauncher}/bin/cmake-sccache --show-stats >/dev/null 2>&1; then + rm -f "$SCCACHE_SERVER_UDS" + if ! ${sccacheLauncher}/bin/cmake-sccache --start-server >/tmp/sccache-start.log 2>&1; then + if ! grep -Fq "Address already in use" /tmp/sccache-start.log; then + cat /tmp/sccache-start.log >&2 + exit 1 + fi + fi + fi + ''; + + postBuild = (old.postBuild or "") + '' + + ${sccacheLauncher}/bin/cmake-sccache --show-stats --stats-format text || true + ${sccacheLauncher}/bin/cmake-sccache --stop-server || true + ''; + }; + mkSccacheStdenv = + { + stdenv, + sccacheDir ? "/var/cache/sccache/nix-builds/packages", + sccacheServerUds ? null, + noDaemon ? true, + }: + let + cc = stdenv.cc; + ccName = "${cc.targetPrefix or ""}cc"; + cxxName = "${cc.targetPrefix or ""}c++"; + sccacheLauncher = mkSccacheLauncher { + name = "stdenv-sccache"; + inherit sccacheDir sccacheServerUds noDaemon; + }; + sccacheCc = cc.overrideAttrs (old: { + setupHooks = (old.setupHooks or [ ]) ++ [ + (final.writeText "sccache-wrapped-compiler-hook.sh" '' + set_sccache_passthrough_for_cmake_configure() { + case " ''${nativeBuildInputs:-} ''${propagatedNativeBuildInputs:-} " in + *"/cmake-"*) + export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 + ;; + *) + if [ -n "''${cmakeFlags:-}" ] || [ -n "''${cmakeDir:-}" ] || [ -n "''${cmakeBuildType:-}" ]; then + export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 + fi + ;; + esac + } + + clear_sccache_passthrough_after_configure() { + unset SCCACHE_WRAPPED_COMPILER_PASSTHROUGH + } + + preConfigureHooks+=(set_sccache_passthrough_for_cmake_configure) + postConfigureHooks+=(clear_sccache_passthrough_after_configure) + '') + ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + final.makeWrapper + sccacheLauncher + ]; + postFixup = (old.postFixup or "") + '' + + wrap_with_sccache() { + local tool_path="$1" + if [ ! -x "$tool_path" ]; then + return 0 + fi + + mv "$tool_path" "$tool_path.orig" + makeWrapper ${sccacheLauncher}/bin/stdenv-sccache "$tool_path" \ + --add-flags "$tool_path.orig" + } + + wrap_with_sccache "$out/bin/${ccName}" + wrap_with_sccache "$out/bin/${cxxName}" + wrap_with_sccache "$out/bin/gcc" + wrap_with_sccache "$out/bin/g++" + wrap_with_sccache "$out/bin/clang" + wrap_with_sccache "$out/bin/clang++" + wrap_with_sccache "$out/bin/arocc" + ''; + }); + in + final.overrideCC stdenv sccacheCc; in { + sccache-config = sharedSccacheConfig; + intel-sycl = modify prev."intel-sycl" ( + syFinal: syPrev: { + llvm = modify syPrev.llvm mkCmakeSccacheAttrs; + lld = modify syPrev.lld mkCmakeSccacheAttrs; + stdenv = mkSccacheStdenv { + stdenv = syPrev.stdenv; + }; + } + ); # xdg-desktop-portal-cosmic = prev.xdg-desktop-portal-cosmic.overrideAttrs (old: { # postPatch = (old.postPatch or "") + '' # unitDir="$out/lib/systemd/user" @@ -11,29 +248,34 @@ in # ''; # }); # ); - codex = prev.codex.overrideAttrs ( + codex = modify prev.codex ( old: let version = "0.114.0"; - src = prev.fetchFromGitHub { - owner = "openai"; - repo = "codex"; - tag = "rust-v${version}"; - hash = "sha256-7t+mVwP4+YrG1ciI+OLqsK7TUM9SrDbPsJNrt26iy9c="; - #hash = ""; - }; in - { - inherit version src; - sourceRoot = "${src.name}/codex-rs"; - - cargoDeps = prev.rustPlatform.fetchCargoVendor { - inherit src; + (versionBumpAttrs old.version version ( + let + src = prev.fetchFromGitHub { + owner = "openai"; + repo = "codex"; + tag = "rust-v${version}"; + hash = "sha256-7t+mVwP4+YrG1ciI+OLqsK7TUM9SrDbPsJNrt26iy9c="; + #hash = ""; + }; + in + { + inherit version src; sourceRoot = "${src.name}/codex-rs"; - hash = "sha256-XThIexu3V18JG4OtyvYmybaRMctYpDuBLLH+lUvrtt8="; - #hash = prev.lib.fakeHash; - }; + cargoDeps = prev.rustPlatform.fetchCargoVendor { + inherit src; + sourceRoot = "${src.name}/codex-rs"; + hash = "sha256-XThIexu3V18JG4OtyvYmybaRMctYpDuBLLH+lUvrtt8="; + #hash = prev.lib.fakeHash; + }; + } + )) + // { buildInputs = (old.buildInputs or [ ]) ++ [ prev.libcap ]; preBuild = (old.preBuild or "") + '' @@ -42,28 +284,191 @@ in ''; } ); - llama-cpp = prev.llama-cpp.overrideAttrs (old: rec { - version = "8124"; - src = prev.fetchFromGitHub { - owner = "ggml-org"; - repo = "llama.cpp"; - tag = "b${version}"; - hash = old.src.hash; - }; - # nativeBuildInputs = old.nativeBuildInputs ++ [ prev.pkgs.curl ]; - }); - pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ - (pyFinal: pyPrev: { - haystack-ai = pyPrev.haystack-ai.overridePythonAttrs (old: rec { - version = "2.24.1"; + electron_39 = + let + angleLib = final.lib.getLib final.angle; + electronUnwrapped = modify prev.electron_39.passthru.unwrapped ( + old: + let + buildSccacheAttrs = mkBuildSccacheAttrs old; + electronGnFlags = + "${old.gnFlags or ""} cc_wrapper=\"${buildSccacheLauncher}/bin/build-sccache\""; + in + buildSccacheAttrs + // { + gnFlags = electronGnFlags; + configurePhase = builtins.replaceStrings + [ old.gnFlags or "" ] + [ electronGnFlags ] + (old.configurePhase or ""); + patches = builtins.filter ( + patch: builtins.baseNameOf (toString patch) != "39-angle-patchdir.patch" + ) (old.patches or [ ]); + postPatch = '' + substituteInPlace electron/patches/config.json \ + --replace-fail '"repo": "src/third_party/angle/src"' '"repo": "src/third_party/angle"' + '' + (old.postPatch or ""); + postFixup = (old.postFixup or "") + '' - src = final.fetchFromGitHub { - owner = "deepset-ai"; - repo = "haystack"; - rev = "v${version}"; - hash = "sha256-tlQ3Bp+HcIsmoUoOMkm2APUSgNcdsujMUnSx+un/r8c="; + for angleLibName in \ + libEGL.so \ + libEGL_vulkan_secondaries.so \ + libGLESv1_CM.so \ + libGLESv2.so \ + libGLESv2_vulkan_secondaries.so \ + libGLESv2_with_capture.so \ + libVkICD_mock_icd.so \ + libfeature_support.so + do + if [ -e "$libExecPath/$angleLibName" ] || [ -L "$libExecPath/$angleLibName" ]; then + rm -f "$libExecPath/$angleLibName" + fi + ln -s ${angleLib}/lib/"$angleLibName" "$libExecPath/$angleLibName" + done + ''; + } + ); + in + prev.electron_39.override { + electron-unwrapped = electronUnwrapped; + }; + oneapi-ccl = modify (prev.oneapi-ccl.override { + intel-sycl = final."intel-sycl"; + }) ( + old: + let + version = "2021.17.2"; + intelSycl = final."intel-sycl".llvm; + intelSyclDev = final.lib.getDev intelSycl; + intelSyclLib = final.lib.getLib intelSycl; + levelZero = final.lib.getDev final.level-zero; + openclHeaders = final.opencl-headers; + cmakeSccacheAttrs = mkCmakeSccacheAttrs old; + in + (versionBumpAttrs old.version version { + inherit version; + + src = prev.fetchFromGitHub { + owner = "uxlfoundation"; + repo = "oneCCL"; + rev = version; + hash = "sha256-dV1PadrcJSdwwpNxXAK1fo/B5p26Lvd36wqC+xM5KJM="; + }; + }) + // cmakeSccacheAttrs + // { + setOutputFlags = false; + + postPatch = (old.postPatch or "") + '' + mkdir -p deps/level_zero + rm -rf deps/level_zero/include + ln -s ${levelZero}/include/level_zero deps/level_zero/include + + sed -i '/^#if defined(SYCL_LANGUAGE_VERSION) && defined (__INTEL_LLVM_COMPILER)$/,/^#endif$/c\ +#cmakedefine CCL_ENABLE_SYCL\ +#cmakedefine CCL_ENABLE_ZE' include/oneapi/ccl/config.h.in + + sed -i 's/^#define ICPX_VERSION 0$/#define ICPX_VERSION 140000/' src/common/utils/sycl_utils.hpp + + sed -i '/^inline sycl::event get_last_event(const sycl::queue &q) {$/, /^inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector &deps) {$/c\ +inline sycl::event get_last_event(const sycl::queue &q) {\ + auto last_event_opt = q.ext_oneapi_get_last_event();\ + if (last_event_opt.has_value()) {\ + return last_event_opt.value();\ + }\ + return sycl::event{};\ +}\ +\ +inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector \&deps) {' src/coll/algorithms/utils/sycl_coll_base.hpp + + find src -type f \( -name '*.hpp' -o -name '*.cpp' \) \ + -exec sed -i 's/reqd_sub_group_size(sg_size)/reqd_sub_group_size(32)/g' {} + + + awk ' + pending { + if ($0 ~ /^[[:space:]]*send_buf, new_send_count,/) { + sub(/send_buf, new_send_count,/, "q, send_buf, new_send_count,") + } + pending = 0 + } + /^[[:space:]]*e = allgatherv_large\($/ { + pending = 1 + } + { print } + ' src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp \ + > src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp.tmp + mv src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp.tmp \ + src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp + ''; + + cmakeFlags = (cmakeSccacheAttrs.cmakeFlags or [ ]) ++ [ + "-DCMAKE_INSTALL_INCLUDEDIR=include" + "-DINTEL_SYCL_INCLUDE_DIRS=${intelSyclDev}/include" + "-DINTEL_SYCL_LIBRARIES=${intelSyclLib}/lib/libsycl.so" + ]; + + buildInputs = (old.buildInputs or [ ]) ++ [ openclHeaders ]; + + meta = (old.meta or { }) // { + broken = false; + }; + } + ); + oneapi-dpl = + let + version = "2022.11.1"; + in + modify prev.oneapi-dpl (old: + (versionBumpAttrs old.version version { + inherit version; + + src = prev.fetchFromGitHub { + owner = "uxlfoundation"; + repo = "oneDPL"; + rev = "oneDPL-${version}-release"; + hash = "sha256-NfyV34mdKfCxlU+l6ETKWcC9MwvVEgwcBedtLe6WCV4="; }; + meta = (old.meta or { }) // { + changelog = "https://github.com/uxlfoundation/oneDPL/releases/tag/oneDPL-${version}-release"; + }; + }) + // (mkCmakeSccacheAttrs old) + ); + llama-cpp = modify prev.llama-cpp ( + old: + let + version = "8124"; + in + (versionBumpAttrs old.version version { + inherit version; + src = prev.fetchFromGitHub { + owner = "ggml-org"; + repo = "llama.cpp"; + tag = "b${version}"; + hash = old.src.hash; + }; + }) + // (mkCmakeSccacheAttrs old) + ); + pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ + (pyFinal: pyPrev: { + haystack-ai = modify pyPrev.haystack-ai ( + old: + let + version = "2.24.1"; + in + (versionBumpAttrs old.version version { + inherit version; + + src = final.fetchFromGitHub { + owner = "deepset-ai"; + repo = "haystack"; + rev = "v${version}"; + hash = "sha256-tlQ3Bp+HcIsmoUoOMkm2APUSgNcdsujMUnSx+un/r8c="; + }; + }) + // { propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ (with pyPrev; [ @@ -79,8 +484,9 @@ in meta = (old.meta or { }) // { broken = false; }; - }); - sseclient-py = pyPrev.sseclient-py.overridePythonAttrs (old: rec { + } + ); + sseclient-py = modify pyPrev.sseclient-py (old: rec { format = "pyproject"; nativeBuildInputs = (old.nativeBuildInputs or [ ]) @@ -91,24 +497,31 @@ in ]); doCheck = false; }); - vllm = pyPrev.vllm.overridePythonAttrs (old: rec { - version = "0.17.1"; + vllm = modify pyPrev.vllm ( + old: + let + version = "0.17.1"; + in + versionBumpAttrs old.version version { + inherit version; - src = final.fetchFromGitHub { - owner = "vllm-project"; - repo = "vllm"; - rev = "v${version}"; - hash = "sha256-EZozwA+GIjN8/CBNhtdeM3HsPhVdx1/J0B9gvvn2qKU="; - }; - }); + src = final.fetchFromGitHub { + owner = "vllm-project"; + repo = "vllm"; + rev = "v${version}"; + hash = "sha256-EZozwA+GIjN8/CBNhtdeM3HsPhVdx1/J0B9gvvn2qKU="; + }; + } + ); }) ]; - lutris-unwrapped = prev.lutris-unwrapped.overrideAttrs ( + lutris-unwrapped = modify prev.lutris-unwrapped ( old: let version = "0.5.22"; in - { + versionBumpAttrs old.version version { + inherit version; src = prev.fetchFromGitHub { owner = "lutris"; repo = "lutris"; @@ -117,12 +530,10 @@ in }; } ); - winetricks = final.symlinkJoin { - name = "winetricks-${prev.winetricks.version}"; - paths = [ prev.winetricks ]; - nativeBuildInputs = [ final.makeWrapper ]; + winetricks = modify prev.winetricks (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ final.makeWrapper ]; - postBuild = '' + postFixup = (old.postFixup or "") + '' wrapProgram "$out/bin/winetricks" \ --prefix PATH : "${final.lib.makeBinPath [ winePkg ]}" \ --set-default WINE "${winePkg}/bin/wine" \ @@ -130,9 +541,7 @@ in --run ': "''${WINE_BIN:=$wine_dir/.wine}"' \ --run 'export WINE WINESERVER WINE_BIN WINESERVER_BIN' ''; - - meta = prev.winetricks.meta; - }; + }); # winetricks = prev.winetricks.overrideAttrs ( # old: # let diff --git a/flake.lock b/flake.lock index d670d25..ede1a9d 100644 --- a/flake.lock +++ b/flake.lock @@ -46,11 +46,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1773421907, - "narHash": "sha256-TN8Qf8RhmOX7TAwhdjGaE/clgAxzfHwsOjGSxz0Bz/0=", + "lastModified": 1773504138, + "narHash": "sha256-CQZelDz8KtJBcY88cP9KKpqD5WNYkkwOR2U7RhW53T8=", "owner": "sadjow", "repo": "claude-code-nix", - "rev": "4746a848ccb3e1ba1a1c99fd063bf998045b81ac", + "rev": "57fec627abf180c338ebdf1b0c5230b59e536ce0", "type": "github" }, "original": { @@ -176,11 +176,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1773118123, - "narHash": "sha256-uwU+JTxjzveJgepaA84gyi28cx/akT7RE/qH8s7qMjk=", + "lastModified": 1773492089, + "narHash": "sha256-ZKzjqbc4vAivOptaxEsfWt9yoD7rmlYVyTgr168+sdc=", "owner": "imaviso", "repo": "dwproton-flake", - "rev": "2279531470e2d98febfe0ad7433bcbd7dc83c9aa", + "rev": "ec94234a5c7d185855975c5854115c7cacef7323", "type": "github" }, "original": { @@ -451,11 +451,11 @@ ] }, "locked": { - "lastModified": 1773422513, - "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", + "lastModified": 1773681856, + "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", "owner": "nix-community", "repo": "home-manager", - "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", + "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", "type": "github" }, "original": { @@ -540,16 +540,16 @@ "kernel-src": { "flake": false, "locked": { - "lastModified": 1773006395, - "narHash": "sha256-f3IzNvzYFskEwgQZi2v0g5tcKabCUZfpDHn2x5dpNIU=", + "lastModified": 1773493865, + "narHash": "sha256-3f17iyo1Dh96KKPYLAGFAUQxVZrxe06ne2uy/Y3FPuE=", "ref": "refs/heads/drm-tip", - "rev": "6884fe03ff2bc5a2f501ba4710f950dd4933ac84", + "rev": "bbe6ae2e40f59b05f04a75989b3b3bbb005342a2", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" }, "original": { - "rev": "6884fe03ff2bc5a2f501ba4710f950dd4933ac84", + "rev": "bbe6ae2e40f59b05f04a75989b3b3bbb005342a2", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" @@ -611,11 +611,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1773390002, - "narHash": "sha256-0RVjh9h0sgPHngxEs/Wd2/xdGsgKgZWjxFu5JsX3ASw=", + "lastModified": 1773675540, + "narHash": "sha256-P4S7I15rxuJ+Iq7F4Z1OrMAcZaJEiIasYNioiJjc4/s=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "adc63b19724247f947385381481effd225a6e2fc", + "rev": "9061fa226d41fceec5bcec72e0e7ee2282b5645e", "type": "github" }, "original": { @@ -680,11 +680,11 @@ ] }, "locked": { - "lastModified": 1772945408, - "narHash": "sha256-PMt48sEQ8cgCeljQ9I/32uoBq/8t8y+7W/nAZhf72TQ=", + "lastModified": 1773552174, + "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "1c1d8ea87b047788fd7567adf531418c5da321ec", + "rev": "8faeb68130df077450451b6734a221ba0d6cde42", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773222311, - "narHash": "sha256-BHoB/XpbqoZkVYZCfXJXfkR+GXFqwb/4zbWnOr2cRcU=", + "lastModified": 1773610124, + "narHash": "sha256-EpC7ELOKmb+xXaqpK5ZRpJ5g9fxxg6tWny7/rUBfrwk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0590cd39f728e129122770c029970378a79d076a", + "rev": "9fe1300f4360e13f39d6d1d006e54fd5093e9ad5", "type": "github" }, "original": { @@ -787,11 +787,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1773282481, - "narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fe416aaedd397cacb33a610b33d60ff2b431b127", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { @@ -1015,11 +1015,11 @@ ] }, "locked": { - "lastModified": 1772751120, - "narHash": "sha256-4cBOTPXv6Pkqa6qL1SH3UZTShciQWpyKJy3c3cQEU8I=", + "lastModified": 1773673214, + "narHash": "sha256-cjdDXKuMFO9mtBr1jCQsfKMsPBUdbG/8Hklhym29X5k=", "owner": "mozilla", "repo": "sccache", - "rev": "2b65ac80ed3a3ff63c41711d65ae10106a163a09", + "rev": "7b751fccd4e3dfc4e16564f967dae306649dee0b", "type": "github" }, "original": { @@ -1288,11 +1288,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1772429643, - "narHash": "sha256-M+bAeCCcjBnVk6w/4dIVvXvpJwOKnXjwi/lDbaN6Yws=", + "lastModified": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "10f985b84cdbcc3bbf35b3e7e43d1b2a84fa9ce2", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 425dcc1..cc4b9c0 100644 --- a/flake.nix +++ b/flake.nix @@ -51,7 +51,7 @@ let system = "x86_64-linux"; # pkgs = nixpkgs.${system}.packages; - pkgs = nixpkgs { + pkgs = import nixpkgs { inherit system; overlays = [ sccache.overlays.default @@ -101,6 +101,12 @@ intel-ocl vpl-gpu-rt intel-compute-runtime + ### intel-hw + oneapi-ccl + oneapi-dpl + oneapi-math + oneapi-tbb + unified-memory-framework ] ); # ++ (with inputs.intel-hw.packages."${system}"; [ @@ -145,7 +151,7 @@ RestartSec = 2; }; environment = { - SCCACHE_DIR = "/var/cache/sccache"; + SCCACHE_CONF = pkgs."sccache-config"; SCCACHE_SERVER_UDS = "/run/sccache/server.sock"; SCCACHE_IDLE_TIMEOUT = "0"; SCCACHE_START_SERVER = "1"; From 93fa0158ebd36b91f925062d12e005b9f95c0106 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Tue, 17 Mar 2026 19:26:06 +0200 Subject: [PATCH 04/18] Make electron clang base store-pure --- custom/override.nix | 265 +++++++++++++++++++++++++++++++++----------- todo.md | 33 ++++++ 2 files changed, 235 insertions(+), 63 deletions(-) create mode 100644 todo.md diff --git a/custom/override.nix b/custom/override.nix index ad13ce9..fc04874 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -20,6 +20,49 @@ let target.overrideScope f else throw "modify: target does not support overridePythonAttrs, overrideAttrs, or overrideScope"; + mkRealCompilerBasePath = + { + name, + toolchain, + }: + final.runCommand name { } '' + wrapped_clang="$(readlink -f ${toolchain}/bin/clang)" + wrapped_root="$(dirname "$(dirname "$wrapped_clang")")" + orig_cc_root="$(tr -d '\n' < "$wrapped_root/nix-support/orig-cc")" + + if [ -z "$orig_cc_root" ] || [ ! -d "$orig_cc_root/bin" ]; then + echo "mkRealCompilerBasePath: invalid orig-cc root: $orig_cc_root" >&2 + exit 1 + fi + if [ ! -x "$orig_cc_root/bin/clang" ] || [ ! -x "$orig_cc_root/bin/clang++" ]; then + echo "mkRealCompilerBasePath: clang or clang++ missing in $orig_cc_root/bin" >&2 + exit 1 + fi + + mkdir -p "$out/bin" + + for executable in ${toolchain}/bin/*; do + executable_name="$(basename "$executable")" + case "$executable_name" in + clang|clang++|cc|c++) + continue + ;; + esac + ln -s "$executable" "$out/bin/$executable_name" + done + + ln -s "$orig_cc_root/bin/clang" "$out/bin/clang" + ln -s "$orig_cc_root/bin/clang++" "$out/bin/clang++" + ln -s clang "$out/bin/cc" + ln -s clang++ "$out/bin/c++" + + for path in ${toolchain}/*; do + path_name="$(basename "$path")" + if [ "$path_name" != bin ]; then + ln -s "$path" "$out/$path_name" + fi + done + ''; mkSccacheLauncher = { name, @@ -161,75 +204,161 @@ let ${sccacheLauncher}/bin/cmake-sccache --stop-server || true ''; }; + mkSccacheExtraConfig = + { + sccacheDir ? sandboxSccacheDir, + extraConfig ? "", + }: + '' + mkdir -p ${final.lib.escapeShellArg sccacheDir} + chmod 0777 ${final.lib.escapeShellArg sccacheDir} || true + export SCCACHE_CONF=${final.lib.escapeShellArg ( + final.writeText "sccache-stdenv.conf" '' + [cache.disk] + dir = "${sccacheDir}" + size = "100G" + '' + )} + export SCCACHE_NO_DAEMON=1 + unset SCCACHE_SERVER_UDS + ${extraConfig} + ''; + mkWrappedCcForSccache = + { + cc, + extraConfig ? "", + }: + let + wrappedCompiler = final.sccache.links { + inherit extraConfig; + unwrappedCC = cc.cc; + }; + overrideArgs = cc.override.__functionArgs or { }; + in + if overrideArgs ? cc then + cc.override { cc = wrappedCompiler; } + else if overrideArgs ? llvm then + cc.override { llvm = wrappedCompiler; } + else + throw "mkWrappedCcForSccache: unsupported compiler wrapper override interface"; mkSccacheStdenv = { stdenv, sccacheDir ? "/var/cache/sccache/nix-builds/packages", - sccacheServerUds ? null, - noDaemon ? true, + extraConfig ? "", }: - let - cc = stdenv.cc; - ccName = "${cc.targetPrefix or ""}cc"; - cxxName = "${cc.targetPrefix or ""}c++"; - sccacheLauncher = mkSccacheLauncher { - name = "stdenv-sccache"; - inherit sccacheDir sccacheServerUds noDaemon; - }; - sccacheCc = cc.overrideAttrs (old: { - setupHooks = (old.setupHooks or [ ]) ++ [ - (final.writeText "sccache-wrapped-compiler-hook.sh" '' - set_sccache_passthrough_for_cmake_configure() { - case " ''${nativeBuildInputs:-} ''${propagatedNativeBuildInputs:-} " in - *"/cmake-"*) - export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 - ;; - *) - if [ -n "''${cmakeFlags:-}" ] || [ -n "''${cmakeDir:-}" ] || [ -n "''${cmakeBuildType:-}" ]; then - export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 - fi - ;; - esac - } - - clear_sccache_passthrough_after_configure() { - unset SCCACHE_WRAPPED_COMPILER_PASSTHROUGH - } - - preConfigureHooks+=(set_sccache_passthrough_for_cmake_configure) - postConfigureHooks+=(clear_sccache_passthrough_after_configure) - '') - ]; - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ - final.makeWrapper - sccacheLauncher - ]; - postFixup = (old.postFixup or "") + '' - - wrap_with_sccache() { - local tool_path="$1" - if [ ! -x "$tool_path" ]; then - return 0 - fi - - mv "$tool_path" "$tool_path.orig" - makeWrapper ${sccacheLauncher}/bin/stdenv-sccache "$tool_path" \ - --add-flags "$tool_path.orig" - } - - wrap_with_sccache "$out/bin/${ccName}" - wrap_with_sccache "$out/bin/${cxxName}" - wrap_with_sccache "$out/bin/gcc" - wrap_with_sccache "$out/bin/g++" - wrap_with_sccache "$out/bin/clang" - wrap_with_sccache "$out/bin/clang++" - wrap_with_sccache "$out/bin/arocc" - ''; - }); - in - final.overrideCC stdenv sccacheCc; + final.overrideCC stdenv ( + mkWrappedCcForSccache { + inherit (stdenv) cc; + extraConfig = mkSccacheExtraConfig { + inherit extraConfig sccacheDir; + }; + } + ); in { + sccache = modify prev.sccache (old: { + postPatch = (old.postPatch or "") + '' + substituteInPlace src/compiler/gcc.rs \ + --replace-fail \ + ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' \ + ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath), + take_arg!("-cxx-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' + ''; + passthru = (old.passthru or { }) // { + links = + { unwrappedCC, extraConfig ? "" }: + final.stdenv.mkDerivation { + pname = "sccache-links"; + inherit (old) version; + passthru = { + isClang = unwrappedCC.isClang or false; + isGNU = unwrappedCC.isGNU or false; + isSccache = true; + dev = unwrappedCC.dev or null; + lib = unwrappedCC.lib or (final.lib.getLib unwrappedCC); + } // final.lib.optionalAttrs (unwrappedCC ? rsrc) { + inherit (unwrappedCC) rsrc; + }; + dev = unwrappedCC.dev or null; + lib = unwrappedCC.lib or (final.lib.getLib unwrappedCC); + rsrc = unwrappedCC.rsrc or null; + nativeBuildInputs = [ final.makeWrapper ]; + buildCommand = + let + targetPrefix = + if unwrappedCC.isClang or false then + "" + else + (final.lib.optionalString ( + unwrappedCC ? targetConfig && unwrappedCC.targetConfig != null && unwrappedCC.targetConfig != "" + ) "${unwrappedCC.targetConfig}-"); + in + '' + mkdir -p $out/bin + + wrap() { + local cname="${targetPrefix}$1" + if [ -x "${unwrappedCC}/bin/$cname" ]; then + makeWrapper ${final.sccache}/bin/sccache $out/bin/$cname \ + --run ${final.lib.escapeShellArg extraConfig} \ + --add-flags ${unwrappedCC}/bin/$cname + fi + } + + wrap cc + wrap c++ + wrap gcc + wrap g++ + wrap clang + wrap clang++ + + for executable in $(ls ${unwrappedCC}/bin); do + if [ ! -x "$out/bin/$executable" ]; then + ln -s ${unwrappedCC}/bin/$executable $out/bin/$executable + fi + done + for file in $(ls ${unwrappedCC} | grep -vw bin); do + ln -s ${unwrappedCC}/$file $out/$file + done + ''; + meta = final.lib.optionalAttrs (unwrappedCC.meta ? mainProgram) { + inherit (unwrappedCC.meta) mainProgram; + }; + }; + }; + }); + sccacheWrapper = + final.lib.makeOverridable ( + { + extraConfig ? "", + cc, + }: + mkWrappedCcForSccache { + inherit cc extraConfig; + } + ) { + extraConfig = ""; + inherit (final.stdenv) cc; + }; + sccacheStdenv = final.lib.lowPrio ( + final.lib.makeOverridable ( + { + stdenv, + ... + }@extraArgs: + final.overrideCC stdenv ( + final.buildPackages.sccacheWrapper.override ( + { inherit (stdenv) cc; } + // final.lib.optionalAttrs (builtins.hasAttr "extraConfig" extraArgs) { + extraConfig = extraArgs.extraConfig; + } + ) + ) + ) { + inherit (final) stdenv; + } + ); sccache-config = sharedSccacheConfig; intel-sycl = modify prev."intel-sycl" ( syFinal: syPrev: { @@ -287,12 +416,22 @@ in electron_39 = let angleLib = final.lib.getLib final.angle; + realElectronClangBasePath = mkRealCompilerBasePath { + name = "electron-real-clang-base"; + toolchain = prev.electron_39.passthru.unwrapped.llvmCcAndBintools; + }; electronUnwrapped = modify prev.electron_39.passthru.unwrapped ( old: let buildSccacheAttrs = mkBuildSccacheAttrs old; + oldClangBasePath = "clang_base_path=\"${old.llvmCcAndBintools}\""; + newClangBasePath = "clang_base_path=\"${realElectronClangBasePath}\""; + baseGnFlags = builtins.replaceStrings + [ oldClangBasePath ] + [ newClangBasePath ] + (old.gnFlags or ""); electronGnFlags = - "${old.gnFlags or ""} cc_wrapper=\"${buildSccacheLauncher}/bin/build-sccache\""; + "${baseGnFlags} cc_wrapper=\"${buildSccacheLauncher}/bin/build-sccache\""; in buildSccacheAttrs // { diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..5a42fc0 --- /dev/null +++ b/todo.md @@ -0,0 +1,33 @@ +# Todo + +## Sccache Stdenv Direction + +- Goal: move `sccache` to the same structural layer as `ccacheStdenv`, meaning between the Nix cc-wrapper and the real compiler, instead of wrapping the cc-wrapper script itself. +- Reason: this should preserve normal compiler identity and wrapper semantics while still allowing cached compilations. +- Constraint: prefer direct local-disk cache access for sandboxed builds and avoid depending on the external `sccache` client/server socket model. + +## Current Implementation State + +- Added a local patch to `sccache` so its GCC/Clang parser treats `-cxx-isystem ` like `-isystem `. +- Added `sccache.links`, modeled after nixpkgs `ccache.links`, to generate `cc`/`c++`/`gcc`/`g++`/`clang`/`clang++` wrappers that call `sccache` with the real compiler path. +- Added `sccacheWrapper`, modeled after nixpkgs `ccacheWrapper`. +- Added `sccacheStdenv`, modeled after nixpkgs `ccacheStdenv`. +- Reworked `mkSccacheStdenv` to delegate to `sccacheWrapper` instead of patching cc-wrapper scripts directly. +- Kept direct-disk cache configuration through generated `SCCACHE_CONF` and `SCCACHE_NO_DAEMON=1`. +- Adjusted the wrapper override helper so it can handle both normal cc-wrappers (`cc = ...`) and Intel SYCL wrappers (`llvm = ...`). +- Forwarded Intel-expected outputs/attrs like `.dev`, `.lib`, and `.rsrc` through `sccache.links`. + +## Verified Findings + +- The previous direct insertion into cc-wrapper final exec did not break hello-world compilation. +- That previous attempt was not cache-effective because `sccache` interpreted wrapper-emitted `-cxx-isystem` arguments as extra input files and returned `multiple input files`. +- The exact problematic arguments were confirmed with a direct `sccache clang ...` probe using the wrapper-emitted argv. +- The new ccache-style `sccacheWrapper` / `sccacheStdenv` path evaluates successfully. +- `intel-sycl.stdenv.cc` now also evaluates successfully with the ccache-style `sccache.links` replacement in place. + +## Next Checks + +- `electron-real-clang-base` should stay store-pure: synthesize its output tree from symlinks only and never `cp`/`rm` against copied toolchain store content. +- Build the patched `sccache` package. +- Run a minimal hello-world derivation with the new `sccacheStdenv` and confirm repeated compiles produce cache hits. +- If that works, switch current consumers to the ccache-style path and remove obsolete wrapper-patching logic. From c1916d3fb8d1688cae9e81ac430f26ab50c387d8 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Tue, 17 Mar 2026 23:13:51 +0200 Subject: [PATCH 05/18] Apply CMake sccache helper to oneapi-math-sycl-blas --- custom/override.nix | 49 ++++++++++++++++++++++++++++++++++++++++----- todo.md | 4 ++++ 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/custom/override.nix b/custom/override.nix index fc04874..a43360c 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -26,9 +26,24 @@ let toolchain, }: final.runCommand name { } '' + resolve_orig_cc_root() { + local current_root="$1" + local next_root + + while [ -r "$current_root/nix-support/orig-cc" ]; do + next_root="$(tr -d '\n' < "$current_root/nix-support/orig-cc")" + if [ -z "$next_root" ] || [ "$next_root" = "$current_root" ]; then + break + fi + current_root="$next_root" + done + + printf '%s\n' "$current_root" + } + wrapped_clang="$(readlink -f ${toolchain}/bin/clang)" wrapped_root="$(dirname "$(dirname "$wrapped_clang")")" - orig_cc_root="$(tr -d '\n' < "$wrapped_root/nix-support/orig-cc")" + orig_cc_root="$(resolve_orig_cc_root "$wrapped_root")" if [ -z "$orig_cc_root" ] || [ ! -d "$orig_cc_root/bin" ]; then echo "mkRealCompilerBasePath: invalid orig-cc root: $orig_cc_root" >&2 @@ -71,6 +86,7 @@ let sccacheCacheSize ? "100G", noDaemon ? false, passthroughWrappedCompiler ? false, + extraSetup ? "", }: let sccacheConfig = final.writeText "${name}-config" '' @@ -91,12 +107,18 @@ let } is_cmake_probe_invocation() { - local arg + local arg response_file for arg in "$@"; do case "$arg" in *CMakeFiles/*CompilerId*|*CMakeFiles/CMakeTmp/*|*CMakeScratch/*) return 0 ;; + @*) + response_file="''${arg#@}" + if [ -f "$response_file" ] && grep -Eq 'CMakeFiles/.+CompilerId|CMakeFiles/CMakeTmp|CMakeScratch' "$response_file"; then + return 0 + fi + ;; esac done @@ -112,6 +134,7 @@ let ${final.lib.optionalString (!noDaemon && sccacheServerUds != null) '' export SCCACHE_SERVER_UDS=${final.lib.escapeShellArg sccacheServerUds} ''} + ${extraSetup} if [ "$#" -eq 0 ] || [ "''${1#-}" != "$1" ]; then exec ${final.sccache}/bin/sccache "$@" fi @@ -180,9 +203,9 @@ let nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ sccacheLauncher ]; preConfigure = (old.preConfigure or "") + '' - mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} chmod 0777 ${final.lib.escapeShellArg sandboxSccacheDir} || true + export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" export SCCACHE_IDLE_TIMEOUT=0 unset SCCACHE_NO_DAEMON @@ -198,6 +221,10 @@ let fi ''; + postConfigure = (old.postConfigure or "") + '' + unset SCCACHE_WRAPPED_COMPILER_PASSTHROUGH + ''; + postBuild = (old.postBuild or "") + '' ${sccacheLauncher}/bin/cmake-sccache --show-stats --stats-format text || true @@ -268,6 +295,13 @@ in passthru = (old.passthru or { }) // { links = { unwrappedCC, extraConfig ? "" }: + let + sccacheLauncher = mkSccacheLauncher { + name = "wrapped-sccache"; + noDaemon = true; + extraSetup = extraConfig; + }; + in final.stdenv.mkDerivation { pname = "sccache-links"; inherit (old) version; @@ -296,12 +330,12 @@ in in '' mkdir -p $out/bin + mkdir -p $out/nix-support wrap() { local cname="${targetPrefix}$1" if [ -x "${unwrappedCC}/bin/$cname" ]; then - makeWrapper ${final.sccache}/bin/sccache $out/bin/$cname \ - --run ${final.lib.escapeShellArg extraConfig} \ + makeWrapper ${sccacheLauncher}/bin/wrapped-sccache $out/bin/$cname \ --add-flags ${unwrappedCC}/bin/$cname fi } @@ -321,6 +355,8 @@ in for file in $(ls ${unwrappedCC} | grep -vw bin); do ln -s ${unwrappedCC}/$file $out/$file done + + printf '%s\n' "${unwrappedCC}" > $out/nix-support/orig-cc ''; meta = final.lib.optionalAttrs (unwrappedCC.meta ? mainProgram) { inherit (unwrappedCC.meta) mainProgram; @@ -553,6 +589,9 @@ inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector Date: Tue, 17 Mar 2026 23:16:38 +0200 Subject: [PATCH 06/18] Apply CMake sccache helper to oneapi-math --- custom/override.nix | 3 +++ todo.md | 1 + 2 files changed, 4 insertions(+) diff --git a/custom/override.nix b/custom/override.nix index a43360c..e2d437f 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -592,6 +592,9 @@ inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector Date: Tue, 17 Mar 2026 23:19:38 +0200 Subject: [PATCH 07/18] Drop sccache chmod calls in build hooks --- custom/modules/kernel.nix | 2 -- custom/override.nix | 3 --- 2 files changed, 5 deletions(-) diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 7956fa7..d1170cc 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -144,7 +144,6 @@ pkgs.callPackage ( (args.preBuild or "") + lib.optionalString enforceSccache '' mkdir -p ${lib.escapeShellArg sccacheDir} - chmod 0777 ${lib.escapeShellArg sccacheDir} || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} ''; @@ -154,7 +153,6 @@ pkgs.callPackage ( '' runHook preBuild mkdir -p ${lib.escapeShellArg sccacheDir} - chmod 0777 ${lib.escapeShellArg sccacheDir} || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" diff --git a/custom/override.nix b/custom/override.nix index e2d437f..718a932 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -164,7 +164,6 @@ let preConfigure = (old.preConfigure or "") + '' mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} - chmod 0777 ${final.lib.escapeShellArg sandboxSccacheDir} || true export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" export SCCACHE_IDLE_TIMEOUT=0 unset SCCACHE_NO_DAEMON @@ -204,7 +203,6 @@ let preConfigure = (old.preConfigure or "") + '' mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} - chmod 0777 ${final.lib.escapeShellArg sandboxSccacheDir} || true export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" export SCCACHE_IDLE_TIMEOUT=0 @@ -238,7 +236,6 @@ let }: '' mkdir -p ${final.lib.escapeShellArg sccacheDir} - chmod 0777 ${final.lib.escapeShellArg sccacheDir} || true export SCCACHE_CONF=${final.lib.escapeShellArg ( final.writeText "sccache-stdenv.conf" '' [cache.disk] From 40bcae409d809bb92046e39b316cde1932244e7a Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Tue, 17 Mar 2026 23:47:55 +0200 Subject: [PATCH 08/18] Make custom kernel accept boot.kernelPatches --- custom/modules/default.nix | 9 +- custom/modules/kernel.nix | 282 +++++++++++++++++++------------------ 2 files changed, 153 insertions(+), 138 deletions(-) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index 38ab417..ff5c2ac 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -6,7 +6,14 @@ }: { boot = { - kernelPackages = pkgs.linuxPackagesFor (import ./kernel.nix { inherit pkgs lib kernel-src; }); + kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./kernel.nix { + inherit lib kernel-src; + structuredExtraConfig = { }; + kernelPatches = [ ]; + extraConfig = ""; + features = { }; + randstructSeed = null; + }); kernelPatches = [ { name = "gpu"; diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index d1170cc..c98c319 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -2,12 +2,16 @@ pkgs, lib, kernel-src, + buildLinux, structuredExtraConfig ? { }, kernelPatches ? [ ], extraConfig ? "", sccacheDir ? "/var/cache/sccache/nix-builds/kernel", sccacheServerUds ? null, enforceSccache ? true, + features ? { }, + randstructSeed ? null, + ... }: let @@ -30,156 +34,160 @@ let kver = "${V}.${P}.${S}${E}"; in -pkgs.callPackage ( - { buildLinux, ... }@args: - let - llvm = pkgs.llvmPackages_latest; - rust = pkgs.rustc-unwrapped; +let + args = { + inherit + buildLinux + features + randstructSeed + ; + }; + llvm = pkgs.llvmPackages_latest; + rust = pkgs.rustc-unwrapped; - buildPkgs = args.buildPackages or pkgs.buildPackages; - buildLlvm = buildPkgs.llvmPackages_latest; - llvmBuildPackages = buildPkgs // { - stdenv = buildLlvm.stdenv; - }; + buildPkgs = args.buildPackages or pkgs.buildPackages; + buildLlvm = buildPkgs.llvmPackages_latest; + llvmBuildPackages = buildPkgs // { + stdenv = buildLlvm.stdenv; + }; - realClang = lib.getExe llvm.clang-unwrapped; - realLd = lib.getExe' llvm.lld "ld.lld"; - realAr = lib.getExe' llvm.llvm "llvm-ar"; - realNm = lib.getExe' llvm.llvm "llvm-nm"; - realStrip = lib.getExe' llvm.llvm "llvm-strip"; - realObjcopy = lib.getExe' llvm.llvm "llvm-objcopy"; - realObjdump = lib.getExe' llvm.llvm "llvm-objdump"; - realReadelf = lib.getExe' llvm.llvm "llvm-readelf"; + realClang = lib.getExe llvm.clang-unwrapped; + realLd = lib.getExe' llvm.lld "ld.lld"; + realAr = lib.getExe' llvm.llvm "llvm-ar"; + realNm = lib.getExe' llvm.llvm "llvm-nm"; + realStrip = lib.getExe' llvm.llvm "llvm-strip"; + realObjcopy = lib.getExe' llvm.llvm "llvm-objcopy"; + realObjdump = lib.getExe' llvm.llvm "llvm-objdump"; + realReadelf = lib.getExe' llvm.llvm "llvm-readelf"; - realHostCC = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}cc"; - realHostCXX = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}c++"; - realHostAr = lib.getExe' buildLlvm.llvm "llvm-ar"; - realHostLd = lib.getExe' buildLlvm.lld "ld.lld"; - realRustc = lib.getExe' rust "rustc"; - realHostRustc = realRustc; - sccacheConfig = pkgs.writeText "kernel-sccache.conf" '' - [cache.disk] - dir = "${sccacheDir}" - size = "100G" + realHostCC = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}cc"; + realHostCXX = lib.getExe' buildLlvm.stdenv.cc "${buildLlvm.stdenv.cc.targetPrefix}c++"; + realHostAr = lib.getExe' buildLlvm.llvm "llvm-ar"; + realHostLd = lib.getExe' buildLlvm.lld "ld.lld"; + realRustc = lib.getExe' rust "rustc"; + realHostRustc = realRustc; + sccacheConfig = pkgs.writeText "kernel-sccache.conf" '' + [cache.disk] + dir = "${sccacheDir}" + size = "100G" + ''; + + mkSccacheWrapper = + name: compiler: + pkgs.writeShellScriptBin name '' + set -euo pipefail + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} + ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} + if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then + : > "''${SCCACHE_ENFORCE_MARKER}" + fi + exec ${pkgs.sccache}/bin/sccache ${compiler} "$@" ''; - mkSccacheWrapper = - name: compiler: - pkgs.writeShellScriptBin name '' - set -euo pipefail + clangSccache = mkSccacheWrapper "clang" realClang; + hostccSccache = mkSccacheWrapper "cc" realHostCC; + hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; + rustcSccache = pkgs.writeShellScriptBin "rustc" '' + set -euo pipefail + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} + ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} + if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then + : > "''${SCCACHE_ENFORCE_MARKER}" + fi + exec ${pkgs.sccache}/bin/sccache ${realRustc} "$@" + ''; + + hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' + set -euo pipefail + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} + ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} + if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then + : > "''${SCCACHE_ENFORCE_MARKER}" + fi + exec ${pkgs.sccache}/bin/sccache ${realHostRustc} "$@" + ''; + + structuredExtraConfig' = + (with lib.kernel; { + LTO_CLANG_THIN = yes; + # LTO_CLANG_FULL = no; + # LTO_NONE = no; + }) + // structuredExtraConfig; +in +buildLinux ( + args + // { + inherit kernelPatches extraConfig; + + version = kver; + modDirVersion = kver; + src = kernel-src; + + stdenv = llvm.stdenv; + buildPackages = llvmBuildPackages; + + extraMakeFlags = + (args.extraMakeFlags or [ ]) + ++ [ + "LLVM=1" + "LLVM_IAS=1" + "CC=${if enforceSccache then lib.getExe clangSccache else realClang}" + "LD=${realLd}" + "AR=${realAr}" + "NM=${realNm}" + "STRIP=${realStrip}" + "OBJCOPY=${realObjcopy}" + "OBJDUMP=${realObjdump}" + "READELF=${realReadelf}" + "HOSTCC=${if enforceSccache then lib.getExe hostccSccache else realHostCC}" + "HOSTCXX=${if enforceSccache then lib.getExe hostcxxSccache else realHostCXX}" + "HOSTAR=${realHostAr}" + "HOSTLD=${realHostLd}" + "RUSTC=${if enforceSccache then lib.getExe rustcSccache else realRustc}" + "HOSTRUSTC=${if enforceSccache then lib.getExe hostrustcSccache else realHostRustc}" + ] + ; + + preBuild = + (args.preBuild or "") + + lib.optionalString enforceSccache '' + mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then - : > "''${SCCACHE_ENFORCE_MARKER}" - fi - exec ${pkgs.sccache}/bin/sccache ${compiler} "$@" ''; - clangSccache = mkSccacheWrapper "clang" realClang; - hostccSccache = mkSccacheWrapper "cc" realHostCC; - hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; - rustcSccache = pkgs.writeShellScriptBin "rustc" '' - set -euo pipefail - export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then - : > "''${SCCACHE_ENFORCE_MARKER}" - fi - exec ${pkgs.sccache}/bin/sccache ${realRustc} "$@" - ''; - - hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' - set -euo pipefail - export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then - : > "''${SCCACHE_ENFORCE_MARKER}" - fi - exec ${pkgs.sccache}/bin/sccache ${realHostRustc} "$@" - ''; - - structuredExtraConfig' = - (with lib.kernel; { - LTO_CLANG_THIN = yes; - # LTO_CLANG_FULL = no; - # LTO_NONE = no; - }) - // structuredExtraConfig; - in - buildLinux ( - args - // { - inherit kernelPatches extraConfig; - - version = kver; - modDirVersion = kver; - src = kernel-src; - - stdenv = llvm.stdenv; - buildPackages = llvmBuildPackages; - - extraMakeFlags = - (args.extraMakeFlags or [ ]) - ++ [ - "LLVM=1" - "LLVM_IAS=1" - "CC=${if enforceSccache then lib.getExe clangSccache else realClang}" - "LD=${realLd}" - "AR=${realAr}" - "NM=${realNm}" - "STRIP=${realStrip}" - "OBJCOPY=${realObjcopy}" - "OBJDUMP=${realObjdump}" - "READELF=${realReadelf}" - "HOSTCC=${if enforceSccache then lib.getExe hostccSccache else realHostCC}" - "HOSTCXX=${if enforceSccache then lib.getExe hostcxxSccache else realHostCXX}" - "HOSTAR=${realHostAr}" - "HOSTLD=${realHostLd}" - "RUSTC=${if enforceSccache then lib.getExe rustcSccache else realRustc}" - "HOSTRUSTC=${if enforceSccache then lib.getExe hostrustcSccache else realHostRustc}" - ] - ; - - preBuild = - (args.preBuild or "") - + lib.optionalString enforceSccache '' + buildPhase = + if enforceSccache then + '' + runHook preBuild mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - ''; + export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" + rm -f "$SCCACHE_ENFORCE_MARKER" + make "''${makeFlags[@]}" "''${buildFlags[@]}" + if [ ! -e "$SCCACHE_ENFORCE_MARKER" ]; then + echo "FATAL: sccache enforcement failed during buildPhase: compiler wrappers were not invoked." + echo "This means the build stage did not use your CC/HOSTCC/HOSTCXX/RUSTC/HOSTRUSTC overrides." + exit 1 + fi + ${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true + runHook postBuild + '' + else + (args.buildPhase or '' + runHook preBuild + make "''${makeFlags[@]}" "''${buildFlags[@]}" + runHook postBuild + ''); - buildPhase = - if enforceSccache then - '' - runHook preBuild - mkdir -p ${lib.escapeShellArg sccacheDir} - export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" - rm -f "$SCCACHE_ENFORCE_MARKER" - make "''${makeFlags[@]}" "''${buildFlags[@]}" - if [ ! -e "$SCCACHE_ENFORCE_MARKER" ]; then - echo "FATAL: sccache enforcement failed during buildPhase: compiler wrappers were not invoked." - echo "This means the build stage did not use your CC/HOSTCC/HOSTCXX/RUSTC/HOSTRUSTC overrides." - exit 1 - fi - ${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true - runHook postBuild - '' - else - (args.buildPhase or '' - runHook preBuild - make "''${makeFlags[@]}" "''${buildFlags[@]}" - runHook postBuild - ''); + postBuild = args.postBuild or ""; - postBuild = args.postBuild or ""; + structuredExtraConfig = structuredExtraConfig'; - structuredExtraConfig = structuredExtraConfig'; + ignoreConfigErrors = true; - ignoreConfigErrors = true; - - extraMeta.branch = "${V}.${P}"; - } - ) -) { } + extraMeta.branch = "${V}.${P}"; + } +) From 2a93c20be25445a847d118ce5795e56cc0e82a33 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Tue, 17 Mar 2026 23:59:23 +0200 Subject: [PATCH 09/18] Normalize config-only kernel patches --- custom/modules/kernel.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index c98c319..85ab741 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -17,6 +17,8 @@ let makefile = builtins.readFile "${kernel-src}/Makefile"; lines = lib.splitString "\n" makefile; + normalizeKernelPatch = p: p // { patch = p.patch or null; }; + kernelPatches' = map normalizeKernelPatch kernelPatches; get = name: @@ -118,7 +120,8 @@ in buildLinux ( args // { - inherit kernelPatches extraConfig; + kernelPatches = kernelPatches'; + inherit extraConfig; version = kver; modDirVersion = kver; From 62f5e27dea8b596865bf7319075b5791d3929cdc Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Wed, 18 Mar 2026 21:42:19 +0200 Subject: [PATCH 10/18] sccache didn't fuck anything up, finally --- flake.lock | 24 ++++++++++++------------ todo.md | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/flake.lock b/flake.lock index ede1a9d..60ec9c0 100644 --- a/flake.lock +++ b/flake.lock @@ -46,11 +46,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1773504138, - "narHash": "sha256-CQZelDz8KtJBcY88cP9KKpqD5WNYkkwOR2U7RhW53T8=", + "lastModified": 1773711063, + "narHash": "sha256-cLdaclWQ1ValFyHUuTUoTbuglryGNvSecVnLJ3GVrng=", "owner": "sadjow", "repo": "claude-code-nix", - "rev": "57fec627abf180c338ebdf1b0c5230b59e536ce0", + "rev": "66126ac5b750446573376638ce5361bc97b9aa81", "type": "github" }, "original": { @@ -611,11 +611,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1773675540, - "narHash": "sha256-P4S7I15rxuJ+Iq7F4Z1OrMAcZaJEiIasYNioiJjc4/s=", + "lastModified": 1773725889, + "narHash": "sha256-htkVJrtaWJS7wQSXg8d26RR6jF3Iab2bYTNfvTgv05Q=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "9061fa226d41fceec5bcec72e0e7ee2282b5645e", + "rev": "9987baf8f935a1b3b2aa89a44c13b3239ecc640e", "type": "github" }, "original": { @@ -695,11 +695,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773231277, - "narHash": "sha256-Xy3WEpUAbpsz8ydgvVAQAGGB/WB+8cNA5cshiL0McTI=", + "lastModified": 1773597492, + "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "75690239f08f885ca9b0267580101f60d10fbe62", + "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773610124, - "narHash": "sha256-EpC7ELOKmb+xXaqpK5ZRpJ5g9fxxg6tWny7/rUBfrwk=", + "lastModified": 1773705440, + "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9fe1300f4360e13f39d6d1d006e54fd5093e9ad5", + "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", "type": "github" }, "original": { diff --git a/todo.md b/todo.md index 8ecde24..4dd939b 100644 --- a/todo.md +++ b/todo.md @@ -24,6 +24,7 @@ - The exact problematic arguments were confirmed with a direct `sccache clang ...` probe using the wrapper-emitted argv. - The new ccache-style `sccacheWrapper` / `sccacheStdenv` path evaluates successfully. - `intel-sycl.stdenv.cc` now also evaluates successfully with the ccache-style `sccache.links` replacement in place. +- The custom kernel helper now normalizes config-only `kernelPatches` entries to `{ patch = null; ... }` before calling `buildLinux`, which fixes `devenv shell -- build` failing during kernel evaluation. ## Next Checks @@ -33,6 +34,5 @@ - For CMake packages, the practical fallback is to export `SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1` for the whole `configurePhase` and unset it in `postConfigure`; caching matters in `buildPhase`, not in compiler-ID probes. - Apply the shared CMake helper to stalled subpackages too, not just top-level wrappers. `oneapi-math-sycl-blas` is one such case. - The same helper may also be needed on the outer package if the subpackage is fixed but the wrapper package then stalls at its own CMake configure. -- Build the patched `sccache` package. - Run a minimal hello-world derivation with the new `sccacheStdenv` and confirm repeated compiles produce cache hits. - If that works, switch current consumers to the ccache-style path and remove obsolete wrapper-patching logic. From dcce2af4aa6ef79ae86b39476119591cd82592ef Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Wed, 18 Mar 2026 21:55:25 +0200 Subject: [PATCH 11/18] Enable kernel processor vendor selection --- custom/modules/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index ff5c2ac..8daed5b 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -20,6 +20,7 @@ structuredExtraConfig = ( with lib.kernel; { + PROCESSOR_SELECT = yes; CPU_SUP_INTEL = no; CPU_SUP_HYGON = no; CPU_SUP_CENTAUR = no; From 5d957231ba024198c51d3a3b0e2488b5c8fc84d5 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Thu, 19 Mar 2026 08:23:12 +0200 Subject: [PATCH 12/18] Force kernel config overrides --- custom/modules/default.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index 8daed5b..8aeab7d 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -16,11 +16,12 @@ }); kernelPatches = [ { - name = "gpu"; + name = "cpu"; structuredExtraConfig = ( with lib.kernel; { PROCESSOR_SELECT = yes; + # CPU_SUP_INTEL = no; CPU_SUP_HYGON = no; CPU_SUP_CENTAUR = no; @@ -86,7 +87,7 @@ with lib.kernel; { BT = no; - # VLAN_8021Q = no; + HAMRADIO = lib.mkForce no; } ); } @@ -100,6 +101,17 @@ } ); } + { + name = "garbo"; + structuredExtraConfig = ( + with lib.kernel; + { + IIO = no; + GOOGLE_FIRMWARE = lib.mkForce no; + GNSS = no; + } + ); + } ]; }; } From a612e5f4476461fe96d51094be5607a52a0b82ab Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Thu, 19 Mar 2026 09:05:23 +0200 Subject: [PATCH 13/18] Create kernel sccache dir in wrappers --- custom/modules/kernel.nix | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 85ab741..210fc87 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -73,11 +73,17 @@ let dir = "${sccacheDir}" size = "100G" ''; + sccacheSetup = lib.optionalString enforceSccache '' + mkdir -p ${lib.escapeShellArg sccacheDir} + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} + ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} + ''; mkSccacheWrapper = name: compiler: pkgs.writeShellScriptBin name '' set -euo pipefail + mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -91,6 +97,7 @@ let hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail + mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -101,6 +108,7 @@ let hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail + mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -152,21 +160,14 @@ buildLinux ( ] ; - preBuild = - (args.preBuild or "") - + lib.optionalString enforceSccache '' - mkdir -p ${lib.escapeShellArg sccacheDir} - export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} - ''; + preConfigure = (args.preConfigure or "") + sccacheSetup; + + preBuild = (args.preBuild or "") + sccacheSetup; buildPhase = if enforceSccache then '' runHook preBuild - mkdir -p ${lib.escapeShellArg sccacheDir} - export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used" rm -f "$SCCACHE_ENFORCE_MARKER" make "''${makeFlags[@]}" "''${buildFlags[@]}" From b58418b8497fa5716e76b0d079f37220bbe44ae1 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Thu, 19 Mar 2026 09:33:24 +0200 Subject: [PATCH 14/18] Expose sccache build cache dirs --- flake.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/flake.nix b/flake.nix index cc4b9c0..fa5f52c 100644 --- a/flake.nix +++ b/flake.nix @@ -128,12 +128,18 @@ extra-sandbox-paths = [ "/run/sccache" "/var/cache/sccache" + "/var/cache/sccache/nix-builds" + "/var/cache/sccache/nix-builds/packages" + "/var/cache/sccache/nix-builds/kernel" ]; download-buffer-size = 160000000; }; systemd.tmpfiles.rules = [ # setgid, чтобы файлы/папки сохраняли группу nixbld "d /var/cache/sccache 2770 root nixbld - -" + "d /var/cache/sccache/nix-builds 2770 root nixbld - -" + "d /var/cache/sccache/nix-builds/packages 2770 root nixbld - -" + "d /var/cache/sccache/nix-builds/kernel 2770 root nixbld - -" ]; systemd.services.sccache = { description = "Shared sccache server for Nix builds"; From a2e09699a6876b5893ceb80f24a4da32fdf1bc1d Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Fri, 20 Mar 2026 00:15:53 +0200 Subject: [PATCH 15/18] unfucked kernel again --- custom/modules/default.nix | 32 +++++++++++++++++------- custom/modules/kernel.nix | 8 +++--- flake.lock | 50 +++++++++++++++++++------------------- flake.nix | 2 +- todo.md | 2 ++ 5 files changed, 55 insertions(+), 39 deletions(-) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index 8aeab7d..d338f67 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -6,14 +6,16 @@ }: { boot = { - kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./kernel.nix { - inherit lib kernel-src; - structuredExtraConfig = { }; - kernelPatches = [ ]; - extraConfig = ""; - features = { }; - randstructSeed = null; - }); + kernelPackages = pkgs.linuxPackagesFor ( + pkgs.callPackage ./kernel.nix { + inherit lib kernel-src; + structuredExtraConfig = { }; + kernelPatches = [ ]; + extraConfig = ""; + features = { }; + randstructSeed = null; + } + ); kernelPatches = [ { name = "cpu"; @@ -107,8 +109,20 @@ with lib.kernel; { IIO = no; - GOOGLE_FIRMWARE = lib.mkForce no; + # GNSS = no; + # + GOOGLE_FIRMWARE = lib.mkForce no; + # + TRACING = no; + FUNCTION_GRAPH_TRACER = no; + DYNAMIC_FTRACE = no; + # + FTRACE = lib.mkForce no; + FUNCTION_PROFILER = lib.mkForce no; + FUNCTION_TRACER = lib.mkForce no; + SCHED_TRACER = lib.mkForce no; + STACK_TRACER = lib.mkForce no; } ); } diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 210fc87..f9b4e22 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -74,7 +74,7 @@ let size = "100G" ''; sccacheSetup = lib.optionalString enforceSccache '' - mkdir -p ${lib.escapeShellArg sccacheDir} + # mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} ''; @@ -83,7 +83,7 @@ let name: compiler: pkgs.writeShellScriptBin name '' set -euo pipefail - mkdir -p ${lib.escapeShellArg sccacheDir} + # mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -97,7 +97,7 @@ let hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - mkdir -p ${lib.escapeShellArg sccacheDir} + # mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -108,7 +108,7 @@ let hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - mkdir -p ${lib.escapeShellArg sccacheDir} + # mkdir -p ${lib.escapeShellArg sccacheDir} export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then diff --git a/flake.lock b/flake.lock index 60ec9c0..329724f 100644 --- a/flake.lock +++ b/flake.lock @@ -46,11 +46,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1773711063, - "narHash": "sha256-cLdaclWQ1ValFyHUuTUoTbuglryGNvSecVnLJ3GVrng=", + "lastModified": 1773875165, + "narHash": "sha256-pPSaTA/vwZRmH/oXGkx1GLF4kFAdCXRzwFNJlLlCTQc=", "owner": "sadjow", "repo": "claude-code-nix", - "rev": "66126ac5b750446573376638ce5361bc97b9aa81", + "rev": "c2186a8096247357c77aaa067e14ee39ce45ac8d", "type": "github" }, "original": { @@ -451,11 +451,11 @@ ] }, "locked": { - "lastModified": 1773681856, - "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", + "lastModified": 1773810247, + "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", + "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", "type": "github" }, "original": { @@ -540,16 +540,16 @@ "kernel-src": { "flake": false, "locked": { - "lastModified": 1773493865, - "narHash": "sha256-3f17iyo1Dh96KKPYLAGFAUQxVZrxe06ne2uy/Y3FPuE=", + "lastModified": 1773844285, + "narHash": "sha256-vOF2HIA1J5Ktzt2aYqGPBv3AEQb0ziORKRQIOj+6h04=", "ref": "refs/heads/drm-tip", - "rev": "bbe6ae2e40f59b05f04a75989b3b3bbb005342a2", + "rev": "61409ba11a36fa5aff4ce0f0086a6026a43c5bce", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" }, "original": { - "rev": "bbe6ae2e40f59b05f04a75989b3b3bbb005342a2", + "rev": "61409ba11a36fa5aff4ce0f0086a6026a43c5bce", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" @@ -611,11 +611,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1773725889, - "narHash": "sha256-htkVJrtaWJS7wQSXg8d26RR6jF3Iab2bYTNfvTgv05Q=", + "lastModified": 1773889880, + "narHash": "sha256-cu23CGP+mD2wKPKaoGM7evZ1dXfjd+cjryqqqx2HloE=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "9987baf8f935a1b3b2aa89a44c13b3239ecc640e", + "rev": "63767d4572eb2e3da5e68f68de77d8f2cdeca8dd", "type": "github" }, "original": { @@ -695,11 +695,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773597492, - "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", + "lastModified": 1773628058, + "narHash": "sha256-hpXH0z3K9xv0fHaje136KY872VT2T5uwxtezlAskQgY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", + "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773705440, - "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", + "lastModified": 1773814637, + "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", + "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", "type": "github" }, "original": { @@ -787,11 +787,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1773646010, - "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { @@ -1015,11 +1015,11 @@ ] }, "locked": { - "lastModified": 1773673214, - "narHash": "sha256-cjdDXKuMFO9mtBr1jCQsfKMsPBUdbG/8Hklhym29X5k=", + "lastModified": 1773852796, + "narHash": "sha256-aEriBf9qkKeUoICKuxOj9e1GE8PZEnKke83+TzXpBT8=", "owner": "mozilla", "repo": "sccache", - "rev": "7b751fccd4e3dfc4e16564f967dae306649dee0b", + "rev": "8d6cab9ee9356ff4054409c60f7a607cb798de03", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fa5f52c..a9368b1 100644 --- a/flake.nix +++ b/flake.nix @@ -24,7 +24,7 @@ nix-flatpak.url = "github:gmodena/nix-flatpak/latest"; kernel-src = { # url = "git+https://gitlab.freedesktop.org/drm/tip.git?shallow=1"; - url = "git+https://gitlab.freedesktop.org/drm/tip.git?rev=bbe6ae2e40f59b05f04a75989b3b3bbb005342a2&shallow=1"; + url = "git+https://gitlab.freedesktop.org/drm/tip.git?rev=61409ba11a36fa5aff4ce0f0086a6026a43c5bce&shallow=1"; flake = false; }; sccache = { diff --git a/todo.md b/todo.md index 4dd939b..be09aea 100644 --- a/todo.md +++ b/todo.md @@ -25,6 +25,8 @@ - The new ccache-style `sccacheWrapper` / `sccacheStdenv` path evaluates successfully. - `intel-sycl.stdenv.cc` now also evaluates successfully with the ccache-style `sccache.links` replacement in place. - The custom kernel helper now normalizes config-only `kernelPatches` entries to `{ patch = null; ... }` before calling `buildLinux`, which fixes `devenv shell -- build` failing during kernel evaluation. +- The kernel build does invoke `sccache` during live builds, but relying on the in-sandbox wrapper to create `/var/cache/sccache/nix-builds/kernel` made host-side observation ambiguous. +- The host NixOS config should create and expose `/var/cache/sccache/nix-builds/{packages,kernel}` explicitly so sandboxed builds and host-side inspection see the same cache paths. ## Next Checks From 8087397b9911484e514cbccac64d61cba0e6d7c3 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Fri, 20 Mar 2026 00:51:30 +0200 Subject: [PATCH 16/18] Harden kernel sccache dir setup --- custom/modules/kernel.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index f9b4e22..5ff3552 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -74,7 +74,7 @@ let size = "100G" ''; sccacheSetup = lib.optionalString enforceSccache '' - # mkdir -p ${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} ''; @@ -83,7 +83,7 @@ let name: compiler: pkgs.writeShellScriptBin name '' set -euo pipefail - # mkdir -p ${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -97,7 +97,7 @@ let hostcxxSccache = mkSccacheWrapper "c++" realHostCXX; rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - # mkdir -p ${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then @@ -108,7 +108,7 @@ let hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail - # mkdir -p ${lib.escapeShellArg sccacheDir} + mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then From db6b064662699f84623d4a0927f53ef6e9d85a13 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Fri, 20 Mar 2026 01:10:45 +0200 Subject: [PATCH 17/18] Disable kernel tracing stack --- custom/modules/default.nix | 8 ++++---- todo.md | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/custom/modules/default.nix b/custom/modules/default.nix index d338f67..064292a 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -114,13 +114,13 @@ # GOOGLE_FIRMWARE = lib.mkForce no; # - TRACING = no; - FUNCTION_GRAPH_TRACER = no; - DYNAMIC_FTRACE = no; - # + TRACING = lib.mkForce no; FTRACE = lib.mkForce no; + FUNCTION_GRAPH_TRACER = lib.mkForce no; + DYNAMIC_FTRACE = lib.mkForce no; FUNCTION_PROFILER = lib.mkForce no; FUNCTION_TRACER = lib.mkForce no; + CONTEXT_SWITCH_TRACER = lib.mkForce no; SCHED_TRACER = lib.mkForce no; STACK_TRACER = lib.mkForce no; } diff --git a/todo.md b/todo.md index be09aea..ecc22a0 100644 --- a/todo.md +++ b/todo.md @@ -27,6 +27,7 @@ - The custom kernel helper now normalizes config-only `kernelPatches` entries to `{ patch = null; ... }` before calling `buildLinux`, which fixes `devenv shell -- build` failing during kernel evaluation. - The kernel build does invoke `sccache` during live builds, but relying on the in-sandbox wrapper to create `/var/cache/sccache/nix-builds/kernel` made host-side observation ambiguous. - The host NixOS config should create and expose `/var/cache/sccache/nix-builds/{packages,kernel}` explicitly so sandboxed builds and host-side inspection see the same cache paths. +- The kernel `fentry` failure was caused by tracing options being enabled indirectly. Forcing `TRACING`, `FTRACE`, `FUNCTION_TRACER`, `FUNCTION_GRAPH_TRACER`, `DYNAMIC_FTRACE`, `FUNCTION_PROFILER`, `CONTEXT_SWITCH_TRACER`, `SCHED_TRACER`, and `STACK_TRACER` to `no` got the build past the old `Compiler does not support fentry?` stop and into real kernel compilation. ## Next Checks @@ -38,3 +39,4 @@ - The same helper may also be needed on the outer package if the subpackage is fixed but the wrapper package then stalls at its own CMake configure. - Run a minimal hello-world derivation with the new `sccacheStdenv` and confirm repeated compiles produce cache hits. - If that works, switch current consumers to the ccache-style path and remove obsolete wrapper-patching logic. +- After the host Nix daemon picks up the new sandbox path config, re-check kernel cache growth under `/var/cache/sccache/nix-builds/kernel` during a bounded kernel build. From 7fa7351aa7ae83c507b19a75613fba3b0bd71f97 Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Sat, 21 Mar 2026 00:09:30 +0200 Subject: [PATCH 18/18] fixup --- devenv.lock | 18 +++++++++--------- flake.lock | 18 +++++++++--------- home.nix | 42 ++++++++++++++++++++++++++++++++---------- 3 files changed, 50 insertions(+), 28 deletions(-) diff --git a/devenv.lock b/devenv.lock index 7f4683d..76121c9 100644 --- a/devenv.lock +++ b/devenv.lock @@ -3,11 +3,11 @@ "devenv": { "locked": { "dir": "src/modules", - "lastModified": 1773254376, - "narHash": "sha256-r83T23qeZej7Wvr60Od/0qHTmhQc9VzKFTAFRtOKr4k=", + "lastModified": 1773937316, + "narHash": "sha256-1Ou0hiagyj7urRqWZgPW51VdcaCcM3GUwrMBHQ27stU=", "owner": "cachix", "repo": "devenv", - "rev": "bb0de08e03d5ff271dbd8c9ecb795dc67d22ffdc", + "rev": "450735a11ddd934e923aaea8b693336d31e7df32", "type": "github" }, "original": { @@ -22,11 +22,11 @@ "nixpkgs-src": "nixpkgs-src" }, "locked": { - "lastModified": 1772749504, - "narHash": "sha256-eqtQIz0alxkQPym+Zh/33gdDjkkch9o6eHnMPnXFXN0=", + "lastModified": 1773704619, + "narHash": "sha256-LKtmit8Sr81z8+N2vpIaN/fyiQJ8f7XJ6tMSKyDVQ9s=", "owner": "cachix", "repo": "devenv-nixpkgs", - "rev": "08543693199362c1fddb8f52126030d0d374ba2e", + "rev": "906534d75b0e2fe74a719559dfb1ad3563485f43", "type": "github" }, "original": { @@ -39,11 +39,11 @@ "nixpkgs-src": { "flake": false, "locked": { - "lastModified": 1772173633, - "narHash": "sha256-MOH58F4AIbCkh6qlQcwMycyk5SWvsqnS/TCfnqDlpj4=", + "lastModified": 1773597492, + "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c0f3d81a7ddbc2b1332be0d8481a672b4f6004d6", + "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", "type": "github" }, "original": { diff --git a/flake.lock b/flake.lock index 329724f..9af7736 100644 --- a/flake.lock +++ b/flake.lock @@ -46,11 +46,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1773875165, - "narHash": "sha256-pPSaTA/vwZRmH/oXGkx1GLF4kFAdCXRzwFNJlLlCTQc=", + "lastModified": 1773961521, + "narHash": "sha256-enhjd1AcHHU+3RCRdSWVQj6TIqRXkJUbQSFVXzC6xLo=", "owner": "sadjow", "repo": "claude-code-nix", - "rev": "c2186a8096247357c77aaa067e14ee39ce45ac8d", + "rev": "1519be1f77ed017ae4a88916ac54529cef885573", "type": "github" }, "original": { @@ -176,11 +176,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1773492089, - "narHash": "sha256-ZKzjqbc4vAivOptaxEsfWt9yoD7rmlYVyTgr168+sdc=", + "lastModified": 1773921118, + "narHash": "sha256-ZBb59LTDi00YbqtEv4WGELVQp1OVUuIKsH1OFj3ccJs=", "owner": "imaviso", "repo": "dwproton-flake", - "rev": "ec94234a5c7d185855975c5854115c7cacef7323", + "rev": "f32d216870fcbc4a3a24764f39bbbaa3991f7f53", "type": "github" }, "original": { @@ -451,11 +451,11 @@ ] }, "locked": { - "lastModified": 1773810247, - "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", + "lastModified": 1774007980, + "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", "owner": "nix-community", "repo": "home-manager", - "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", + "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index b698aee..ff4c22c 100644 --- a/home.nix +++ b/home.nix @@ -122,13 +122,21 @@ }; sessionVariablesExtra = '' if [ -r /run/agenix/openrouter-open.key.age ]; then - export OPENROUTER_API_KEY="$(cat /run/agenix/openrouter-open.key.age)" - export ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY" - export \ - ANTHROPIC_BASE_URL="https://openrouter.ai/api" \ + OPENROUTER_API_KEY="$(cat /run/agenix/openrouter-open.key.age)" \ + OPENROUTER_BASE_URL="https://openrouter.ai/api" + + # anthropic api + export \ + ANTHROPIC_BASE_URL="$OPENROUTER_BASE_URL" \ ANTHROPIC_API_KEY="" \ + ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY" \ ANTHROPIC_MODEL="openrouter/free" + + # openai api + # export \ + # OPENAI_API_BASE="$OPENROUTER_BASE_URL" \ + # OPENAI_API_KEY="$OPENROUTER_API_KEY" fi ''; file = { @@ -390,8 +398,10 @@ "mcp-server-qdrant" ]; enabled = true; - timeout = 5000; + timeout = 15000; environment = { + # NumPy from uvx needs libstdc++.so.6 on NixOS. + LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.stdenv.cc.cc ]; QDRANT_URL = "http://127.0.0.1:6333"; COLLECTION_NAME = "opencode_memory"; @@ -447,11 +457,23 @@ autoupdate = false; share = "manual"; - server = { - port = 4096; - hostname = "127.0.0.1"; - }; + # server = { + # port = 4096; + # hostname = "127.0.0.1"; + # }; provider = { + "openrouter" = { + # npm = "@ai-sdk/openai-compatible"; + # name = "openrouter/free"; + # options = { + # baseURL = "https://openrouter.ai/api/v1"; + # }; + models = { + "openrouter/free" = { + + }; + }; + }; "ollama" = { npm = "@ai-sdk/openai-compatible"; name = "Ollama (local)"; @@ -901,7 +923,7 @@ local wezterm = require 'wezterm' keys = { { key = 'F', mods = 'CTRL|SHIFT', action = wezterm.action.Search({ CaseInSensitiveString = "" }) } } - + local config = wezterm.config_builder()