This commit is contained in:
TheK0tYaRa 2026-03-07 10:53:27 +02:00
parent dbde18d4a2
commit 33f5ff9019
8 changed files with 152 additions and 140 deletions

3
.gitignore vendored
View file

@ -16,3 +16,6 @@ devenv.local.yaml
# ide
.vscode/settings.json
# nix
result

View file

@ -5,6 +5,8 @@
structuredExtraConfig ? { },
kernelPatches ? [ ],
extraConfig ? "",
sccacheDir ? "/var/cache/sccache",
enforceSccache ? true,
}:
let
@ -30,7 +32,41 @@ in
pkgs.callPackage (
{ buildLinux, ... }@args:
let
# llvm = pkgs.llvmPackages_latest;
llvm = pkgs.llvmPackages_latest;
# buildLinux uses common-flags.nix which sets CC to the *unwrapped* compiler:
# CC=${lib.getExe stdenv.cc.cc}
# and appends extraMakeFlags at the end. :contentReference[oaicite:1]{index=1}
realClang = lib.getExe llvm.clang-unwrapped;
# Host tools are built with buildPackages.stdenv.cc (see common-flags HOSTCC). :contentReference[oaicite:2]{index=2}
buildPkgs = args.buildPackages or pkgs.buildPackages;
realHostCC = lib.getExe' buildPkgs.stdenv.cc "${buildPkgs.stdenv.cc.targetPrefix}cc";
realHostCXX = lib.getExe' buildPkgs.stdenv.cc "${buildPkgs.stdenv.cc.targetPrefix}c++";
clangSccache = pkgs.writeShellScriptBin "clang" ''
set -euo pipefail
: "''${SCCACHE_ENFORCE_MARKER:?SCCACHE_ENFORCE_MARKER is not set}"
: > "''${SCCACHE_ENFORCE_MARKER}"
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
exec ${pkgs.sccache}/bin/sccache ${realClang} "$@"
'';
hostccSccache = pkgs.writeShellScriptBin "cc" ''
set -euo pipefail
: "''${SCCACHE_ENFORCE_MARKER:?SCCACHE_ENFORCE_MARKER is not set}"
: > "''${SCCACHE_ENFORCE_MARKER}"
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
exec ${pkgs.sccache}/bin/sccache ${realHostCC} "$@"
'';
hostcxxSccache = pkgs.writeShellScriptBin "c++" ''
set -euo pipefail
: "''${SCCACHE_ENFORCE_MARKER:?SCCACHE_ENFORCE_MARKER is not set}"
: > "''${SCCACHE_ENFORCE_MARKER}"
export SCCACHE_DIR=${lib.escapeShellArg sccacheDir}
exec ${pkgs.sccache}/bin/sccache ${realHostCXX} "$@"
'';
structuredExtraConfig' =
(with lib.kernel; {
@ -45,25 +81,45 @@ pkgs.callPackage (
// {
inherit kernelPatches extraConfig;
stdenv = pkgs.llvmPackages_latest.stdenv;
version = kver;
modDirVersion = kver;
src = kernel-src;
# nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
# llvm.clang
# llvm.lld
# llvm.llvm
# ];
stdenv = llvm.stdenv;
makeFlags = (args.makeFlags or [ ]) ++ [
"LLVM=1"
"LLVM_IAS=1"
extraMakeFlags =
(args.extraMakeFlags or [ ])
++ [
"LLVM=1"
"LLVM_IAS=1"
]
++ lib.optionals enforceSccache [
"CC=${lib.getExe clangSccache}"
"HOSTCC=${lib.getExe hostccSccache}"
"HOSTCXX=${lib.getExe hostcxxSccache}"
];
"CC=${pkgs.ccache}/bin/ccache clang"
"HOSTCC=${pkgs.ccache}/bin/ccache clang"
];
# Enforce that the wrappers were actually invoked at least once.
# sccache is a compiler wrapper; this is the contract were enforcing. :contentReference[oaicite:4]{index=4}
preBuild =
(args.preBuild or "")
+ lib.optionalString enforceSccache ''
export SCCACHE_ENFORCE_MARKER="$NIX_BUILD_TOP/.sccache-used"
rm -f "$SCCACHE_ENFORCE_MARKER"
${pkgs.sccache}/bin/sccache --start-server || true
${pkgs.sccache}/bin/sccache --zero-stats || true
'';
postBuild =
(args.postBuild or "")
+ lib.optionalString enforceSccache ''
if [ ! -e "$SCCACHE_ENFORCE_MARKER" ]; then
echo "FATAL: sccache enforcement failed: compiler wrappers were not invoked."
echo "This means buildLinux did not use your CC/HOSTCC overrides."
exit 1
fi
${pkgs.sccache}/bin/sccache --show-stats --stats-format text || true
'';
structuredExtraConfig = structuredExtraConfig';

View file

@ -1,102 +0,0 @@
{ config, lib, ... }:
let
cfg = config.programs.ccache;
in
if false then {
config = lib.mkIf cfg.enable {
nix.settings.extra-sandbox-paths = [ cfg.cacheDir ];
nixpkgs.overlays = [
(final: prev:
let
llvm = prev.llvmPackages_latest;
realClang = llvm.clang-unwrapped;
realClangLib = prev.lib.getLib realClang;
# "unwrapped clang", но с ccache + per-package CCACHE_DIR
clangUnwrappedCcache =
prev.stdenvNoCC.mkDerivation {
pname = "clang-unwrapped-ccache";
version = realClang.version;
outputs = [ "out" "lib" ];
dontUnpack = true;
installPhase = ''
mkdir -p "$out/bin" "$lib/lib"
mkwrap() {
local name="$1"
local real="$2"
cat > "$out/bin/$name" <<'EOF'
#!${prev.bash}/bin/bash
set -euo pipefail
# Kernel probes compiler via: $CC -E -P -x c -
# Bypass ccache + filesystem touching for preprocess-only probes.
for arg in "$@"; do
if [ "$arg" = "-E" ]; then
exec __REAL__ "$@"
fi
done
# base cache dir from NixOS module
base='${cfg.cacheDir}'
# prefer pname (no version), fallback to name, and strip "-<digit>..." if present
pkg="''${pname-}"
if [ -z "$pkg" ]; then pkg="''${name-unknown}"; fi
pkg="''${pkg%%-[0-9]*}"
# If cache dir isn't writable/mounted in sandbox yet, don't break compiler detection.
if ! mkdir -p "$base/$pkg" 2>/dev/null; then
exec __REAL__ "$@"
fi
export CCACHE_DIR="$base/$pkg"
export CCACHE_UMASK=007
# improves hit rate for repeated local rebuilds
export CCACHE_BASEDIR="''${NIX_BUILD_TOP:-/build}"
export CCACHE_COMPRESS=1
export CCACHE_SLOPPINESS=random_seed,time_macros
exec ${prev.ccache}/bin/ccache __REAL__ "$@"
EOF
substituteInPlace "$out/bin/$name" --replace "__REAL__" "$real"
chmod +x "$out/bin/$name"
}
mkwrap clang ${realClang}/bin/clang
mkwrap clang++ ${realClang}/bin/clang++
ln -s "$out/bin/clang" "$out/bin/cc"
ln -s "$out/bin/clang++" "$out/bin/c++"
# make lib.getLib(stdenv.cc.cc) point to real clang builtin headers
ln -s ${realClangLib}/lib/clang "$lib/lib/clang"
'';
meta = (realClang.meta or { }) // {
mainProgram = "clang";
};
};
# Wrapped clang package that points its "unwrapped" to our ccache one
clangWrappedCcache = llvm.clang.override { cc = clangUnwrappedCcache; };
# New stdenv: same llvm stdenv, but compiler wrapper uses our ccache-unwrapped clang
llvmCcacheStdenv = prev.overrideCC llvm.stdenv clangWrappedCcache;
in
{
llvmPackages_latest = llvm // {
stdenv = llvmCcacheStdenv;
clang = clangWrappedCcache;
clang-unwrapped = clangUnwrappedCcache;
};
})
];
};
} else {}

View file

@ -31,6 +31,56 @@ final: prev: {
# "$unitDir/xdg-desktop-portal-cosmic.service"
# '';
# });
# codex = prev.codex.overrideAttrs (
# old:
# let
# version = "0.111.0";
# src = prev.fetchFromGitHub {
# owner = "openai";
# repo = "codex";
# tag = "rust-v${version}";
# hash = "sha256-hdR70BhiMg9G/ibLCeHnRSY3PcGZDv0vnqBCbzSRD6I=";
# };
# in
# {
# cargoDeps = old.cargoDeps.overrideAttrs (_: {
# inherit src;
# name = "codex-${version}-vendor.tar.gz";
# sourceRoot = "${src.name}/codex-rs";
# outputHash = "sha256-FR0GQenZ6CFhHUdi3FnuwIsqo0argAJo5STBwlGCsdg=";
# outputHashMode = "recursive";
# });
# }
# );
codex = prev.codex.overrideAttrs (
old:
let
version = "0.111.0";
src = prev.fetchFromGitHub {
owner = "openai";
repo = "codex";
tag = "rust-v${version}";
hash = "sha256-hdR70BhiMg9G/ibLCeHnRSY3PcGZDv0vnqBCbzSRD6I=";
};
in
{
inherit version src;
sourceRoot = "${src.name}/codex-rs";
cargoDeps = prev.rustPlatform.fetchCargoVendor {
inherit src;
sourceRoot = "${src.name}/codex-rs";
hash = "sha256-h+TIwNz+A6aYcMACWl//LiavABITZxwYa4CvawR/0RQ=";
};
buildInputs = (old.buildInputs or [ ]) ++ [ prev.libcap ];
preBuild = (old.preBuild or "") + ''
export CARGO_PROFILE_RELEASE_LTO=thin
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=8
'';
}
);
llama-cpp = prev.llama-cpp.overrideAttrs (old: rec {
version = "8124";
src = prev.fetchFromGitHub {

View file

@ -17,7 +17,7 @@
nix flake check
'';
build.exec = ''
sudo nixos-rebuild switch --flake '.#' $@
nixos-rebuild switch --sudo --flake '.#' $@
'';
};

18
flake.lock generated
View file

@ -413,11 +413,11 @@
]
},
"locked": {
"lastModified": 1772633327,
"narHash": "sha256-jl+DJB2DUx7EbWLRng+6HNWW/1/VQOnf0NsQB4PlA7I=",
"lastModified": 1772845525,
"narHash": "sha256-Dp5Ir2u4jJDGCgeMRviHvEQDe+U37hMxp6RSNOoMMPc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5a75730e6f21ee624cbf86f4915c6e7489c74acc",
"rev": "27b93804fbef1544cb07718d3f0a451f4c4cd6c0",
"type": "github"
},
"original": {
@ -502,10 +502,10 @@
"kernel-src": {
"flake": false,
"locked": {
"lastModified": 1772720557,
"narHash": "sha256-lfOprDbqvgOqHzLuhsiuXdHk20qQJ9b8t97zOkTBxu4=",
"lastModified": 1772838933,
"narHash": "sha256-77MlrOVBethsi2wbq0eQx+m6AzNoBWCD8b82B1yUX04=",
"ref": "drm-tip",
"rev": "9565ad1c312903452467b9f685c59e2f47f512e5",
"rev": "fce8d7fb2107068c269b868d51aba5f9cf85998a",
"shallow": true,
"type": "git",
"url": "https://gitlab.freedesktop.org/drm/tip.git"
@ -960,11 +960,11 @@
]
},
"locked": {
"lastModified": 1772653484,
"narHash": "sha256-kHwbXkMrlKxo261U0oamF4YXGuUBbwexa8BWYErgKv0=",
"lastModified": 1772751120,
"narHash": "sha256-4cBOTPXv6Pkqa6qL1SH3UZTShciQWpyKJy3c3cQEU8I=",
"owner": "mozilla",
"repo": "sccache",
"rev": "30ed851a2b56ff3d754117895c76dbd8d10bbf13",
"rev": "2b65ac80ed3a3ff63c41711d65ae10106a163a09",
"type": "github"
},
"original": {

View file

@ -52,16 +52,6 @@
inherit system;
overlays = [ sccache.overlays.default ];
};
#
# sccacheWrapper = pkgs.writeShellScriptBin "clang-sccache" ''
# export SCCACHE_DIR=/var/cache/sccache
# exec ${pkgs.sccache}/bin/sccache ${pkgs.llvmPackages_latest.clang}/bin/clang "$@"
# '';
# stdenvSccache = pkgs.overrideCC pkgs.llvmPackages_latest.stdenv (
# pkgs.llvmPackages_latest.clang.override {
# cc = sccacheWrapper;
# }
# );
in
{
nixosConfigurations.testenv = nixpkgs.lib.nixosSystem {
@ -72,7 +62,6 @@
};
modules = [
# ./custom/modules
# ./custom/modules/llvm-ccache-stdenv.nix
ragenix.nixosModules.default
niri-flake.nixosModules.niri
nix-index-database.nixosModules.default
@ -122,9 +111,15 @@
"root"
"thek0tyara"
];
extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
extra-sandbox-paths = [
"/var/cache/sccache"
];
download-buffer-size = 160000000;
};
systemd.tmpfiles.rules = [
# setgid, чтобы файлы/папки сохраняли группу nixbld
"d /var/cache/sccache 2770 root nixbld - -"
];
boot = {
loader = {
systemd-boot.enable = true;
@ -165,6 +160,7 @@
LLAMA_CACHE = "/home/thek0tyara/Downloads/llm";
# CCACHE_DIR = "/mnt/HDD_A_DATA/ccache";
# SCCACHE_DIR = "/home/thek0tyara/Documents/cache/sccache";
# LLVM = "1";
# UV_CACHE_DIR = "";

View file

@ -66,6 +66,7 @@
### development
# idea-community-bin
sccache
### visuals
gnome-themes-extra
@ -170,7 +171,7 @@
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-wlr
# xdg-desktop-portal-gnome
xdg-desktop-portal-gnome
xdg-desktop-portal-cosmic
];
config = {
@ -179,7 +180,7 @@
"gtk"
];
"org.freedesktop.impl.portal.FileChooser" = "gnome";
# "org.freedesktop.impl.portal.ScreenCast" = "gnome";
"org.freedesktop.impl.portal.ScreenCast" = "gnome";
};
};
};
@ -434,6 +435,14 @@
### default
aria2.enable = true;
btop.enable = true;
codex = {
enable = true;
settings = {
model = "gpt-5.4";
approval_policy = "on-request";
model_reasoning_effort = "medium";
};
};
# command-not-found.enable = true;
direnv = {
enable = true;