Nix Serve
Updated: August 4, 2026
nix-serve serves as a local cache to help cut down on network traffic.
It also helps cut down rebuilding packages other machines have already built.
Host Machine (sharing its /nix/store/)
_:{
services.nix-serve = {
enable = true;
port = 5000;
secretKeyFile = "/var/lib/nix-serve/cache-priv-key.pem";
};
}
open firewall 5000
networking.firewall.allowedTCPPorts = [
5000
];
add caddy register:
"primus-cache.megaport.cc" = {
extraConfig = ''
reverse_proxy 127.0.0.1:5000
'';
};
In your DNS create A record:
primus-cache IN A 192.168.1.37
Now we need to setup the keys
# create the folder
sudo mkdir -p /var/lib/nix-serve
# create the keys (primus hostname)
nix-store --generate-binary-cache-key primus \
/var/lib/nix-serve/cache-priv-key.pem \
/var/lib/nix-serve/cache-pub-key.pem
# Take ownership
chown nix-serve:nix-serve /var/lib/nix-serve/cache-priv-key.pem
# File Permissions
chmod 600 /var/lib/nix-serve/cache-priv-key.pem
Client Machine (requesting packages)
add primus to trusted substituters:
nix.settings = {
substituters = [
"http://primus-cache.megaport.cc"
"https://cache.nixos.org"
];
# NOTE: bat /var/lib/nix-serve/cache-pub-key.pem
trusted-public-keys = [
"primus:<primus-public-key>"
];
};
check if cache works
curl http://primus-cache.megaport.cc/nix-cache-info
nix store info --store http://10.99.1.37:5000