xin/configs/peerix.nix

68 lines
1.5 KiB
Nix

{
config,
lib,
pkgs,
...
}:
with lib; {
options = {
tsPeerix = {
enable = mkOption {
description = "Enable peerix";
default = false;
example = true;
type = lib.types.bool;
};
privateKeyFile = mkOption {
description = "Private key file for signing";
default = "";
example = "./private_key";
type = lib.types.path;
};
interfaces = mkOption {
description = "Interfaces to allow peerix to listen on.";
type = types.listOf types.str;
default = ["tailscale0"];
};
};
};
config = mkIf config.tsPeerix.enable {
users.groups.peerix = {name = "peerix";};
users.users.peerix = {
name = "peerix";
group = "peerix";
isSystemUser = true;
};
nix.settings.allowed-users = ["peerix"];
services = {
zerotierone = {
enable = true;
joinNetworks = ["db64858fedd3b256"];
};
peerix = {
enable = true;
openFirewall = false;
user = "peerix";
group = "peerix";
privateKeyFile = "${config.tsPeerix.privateKeyFile}";
publicKeyFile = ./peerix.pubs;
};
};
environment.systemPackages = [pkgs.zerotierone];
networking.firewall.interfaces = listToAttrs (flatten (map (i: {
name = i;
value = {
allowedUDPPorts = [12304];
allowedTCPPorts = [12304];
};
})
config.tsPeerix.interfaces));
};
}