Files
config/profiles/ccache/default.nix
2025-05-22 01:21:22 +02:00

74 lines
1.8 KiB
Nix

{
config,
pkgs,
lib,
...
}:
# serge <3
# TODO: distributed (s)ccache (with redis?)
{
programs.ccache.enable = true;
programs.ccache.owner = "root"; # default
programs.ccache.group = "nixbld"; # default
programs.nix-required-mounts.enable = true;
programs.nix-required-mounts.allowedPatterns."ccache" = {
onFeatures = [
"ccache"
"sccache"
];
paths = [
config.programs.ccache.cacheDir
"/var/cache/sccache" # TODO: upstream?
];
};
nix.settings.system-features = [
"ccache"
"sccache"
];
# can be monitored with `nix-ccache --show-stats`
systemd.tmpfiles.settings."50-ccache" =
let
tmp = rec {
"d" = {
user = config.programs.ccache.owner;
group = config.programs.ccache.group;
mode = "0770";
};
"Z" = d;
};
in
{
"/var/cache/ccache" = tmp;
"/var/cache/sccache" = tmp;
};
# based on https://github.com/NixOS/nixpkgs/blob/d89fc19e405cb2d55ce7cc114356846a0ee5e956/nixos/modules/programs/ccache.nix#L49-L67
security.wrappers.nix-sccache =
let
cfg = config.programs.ccache;
in
{
inherit (cfg) owner group;
setuid = false;
setgid = true;
source = pkgs.writeScript "nix-sccache.pl" ''
#!${pkgs.perl}/bin/perl
%ENV=( SCCACHE_DIR => '/var/cache/sccache' );
sub untaint {
my $v = shift;
return '--version' if $v eq '-V' || $v eq '--version';
return '-s' if $v eq '-s' || $v eq '--show-stats';
return '--show-adv-stats' if $v eq '--show-adv-stats';
return '-z' if $v eq '-z' || $v eq '--zero-stats';
exec('${lib.getExe pkgs.sccache}', '-h');
}
exec('${lib.getExe pkgs.sccache}', map { untaint $_ } @ARGV);
'';
};
}