# Module that enables remote builds. This is a server configuration.
{ pkgs, secret, lib, ... }: let
	keyPath = "/root/.nixbuilder";
in {
	# Service that generates new key on boot if not present.
	# Don't forget to add new key to secret.ssh.builderKeys.
	systemd.services.generate-nix-cache-key = {
		wantedBy = [ "multi-user.target" ];
		serviceConfig.Type = "oneshot";
		path = [ pkgs.nix ];
		script = ''
			[[ -f "${keyPath}/private-key" ]] && exit
			mkdir ${keyPath} || true
			nix-store --generate-binary-cache-key "nixbuilder-1" "${keyPath}/private-key" "${keyPath}/public-key"
			nix store sign --all -k "${keyPath}/private-key"
		'';
	};

	# Add `nixbuilder` restricted user.
	users.groups.nixbuilder = {};
	users.users.nixbuilder = {
		openssh.authorizedKeys.keys = secret.ssh.builderKeys;
		description  = "Nix Remote Builder";
		isNormalUser = true;
		createHome   = lib.mkForce false;
		uid          = 1234;
		home         = "/";
		group        = "nixbuilder";
	};

	# Sign store automatically.
	# Sign existing store with: nix store sign --all -k /path/to/secret-key-file
	nix.extraOptions = ''
		trusted-users = nixbuilder
		secret-key-files = ${keyPath}/private-key
	'';
}