74 lines
1.8 KiB
Nix
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);
|
|
'';
|
|
};
|
|
}
|