Archived
One file (variables.nix) holding every value that was previously hardcoded and repeated across modules: LAN domain/CIDR, home/tailnet domains, cross-host references (nix-cache substituter hostname, NFS server hostname, remote-builder user), PXE/PBS IPs, timezone, and the primary username. Wired in via flake.nix's specialArgs (and home-manager's extraSpecialArgs for the two home.nix files), so any module picks it up by just adding `vars` to its function arguments — no explicit import needed. Two hosts (nix-cache, server) now derive their own networking.hostName from the same variable other hosts use to reach them, so there's exactly one place to change either identifier. Purely mechanical: every substituted value matches what was already there, confirmed by identical toplevel .drv paths for all 17 targets before and after. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
65 lines
2.1 KiB
Nix
65 lines
2.1 KiB
Nix
{ config, pkgs, vars, ... }:
|
|
|
|
{
|
|
# Generate the binary cache key pair on the nix-cache host:
|
|
# sudo install -d -m 0700 /etc/nix
|
|
# sudo nix-store --generate-binary-cache-key nix-cache-1 \
|
|
# /etc/nix/cache-priv.pem \
|
|
# /etc/nix/cache-pub.pem
|
|
# sudo chmod 0600 /etc/nix/cache-priv.pem
|
|
# sudo chmod 0644 /etc/nix/cache-pub.pem
|
|
# cat /etc/nix/cache-pub.pem
|
|
services.nix-serve = {
|
|
enable = true;
|
|
secretKeyFile = "/etc/nix/cache-priv.pem";
|
|
};
|
|
|
|
services.nginx = {
|
|
enable = true;
|
|
recommendedProxySettings = true;
|
|
virtualHosts.${vars.nixCacheHost} = {
|
|
locations."/" = {
|
|
proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
|
|
};
|
|
};
|
|
};
|
|
|
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
|
|
|
users.groups.${vars.remoteBuilderUser} = { };
|
|
|
|
users.users.${vars.remoteBuilderUser} = {
|
|
isSystemUser = true;
|
|
group = vars.remoteBuilderUser;
|
|
createHome = true;
|
|
home = "/var/lib/nixremote";
|
|
shell = pkgs.bashInteractive;
|
|
# Provide remote builder public keys here (safe to commit public keys only):
|
|
# openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAA... client@host" ];
|
|
#
|
|
# Avoid absolute keyFiles paths here because they break pure flake evaluation.
|
|
openssh.authorizedKeys.keys = [
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDEA1S2ikpObREgbP5uVBWMxIOGbY8B+Wx7VTZK1m6t root@server"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPAYIT9ormlmxZ0SziyDQaUntnKI8HK9/s3Qac1ZKjP2 root@docker"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKKzoEPl/ZW9KBRHBcp6/ThOngGpwMv5EhkTlgC4aDf root@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIGtOWOCS+ImHc7NehguoyD7PbonGosKMZqc9+QR3v/h root@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHxXTQxFnArK5HXG7czeoybZebCGfxpUdusJkPn+BCSp root@server"
|
|
];
|
|
};
|
|
|
|
services.openssh.enable = true;
|
|
|
|
nix.settings = {
|
|
trusted-users = [ "root" vars.remoteBuilderUser ];
|
|
experimental-features = [ "nix-command" "flakes" ];
|
|
auto-optimise-store = true;
|
|
builders-use-substitutes = true;
|
|
};
|
|
|
|
nix.gc = {
|
|
automatic = true;
|
|
dates = "weekly";
|
|
options = "--delete-older-than 30d";
|
|
};
|
|
}
|