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