diff --git a/custom/modules/default.nix b/custom/modules/default.nix index 064292a..532fd92 100644 --- a/custom/modules/default.nix +++ b/custom/modules/default.nix @@ -123,6 +123,9 @@ CONTEXT_SWITCH_TRACER = lib.mkForce no; SCHED_TRACER = lib.mkForce no; STACK_TRACER = lib.mkForce no; + # + CXL = no; + } ); } diff --git a/custom/modules/kernel.nix b/custom/modules/kernel.nix index 5ff3552..ee988fa 100644 --- a/custom/modules/kernel.nix +++ b/custom/modules/kernel.nix @@ -73,24 +73,27 @@ let dir = "${sccacheDir}" size = "100G" ''; - sccacheSetup = lib.optionalString enforceSccache '' - 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}"} - ''; - mkSccacheWrapper = name: compiler: - pkgs.writeShellScriptBin name '' - set -euo pipefail - 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 - : > "''${SCCACHE_ENFORCE_MARKER}" - fi - exec ${pkgs.sccache}/bin/sccache ${compiler} "$@" - ''; + pkgs.runCommand "${name}-sccache-wrapper" + { + passthru.meta.mainProgram = name; + } + '' + mkdir -p $out/bin + cat > $out/bin/${name} <<'WRAP' + #!${pkgs.bash}/bin/bash + exec ${pkgs.sccache}/bin/sccache ${compiler} "$@" + WRAP + chmod +x $out/bin/${name} + ''; + sccacheSetup = lib.optionalString enforceSccache '' + mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true + mkdir -p "$NIX_BUILD_TOP/.sccache/preprocessor" 2>/dev/null || true + export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} + export SCCACHE_LOCAL_PREPROCESSOR_CACHE_DIR="$NIX_BUILD_TOP/.sccache/preprocessor" + export SCCACHE_NO_DAEMON=1 + ''; clangSccache = mkSccacheWrapper "clang" realClang; hostccSccache = mkSccacheWrapper "cc" realHostCC; @@ -98,8 +101,13 @@ let rustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true + mkdir -p "$NIX_BUILD_TOP/.sccache/preprocessor" 2>/dev/null || true export SCCACHE_CONF=${lib.escapeShellArg sccacheConfig} - ${lib.optionalString (sccacheServerUds != null) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} + export SCCACHE_LOCAL_PREPROCESSOR_CACHE_DIR="$NIX_BUILD_TOP/.sccache/preprocessor" + export SCCACHE_NO_DAEMON=1 + ${lib.optionalString ( + sccacheServerUds != null + ) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} if [ -n "''${SCCACHE_ENFORCE_MARKER-}" ]; then : > "''${SCCACHE_ENFORCE_MARKER}" fi @@ -109,12 +117,13 @@ let hostrustcSccache = pkgs.writeShellScriptBin "rustc" '' set -euo pipefail mkdir -p ${lib.escapeShellArg sccacheDir} 2>/dev/null || true + mkdir -p "$NIX_BUILD_TOP/.sccache/preprocessor" 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 - : > "''${SCCACHE_ENFORCE_MARKER}" - fi - exec ${pkgs.sccache}/bin/sccache ${realHostRustc} "$@" + export SCCACHE_LOCAL_PREPROCESSOR_CACHE_DIR="$NIX_BUILD_TOP/.sccache/preprocessor" + export SCCACHE_NO_DAEMON=1 + ${lib.optionalString ( + sccacheServerUds != null + ) "export SCCACHE_SERVER_UDS=${lib.escapeShellArg sccacheServerUds}"} ''; structuredExtraConfig' = @@ -125,7 +134,7 @@ let }) // structuredExtraConfig; in -buildLinux ( +(buildLinux ( args // { kernelPatches = kernelPatches'; @@ -138,55 +147,24 @@ buildLinux ( 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}" - ] - ; - - preConfigure = (args.preConfigure or "") + sccacheSetup; - - preBuild = (args.preBuild or "") + sccacheSetup; - - buildPhase = - if enforceSccache then - '' - runHook preBuild - 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 ""; + extraMakeFlags = (args.extraMakeFlags or [ ]) ++ [ + "LLVM=1" + "LLVM_IAS=1" + "CC=${lib.getExe clangSccache}" + "LD=${realLd}" + "AR=${realAr}" + "NM=${realNm}" + "STRIP=${realStrip}" + "OBJCOPY=${realObjcopy}" + "OBJDUMP=${realObjdump}" + "READELF=${realReadelf}" + "HOSTCC=${lib.getExe hostccSccache}" + "HOSTCXX=${lib.getExe hostcxxSccache}" + "HOSTAR=${realHostAr}" + "HOSTLD=${realHostLd}" + "RUSTC=${lib.getExe rustcSccache}" + "HOSTRUSTC=${lib.getExe hostrustcSccache}" + ]; structuredExtraConfig = structuredExtraConfig'; @@ -194,4 +172,51 @@ buildLinux ( extraMeta.branch = "${V}.${P}"; } -) +)).overrideAttrs + (old: { + __noChroot = true; + postPatch = + (old.postPatch or "") + + sccacheSetup + + lib.optionalString enforceSccache '' + # -- Sccache caching smoke test -- + echo "==> Testing sccache caching..." + SCCACHE_TEST_SRC="$NIX_BUILD_TOP/.sccache-test.c" + SCCACHE_TEST_OBJ="$NIX_BUILD_TOP/.sccache-test.o" + SCCACHE_TEST_ID=$(date +%s%N) + printf '// sccache smoke test %s\nint main(void) { return 0; }\n' "$SCCACHE_TEST_ID" > "$SCCACHE_TEST_SRC" + ${pkgs.sccache}/bin/sccache --zero-stats >/dev/null 2>&1 || true + + ${lib.getExe clangSccache} -c "$SCCACHE_TEST_SRC" -o "$SCCACHE_TEST_OBJ" 2>&1 + STATS1=$(${pkgs.sccache}/bin/sccache --show-stats --stats-format json 2>/dev/null || echo '{}') + COMPILED=$(echo "$STATS1" | ${pkgs.jq}/bin/jq '[.stats.cache_hits.counts // {}, .stats.cache_misses.counts // {}] | add | to_entries | map(.value) | add // 0' 2>/dev/null || echo 0) + WRITE_ERRORS=$(echo "$STATS1" | ${pkgs.jq}/bin/jq '.stats.cache_errors.counts // {} | to_entries | map(.value) | add // 0' 2>/dev/null || echo 0) + + if [ "$COMPILED" -lt 1 ]; then + echo "FATAL: sccache first compile was not cached." + ${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true + exit 1 + fi + if [ "$WRITE_ERRORS" -gt 0 ]; then + echo "FATAL: sccache cache write errors detected ($WRITE_ERRORS)." + ${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true + exit 1 + fi + echo "==> sccache first compile OK (cached=$COMPILED, write_errors=$WRITE_ERRORS)" + + rm -f "$SCCACHE_TEST_OBJ" + ${lib.getExe clangSccache} -c "$SCCACHE_TEST_SRC" -o "$SCCACHE_TEST_OBJ" 2>&1 + STATS2=$(${pkgs.sccache}/bin/sccache --show-stats --stats-format json 2>/dev/null || echo '{}') + HITS=$(echo "$STATS2" | ${pkgs.jq}/bin/jq '.stats.cache_hits.counts // {} | to_entries | map(.value) | add // 0' 2>/dev/null || echo 0) + + if [ "$HITS" -lt 1 ]; then + echo "FATAL: sccache second compile did not hit cache." + ${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true + exit 1 + fi + echo "==> sccache cache hit OK (hits=$HITS)" + rm -f "$SCCACHE_TEST_SRC" "$SCCACHE_TEST_OBJ" + ${pkgs.sccache}/bin/sccache --zero-stats >/dev/null 2>&1 || true + # -- End sccache caching smoke test -- + ''; + }) diff --git a/custom/override.nix b/custom/override.nix index 718a932..fd06c2d 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -2,6 +2,22 @@ final: prev: let winePkg = final.wineWow64Packages.full; sandboxSccacheDir = "/var/cache/sccache/nix-builds/packages"; + # Toggle this to switch between shared socketed sccache and per-build daemon mode. + # Shared socketed mode still fails for sandboxed package builds; keep disabled. + useSocketedSccache = false; + sharedSccacheServerUds = "/run/sccache/server.sock"; + effectiveSccacheServerUds = if useSocketedSccache then sharedSccacheServerUds else null; + sccacheRuntimeModeSetup = '' + unset SCCACHE_NO_DAEMON + ${final.lib.optionalString (effectiveSccacheServerUds != null) '' + export SCCACHE_SERVER_UDS=${final.lib.escapeShellArg effectiveSccacheServerUds} + unset SCCACHE_IDLE_TIMEOUT + ''} + ${final.lib.optionalString (effectiveSccacheServerUds == null) '' + unset SCCACHE_SERVER_UDS + export SCCACHE_IDLE_TIMEOUT=0 + ''} + ''; sharedSccacheConfig = final.writeText "sccache.conf" '' [cache.disk] dir = "${sandboxSccacheDir}" @@ -82,9 +98,10 @@ let { name, sccacheDir ? null, - sccacheServerUds ? null, + sccacheServerUds ? effectiveSccacheServerUds, sccacheCacheSize ? "100G", noDaemon ? false, + bypassIfCmakeLauncher ? false, passthroughWrappedCompiler ? false, extraSetup ? "", }: @@ -125,7 +142,18 @@ let return 1 } + has_cmake_compiler_launcher() { + [ -n "''${CMAKE_C_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_CXX_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_Fortran_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_CUDA_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_HIP_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_OBJC_COMPILER_LAUNCHER:-}" ] \ + || [ -n "''${CMAKE_OBJCXX_COMPILER_LAUNCHER:-}" ] + } + export SCCACHE_CONF=${final.lib.escapeShellArg effectiveSccacheConfig} + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} unset SCCACHE_START_SERVER ${final.lib.optionalString noDaemon '' export SCCACHE_NO_DAEMON=1 @@ -134,15 +162,24 @@ let ${final.lib.optionalString (!noDaemon && sccacheServerUds != null) '' export SCCACHE_SERVER_UDS=${final.lib.escapeShellArg sccacheServerUds} ''} + ${final.lib.optionalString (!noDaemon && sccacheServerUds == null) '' + unset SCCACHE_SERVER_UDS + unset SCCACHE_NO_DAEMON + ''} ${extraSetup} - if [ "$#" -eq 0 ] || [ "''${1#-}" != "$1" ]; then + if [ "$#" -eq 0 ]; then + exit 0 + fi + if [ "''${1#-}" != "$1" ]; then exec ${final.sccache}/bin/sccache "$@" fi compiler="$1" shift - if [ "''${SCCACHE_WRAPPED_COMPILER_PASSTHROUGH:-}" = 1 ] || { + if [ "''${SCCACHE_WRAPPED_COMPILER_PASSTHROUGH:-}" = 1 ] \ + || { [ ${if bypassIfCmakeLauncher then "1" else "0"} -eq 1 ] && has_cmake_compiler_launcher; } \ + || { is_cmake_derivation && is_cmake_probe_invocation "$@" }; then exec "$compiler" "$@" @@ -156,35 +193,20 @@ let buildSccacheLauncher = mkSccacheLauncher { name = "build-sccache"; }; - mkBuildSccacheAttrs = - old: - { - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ buildSccacheLauncher ]; + mkBuildSccacheAttrs = old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ buildSccacheLauncher ]; - preConfigure = (old.preConfigure or "") + '' + preConfigure = (old.preConfigure or "") + '' - mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} - 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 - ''; + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} + ${sccacheRuntimeModeSetup} + ''; - postBuild = (old.postBuild or "") + '' + postBuild = (old.postBuild or "") + '' - ${buildSccacheLauncher}/bin/build-sccache --show-stats --stats-format text || true - ${buildSccacheLauncher}/bin/build-sccache --stop-server || true - ''; - }; + ${buildSccacheLauncher}/bin/build-sccache --show-stats --stats-format text || true + ''; + }; mkCmakeSccacheAttrs = old: let @@ -204,19 +226,7 @@ let preConfigure = (old.preConfigure or "") + '' mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1 - 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 + ${sccacheRuntimeModeSetup} ''; postConfigure = (old.postConfigure or "") + '' @@ -226,9 +236,24 @@ let postBuild = (old.postBuild or "") + '' ${sccacheLauncher}/bin/cmake-sccache --show-stats --stats-format text || true - ${sccacheLauncher}/bin/cmake-sccache --stop-server || true ''; }; + mkCmakeSccacheWithLlvmTargetAttrs = + llvmTarget: old: + let + base = mkCmakeSccacheAttrs old; + targetFlag = "-DLLVM_TARGETS_TO_BUILD=${llvmTarget}"; + hasTargetFlag = flag: final.lib.hasPrefix "-DLLVM_TARGETS_TO_BUILD=" flag; + replacedFlags = map (flag: if hasTargetFlag flag then targetFlag else flag) ( + base.cmakeFlags or [ ] + ); + withTargetFlag = + replacedFlags ++ final.lib.optional (!(final.lib.any hasTargetFlag replacedFlags)) targetFlag; + in + base + // { + cmakeFlags = withTargetFlag; + }; mkSccacheExtraConfig = { sccacheDir ? sandboxSccacheDir, @@ -243,8 +268,7 @@ let size = "100G" '' )} - export SCCACHE_NO_DAEMON=1 - unset SCCACHE_SERVER_UDS + ${sccacheRuntimeModeSetup} ${extraConfig} ''; mkWrappedCcForSccache = @@ -271,31 +295,39 @@ let sccacheDir ? "/var/cache/sccache/nix-builds/packages", extraConfig ? "", }: - final.overrideCC stdenv ( - mkWrappedCcForSccache { - inherit (stdenv) cc; - extraConfig = mkSccacheExtraConfig { - inherit extraConfig sccacheDir; - }; - } - ); + 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),' + 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),' + ''; + env = (old.env or { }) // { + RUSTC_WRAPPER = "${prev.sccache}/bin/sccache"; + SCCACHE_CONF = sharedSccacheConfig; + }; + preBuild = (old.preBuild or "") + '' + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} ''; passthru = (old.passthru or { }) // { links = - { unwrappedCC, extraConfig ? "" }: + { + unwrappedCC, + extraConfig ? "", + }: let sccacheLauncher = mkSccacheLauncher { name = "wrapped-sccache"; - noDaemon = true; + bypassIfCmakeLauncher = true; extraSetup = extraConfig; }; in @@ -308,7 +340,8 @@ in isSccache = true; dev = unwrappedCC.dev or null; lib = unwrappedCC.lib or (final.lib.getLib unwrappedCC); - } // final.lib.optionalAttrs (unwrappedCC ? rsrc) { + } + // final.lib.optionalAttrs (unwrappedCC ? rsrc) { inherit (unwrappedCC) rsrc; }; dev = unwrappedCC.dev or null; @@ -362,44 +395,78 @@ in }; }); sccacheWrapper = - final.lib.makeOverridable ( + final.lib.makeOverridable + ( + { + extraConfig ? "", + cc, + }: + mkWrappedCcForSccache { + inherit cc extraConfig; + } + ) { - extraConfig ? "", - cc, - }: - mkWrappedCcForSccache { - inherit cc extraConfig; - } - ) { - extraConfig = ""; - inherit (final.stdenv) cc; - }; + 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; - } + 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; - } + { + inherit (final) stdenv; + } ); 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; + intel-sycl = modify prev.intel-sycl ( + syFinal: syPrev: + let + llvmTargetForHost = + if syFinal.stdenv.hostPlatform.isx86_64 || syFinal.stdenv.hostPlatform.isi686 then + "X86" + else if syFinal.stdenv.hostPlatform.isAarch64 then + "AArch64" + else if syFinal.stdenv.hostPlatform.isRiscV64 then + "RISCV" + else if syFinal.stdenv.hostPlatform.isPower64 then + "PowerPC" + else + "Native"; + sccacheWrappedDpcpp = final.sccache.links { + unwrappedCC = syFinal.dpcpp-compat; + extraConfig = mkSccacheExtraConfig { }; }; + sccacheWrappedCompatStdenv = final.overrideCC syPrev.compatStdenv sccacheWrappedDpcpp; + # Inject sccache into stdenv without wrapping the compiler + # (avoids sccache-links-wrapper depending on intel-llvm-nightly directly) + sccacheStdenv = syPrev.stdenv.override (old: { + extraNativeBuildInputs = (old.extraNativeBuildInputs or [ ]) ++ [ final.sccache ]; + preHook = (old.preHook or "") + '' + export SCCACHE_CONF=${final.lib.escapeShellArg sharedSccacheConfig} + ${final.coreutils}/bin/mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} + export RUSTC_WRAPPER="${final.sccache}/bin/sccache" + ''; + }); + in + { + llvm = modify syPrev.llvm (mkCmakeSccacheWithLlvmTargetAttrs llvmTargetForHost); + lld = modify syPrev.lld (mkCmakeSccacheWithLlvmTargetAttrs llvmTargetForHost); + stdenv = sccacheStdenv; + compatStdenv = sccacheWrappedCompatStdenv; } ); # xdg-desktop-portal-cosmic = prev.xdg-desktop-portal-cosmic.overrideAttrs (old: { @@ -413,7 +480,7 @@ in codex = modify prev.codex ( old: let - version = "0.114.0"; + version = "0.116.0"; in (versionBumpAttrs old.version version ( let @@ -421,8 +488,8 @@ in owner = "openai"; repo = "codex"; tag = "rust-v${version}"; - hash = "sha256-7t+mVwP4+YrG1ciI+OLqsK7TUM9SrDbPsJNrt26iy9c="; - #hash = ""; + hash = "sha256-PTsKphg3gPlBUs5oMM34RhJJ4jxvD6hand5aVjXcuZ4="; + # hash = ""; }; in { @@ -432,8 +499,8 @@ in cargoDeps = prev.rustPlatform.fetchCargoVendor { inherit src; sourceRoot = "${src.name}/codex-rs"; - hash = "sha256-XThIexu3V18JG4OtyvYmybaRMctYpDuBLLH+lUvrtt8="; - #hash = prev.lib.fakeHash; + hash = "sha256-X5Yh8+3UrCZfzIplb4OzFfcfoklMu3FikU9vZ6CJbfc="; + # hash = prev.lib.fakeHash; }; } )) @@ -441,162 +508,165 @@ in buildInputs = (old.buildInputs or [ ]) ++ [ prev.libcap ]; preBuild = (old.preBuild or "") + '' + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} export CARGO_PROFILE_RELEASE_LTO=thin export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=8 ''; + + env = (old.env or { }) // { + RUSTC_WRAPPER = "${final.sccache}/bin/sccache"; + SCCACHE_CONF = sharedSccacheConfig; + }; } ); - 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 ( + # 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 = "${baseGnFlags} 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 "") + '' + + # 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; + # }; + electron_39 = prev.electron_39-bin; + oneapi-ccl = + modify + (prev.oneapi-ccl.override { + intel-sycl = final."intel-sycl"; + }) + ( 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 = - "${baseGnFlags} cc_wrapper=\"${buildSccacheLauncher}/bin/build-sccache\""; + 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 - 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 "") + '' + (versionBumpAttrs old.version version { + inherit version; - 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 + 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; + }; } ); - 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-math-sycl-blas = modify prev.oneapi-math-sycl-blas ( - old: mkCmakeSccacheAttrs old - ); - oneapi-math = modify prev.oneapi-math ( - old: mkCmakeSccacheAttrs old - ); + oneapi-math-sycl-blas = modify prev.oneapi-math-sycl-blas (old: mkCmakeSccacheAttrs old); + oneapi-math = modify prev.oneapi-math (old: mkCmakeSccacheAttrs old); oneapi-dpl = let version = "2022.11.1"; in - modify prev.oneapi-dpl (old: + modify prev.oneapi-dpl ( + old: (versionBumpAttrs old.version version { inherit version; @@ -647,21 +717,21 @@ inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector/dev/null || true + cp -v ${kernelSrc}/include/uapi/drm/xe_drm.h $out/include/drm/ 2>/dev/null || true + # Also copy other drm headers the compute runtime might need + for f in ${kernelSrc}/include/drm/*.h ${kernelSrc}/include/uapi/drm/*.h; do + [ -f "$f" ] && cp -v "$f" $out/include/drm/ 2>/dev/null || true + done + ''; + in + cmakeSccacheAttrs + // { + cmakeFlags = (cmakeSccacheAttrs.cmakeFlags or [ ]) ++ [ + (prev.lib.cmakeBool "DISABLE_WDDM_LINUX" true) + (prev.lib.cmakeBool "NEO_ENABLE_I915_PRELIM_DETECTION" false) + (prev.lib.cmakeBool "NEO_ENABLE_XE_PRELIM_DETECTION" false) + (prev.lib.cmakeBool "SUPPORT_GEN12LP" false) + (prev.lib.cmakeBool "SUPPORT_XE_HPG_CORE" false) + (prev.lib.cmakeBool "SUPPORT_XE_HPC_CORE" false) + (prev.lib.cmakeBool "SUPPORT_XE3_CORE" false) + (prev.lib.cmakeBool "SUPPORT_XE3P_CORE" false) + (prev.lib.cmakeBool "SUPPORT_XE2_HPG_CORE" true) + (prev.lib.cmakeBool "SUPPORT_LNL" false) + (prev.lib.cmakeBool "SUPPORT_BMG" true) + ]; + buildInputs = (old.buildInputs or [ ]) ++ [ kernelHeaders ]; + postPatch = (old.postPatch or "") + '' + # Copy xe_drm.h from the drm/tip kernel into all compute-runtime header locations + if [ -f "${kernelHeaders}/include/drm/xe_drm.h" ]; then + for dest in \ + third_party/uapi/drm-next/xe \ + third_party/uapi/drm-uapi-helper/xe \ + third_party/uapi-eudebug/drm \ + ; do + if [ -d "$dest" ]; then + cp -v "${kernelHeaders}/include/drm/xe_drm.h" "$dest/" + fi + done + fi + + # Patch GMM resource creation failures to be non-fatal. + # intel-gmmlib can't create resource info for BMG on kernel 7.0 xe driver + # in certain initialization paths. Patch the abort and add null guards. + + # 1. resource_info.cpp: return nullptr instead of aborting + sed -i 's/UNRECOVERABLE_IF(resourceInfo->peekHandle() == 0);/if(resourceInfo->peekHandle() == 0) { delete resourceInfo; return nullptr; }/' \ + shared/source/gmm_helper/resource_info.cpp + + # 2. gmm.cpp: change UNRECOVERABLE_IF to graceful return first (line 104) + sed -i 's/UNRECOVERABLE_IF(this->gmmResourceInfo == nullptr);/if (this->gmmResourceInfo == nullptr) { return; }/' \ + shared/source/gmm_helper/gmm.cpp + + # 3. gmm.cpp: add null checks after GmmResourceInfo::create calls that lack them + # Lines 76 and 85 (line 103 already handled by step 2 after the UNRECOVERABLE_IF replacement) + sed -i '76a\ if (this->gmmResourceInfo == nullptr) { return; }' \ + shared/source/gmm_helper/gmm.cpp + sed -i '87a\ if (this->gmmResourceInfo == nullptr) { return; }' \ + shared/source/gmm_helper/gmm.cpp + ''; + } + ); + umu-launcher-unwrapped = modify prev.umu-launcher-unwrapped rec { + version = "1.4.0"; + + src = prev.fetchFromGitHub { + inherit version; + owner = "Open-Wine-Components"; + repo = "umu-launcher"; + tag = version; + hash = "sha256-7BdA/iAAIn2NR/uLzxdvsIh5/1SZacSfkiXJVJBT3EQ="; + }; + + cargoDeps = prev.rustPlatform.fetchCargoVendor { + inherit src; + hash = "sha256-CVcbktCBRZGnEuDVvl2iJpRgKh+ShFe5mjT6oMHIjtQ="; + }; + }; + umu-launcher = prev.umu-launcher.override { + extraLibraries = prevPkgs: [ prevPkgs.zstd ]; + }; } diff --git a/devenv.lock b/devenv.lock index 76121c9..9ea968e 100644 --- a/devenv.lock +++ b/devenv.lock @@ -3,11 +3,11 @@ "devenv": { "locked": { "dir": "src/modules", - "lastModified": 1773937316, - "narHash": "sha256-1Ou0hiagyj7urRqWZgPW51VdcaCcM3GUwrMBHQ27stU=", + "lastModified": 1774466721, + "narHash": "sha256-yi8Y0l5ZeJEGbvs48zBSqi183lMncn/ZQlpEbV07NEo=", "owner": "cachix", "repo": "devenv", - "rev": "450735a11ddd934e923aaea8b693336d31e7df32", + "rev": "1172f805e4497b6d562b32116c8a15ba5d207967", "type": "github" }, "original": { @@ -22,11 +22,11 @@ "nixpkgs-src": "nixpkgs-src" }, "locked": { - "lastModified": 1773704619, - "narHash": "sha256-LKtmit8Sr81z8+N2vpIaN/fyiQJ8f7XJ6tMSKyDVQ9s=", + "lastModified": 1774287239, + "narHash": "sha256-W3krsWcDwYuA3gPWsFA24YAXxOFUL6iIlT6IknAoNSE=", "owner": "cachix", "repo": "devenv-nixpkgs", - "rev": "906534d75b0e2fe74a719559dfb1ad3563485f43", + "rev": "fa7125ea7f1ae5430010a6e071f68375a39bd24c", "type": "github" }, "original": { @@ -39,11 +39,11 @@ "nixpkgs-src": { "flake": false, "locked": { - "lastModified": 1773597492, - "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", + "lastModified": 1773840656, + "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", + "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", "type": "github" }, "original": { diff --git a/flake.lock b/flake.lock index 9af7736..cc731f6 100644 --- a/flake.lock +++ b/flake.lock @@ -46,11 +46,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1773961521, - "narHash": "sha256-enhjd1AcHHU+3RCRdSWVQj6TIqRXkJUbQSFVXzC6xLo=", + "lastModified": 1774419577, + "narHash": "sha256-1dmCZWYAhJ1Z65Bl11wgXCHcCu1CTTD0j+PBGFfjanM=", "owner": "sadjow", "repo": "claude-code-nix", - "rev": "1519be1f77ed017ae4a88916ac54529cef885573", + "rev": "8117d36a65200c7a2870620427296b381acb4c35", "type": "github" }, "original": { @@ -84,11 +84,11 @@ }, "crane": { "locked": { - "lastModified": 1771121070, - "narHash": "sha256-aIlv7FRXF9q70DNJPI237dEDAznSKaXmL5lfK/Id/bI=", + "lastModified": 1772080396, + "narHash": "sha256-84W9UNtSk9DNMh43WBkOjpkbfODlmg+RDi854PnNgLE=", "owner": "ipetkov", "repo": "crane", - "rev": "a2812c19f1ed2e5ed5ce2ef7109798b575c180e1", + "rev": "8525580bc0316c39dbfa18bd09a1331e98c9e463", "type": "github" }, "original": { @@ -158,11 +158,11 @@ ] }, "locked": { - "lastModified": 1771469470, - "narHash": "sha256-GnqdqhrguKNN3HtVfl6z+zbV9R9jhHFm3Z8nu7R6ml0=", + "lastModified": 1773889306, + "narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=", "owner": "nix-community", "repo": "disko", - "rev": "4707eec8d1d2db5182ea06ed48c820a86a42dc13", + "rev": "5ad85c82cc52264f4beddc934ba57f3789f28347", "type": "github" }, "original": { @@ -176,11 +176,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1773921118, - "narHash": "sha256-ZBb59LTDi00YbqtEv4WGELVQp1OVUuIKsH1OFj3ccJs=", + "lastModified": 1774147244, + "narHash": "sha256-t0LgngMyJu9sRCvNTrkE0oxQgS1jFDheZtuUJbrYoTI=", "owner": "imaviso", "repo": "dwproton-flake", - "rev": "f32d216870fcbc4a3a24764f39bbbaa3991f7f53", + "rev": "c5dda756199e5f7ae4850ceb6981f1856cd1497a", "type": "github" }, "original": { @@ -198,11 +198,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1769929675, - "narHash": "sha256-EBpe7sXCPLs+qVePXbA7kc+Kmpmp0pWysEpjjEWTK+E=", + "lastModified": 1772348640, + "narHash": "sha256-caiKs7O4khFydpKyg8O8/nmvw/NfN4fn/4spageGoig=", "owner": "nix-community", "repo": "fenix", - "rev": "78d518f5ca32a86dc767de481160dbae640c70cf", + "rev": "47c5355eaba0b08836e720d5d545c8ea1e1783db", "type": "github" }, "original": { @@ -268,11 +268,11 @@ ] }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -363,11 +363,11 @@ ] }, "locked": { - "lastModified": 1770726378, - "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", "type": "github" }, "original": { @@ -451,11 +451,11 @@ ] }, "locked": { - "lastModified": 1774007980, - "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", + "lastModified": 1774379316, + "narHash": "sha256-0nGNxWDUH2Hzlj/R3Zf4FEK6fsFNB/dvewuboSRZqiI=", "owner": "nix-community", "repo": "home-manager", - "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", + "rev": "1eb0549a1ab3fe3f5acf86668249be15fa0e64f7", "type": "github" }, "original": { @@ -472,11 +472,11 @@ ] }, "locked": { - "lastModified": 1771519029, - "narHash": "sha256-H59Qf82wv5kBXVoyXsmUKW+9J3o8FqgY4uKaLdsLdLg=", + "lastModified": 1774007980, + "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", "owner": "nix-community", "repo": "home-manager", - "rev": "167e0b6837115e672ec5f58e2b0ea39093abe807", + "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", "type": "github" }, "original": { @@ -524,11 +524,11 @@ "vaultix": "vaultix" }, "locked": { - "lastModified": 1772131544, - "narHash": "sha256-rhKS/XoOMN90xpGZleFEQQ9gmn1+8Cagzg12kRRypuE=", + "lastModified": 1774176252, + "narHash": "sha256-ldrHZQdua0rHq3dFy12nFkU4ZgCOf3CXpRe9SgJ7ZFM=", "owner": "MordragT", "repo": "nixos", - "rev": "5fc6b35b8aafafbe9fa8bda6e0dc4ddbb0327b43", + "rev": "c329d001d4ea63b686315ff449a15d30338b515f", "type": "github" }, "original": { @@ -540,16 +540,16 @@ "kernel-src": { "flake": false, "locked": { - "lastModified": 1773844285, - "narHash": "sha256-vOF2HIA1J5Ktzt2aYqGPBv3AEQb0ziORKRQIOj+6h04=", + "lastModified": 1774368605, + "narHash": "sha256-9wxoMXSl3z7LuLNjyue/Vbxq+1WY9XaccEzkej7Tsn4=", "ref": "refs/heads/drm-tip", - "rev": "61409ba11a36fa5aff4ce0f0086a6026a43c5bce", + "rev": "0be244ee3139de3578e9acc56e1b917a4bd162cd", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" }, "original": { - "rev": "61409ba11a36fa5aff4ce0f0086a6026a43c5bce", + "rev": "0be244ee3139de3578e9acc56e1b917a4bd162cd", "shallow": true, "type": "git", "url": "https://gitlab.freedesktop.org/drm/tip.git" @@ -566,11 +566,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1771492583, - "narHash": "sha256-nQzvnU4BGu8dA6BsPPCqmVcab/3ebVmHtX3ZWbW3Hxc=", + "lastModified": 1773344150, + "narHash": "sha256-JSsXufJy2zdg5XS5pRGlkwF1dqN+sWPmCgrvJsnhEzg=", "owner": "nix-community", "repo": "lanzaboote", - "rev": "5e9380994665ef66c87ab8e22c913ff837174ce4", + "rev": "d21013305ef39e1d9d2d06b161c3785ffad82281", "type": "github" }, "original": { @@ -611,11 +611,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1773889880, - "narHash": "sha256-cu23CGP+mD2wKPKaoGM7evZ1dXfjd+cjryqqqx2HloE=", + "lastModified": 1774283383, + "narHash": "sha256-3aCfmL8hOcdIl783LTnK+lHcjMGCnc+2zQ98xUyefCU=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "63767d4572eb2e3da5e68f68de77d8f2cdeca8dd", + "rev": "8a583029606cf072cc01c7e2f4298cc75a7ada28", "type": "github" }, "original": { @@ -680,11 +680,11 @@ ] }, "locked": { - "lastModified": 1773552174, - "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", + "lastModified": 1774156144, + "narHash": "sha256-gdYe9wTPl4ignDyXUl1LlICWj41+S0GB5lG1fKP17+A=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "8faeb68130df077450451b6734a221ba0d6cde42", + "rev": "55b588747fa3d7fc351a11831c4b874dab992862", "type": "github" }, "original": { @@ -695,11 +695,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773628058, - "narHash": "sha256-hpXH0z3K9xv0fHaje136KY872VT2T5uwxtezlAskQgY=", + "lastModified": 1774273680, + "narHash": "sha256-a++tZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df", + "rev": "fdc7b8f7b30fdbedec91b71ed82f36e1637483ed", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773814637, - "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", + "lastModified": 1774244481, + "narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", + "rev": "4590696c8693fea477850fe379a01544293ca4e2", "type": "github" }, "original": { @@ -758,11 +758,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1771369470, - "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0182a361324364ae3f436a63005877674cf45efb", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { @@ -787,11 +787,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1773821835, - "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -826,11 +826,11 @@ "utils": "utils_2" }, "locked": { - "lastModified": 1767894517, - "narHash": "sha256-QF7hieotASi8KTe6dhJEaRg+Ex0HO1SkoqwsILzwO4k=", + "lastModified": 1773168029, + "narHash": "sha256-dLcdUV+M7z5YIPpLGWKhJ71TZhHHHhEjsJAI0BqlHeI=", "owner": "MordragT", "repo": "nu-env", - "rev": "0b6d3b1ee6a5535e13e28d94a85a6eba0585964d", + "rev": "0636a884cd447d624e039f730b390d8737dad04c", "type": "github" }, "original": { @@ -850,11 +850,11 @@ ] }, "locked": { - "lastModified": 1770726378, - "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", + "lastModified": 1772024342, + "narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", + "rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476", "type": "github" }, "original": { @@ -874,11 +874,11 @@ ] }, "locked": { - "lastModified": 1770726378, - "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", "type": "github" }, "original": { @@ -928,11 +928,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1769857242, - "narHash": "sha256-3eKpRRzKz0KzY7CJzRXFm4POwEqbuTohyQ2ajI/zKvg=", + "lastModified": 1772310333, + "narHash": "sha256-njFwHnxYcfQINwSa+XWhenv8s8PMg/j5ID0HpIa49xM=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "17304e9c7e11d26139672d3d77aa498b1cae0d69", + "rev": "a96b6a9b887008bae01839543f9ca8e1f67f4ebe", "type": "github" }, "original": { @@ -951,11 +951,11 @@ ] }, "locked": { - "lastModified": 1771125043, - "narHash": "sha256-ldf/s49n6rOAxl7pYLJGGS1N/assoHkCOWdEdLyNZkc=", + "lastModified": 1772334676, + "narHash": "sha256-Jrc0J3AH+iNJDlUze3+FJZv2R0BZnhANFnD52V4kyvI=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "4912f951a26dc8142b176be2c2ad834319dc06e8", + "rev": "9879be11f30fd3bbf848e653a7f991549e8973b5", "type": "github" }, "original": { @@ -1015,11 +1015,11 @@ ] }, "locked": { - "lastModified": 1773852796, - "narHash": "sha256-aEriBf9qkKeUoICKuxOj9e1GE8PZEnKke83+TzXpBT8=", + "lastModified": 1774443684, + "narHash": "sha256-eXRUZ6Fvlfq0MreTDOXzXTpDGIBWJj+JxdhcZgr8kgs=", "owner": "mozilla", "repo": "sccache", - "rev": "8d6cab9ee9356ff4054409c60f7a607cb798de03", + "rev": "f5edaf1076a093a1a0d17ab153e19bf920dc052b", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index a9368b1..61e92d4 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=61409ba11a36fa5aff4ce0f0086a6026a43c5bce&shallow=1"; + url = "git+https://gitlab.freedesktop.org/drm/tip.git?rev=0be244ee3139de3578e9acc56e1b917a4bd162cd&shallow=1"; flake = false; }; sccache = { @@ -85,7 +85,8 @@ pkgdefault = pkg: pkg.packages.${pkgs.stdenv.hostPlatform.system}.default; }; nixpkgs.overlays = [ - intel-hw.overlays.default + intel-hw.overlays.by-scope + intel-hw.overlays.by-name mypkgs.overlays.default (import ./custom/override.nix) niri-flake.overlays.niri @@ -101,12 +102,14 @@ intel-ocl vpl-gpu-rt intel-compute-runtime + intel-compute-runtime.drivers ### intel-hw oneapi-ccl oneapi-dpl oneapi-math oneapi-tbb unified-memory-framework + level-zero ] ); # ++ (with inputs.intel-hw.packages."${system}"; [ @@ -124,7 +127,7 @@ "root" "thek0tyara" ]; - sandbox = "relaxed"; + sandbox = true; extra-sandbox-paths = [ "/run/sccache" "/var/cache/sccache" @@ -135,11 +138,11 @@ 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 - -" + # setgid, to preserve group nixbld + "d /var/cache/sccache 1777 root root - -" + "d /var/cache/sccache/nix-builds 1777 root root - -" + "d /var/cache/sccache/nix-builds/packages 1777 root root - -" + "d /var/cache/sccache/nix-builds/kernel 1777 root root - -" ]; systemd.services.sccache = { description = "Shared sccache server for Nix builds"; @@ -246,6 +249,17 @@ security = { polkit = { enable = true; + extraConfig = '' + polkit.addRule(function(action, subject) { + if (action.id == "org.freedesktop.policykit.exec" && + subject.isInGroup("wheel")) { + var cmd = action.lookup("program"); + if (cmd && cmd.match(/\/ls$/)) { + return polkit.Result.YES; + } + } + }); + ''; }; rtkit.enable = true; sudo = { diff --git a/home.nix b/home.nix index ff4c22c..3b1dfa7 100644 --- a/home.nix +++ b/home.nix @@ -27,6 +27,7 @@ package = pkgs.apple-cursor; size = 28; }; + gtk4.theme = config.gtk.theme; }; home = { stateVersion = "25.11"; @@ -53,7 +54,7 @@ arch-install-scripts kdocker # tray the untrayable xwayland-satellite - winboat + # winboat xfce4-taskmanager xdg-desktop-portal-cosmic file @@ -92,17 +93,20 @@ vintagestory prismlauncher # bottles # sunthetik2 mouse issues - # umu-launcher + umu-launcher ### neural networks dsearch - lmstudio + # lmstudio # vllm claude-code # kdePackages.kdenlive (python313.withPackages ( py: with py; [ + # torch + # triton-xpu + # huggingface-hub # haystack-ai # raganything @@ -398,7 +402,7 @@ "mcp-server-qdrant" ]; enabled = true; - timeout = 15000; + timeout = 20000; environment = { # NumPy from uvx needs libstdc++.so.6 on NixOS. LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.stdenv.cc.cc ]; @@ -456,6 +460,7 @@ theme = "opencode"; autoupdate = false; share = "manual"; + model = "openrouter/openrouter/free"; # server = { # port = 4096; @@ -604,13 +609,11 @@ mod-key = "Super"; }; layout.default-column-width = { }; - spawn-at-startup = [ { sh = "systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk"; } ]; - workspaces = { "1-social" = { name = "social"; @@ -669,6 +672,22 @@ # tiled-state = false; open-on-workspace = "gaming"; } + { + matches = [ + { + app-id = "steam"; + title = "^notificationtoasts_[0-9]*_desktop$"; + } + ]; + # open-floating = false; + default-floating-position = { + x = 0; + y = 20; + relative-to = "top-left"; + }; + open-floating = true; + open-on-workspace = "gaming"; + } { matches = [ { title = "^Picture-in-Picture$"; }