diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix
index 3bb7fdb9b2d6..bf8365e34645 100644
--- a/nixos/modules/misc/ids.nix
+++ b/nixos/modules/misc/ids.nix
@@ -173,6 +173,7 @@
peerflix = 163;
chronos = 164;
gitlab = 165;
+ tox-bootstrapd = 166;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 2cee8cb502aa..1b44e51e4d77 100755
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -286,6 +286,7 @@
./services/networking/tcpcrypt.nix
./services/networking/teamspeak3.nix
./services/networking/tftpd.nix
+ ./services/networking/tox-bootstrapd.nix
./services/networking/unbound.nix
./services/networking/unifi.nix
./services/networking/vsftpd.nix
diff --git a/nixos/modules/services/networking/tox-bootstrapd.nix b/nixos/modules/services/networking/tox-bootstrapd.nix
new file mode 100644
index 000000000000..65aa87be44cc
--- /dev/null
+++ b/nixos/modules/services/networking/tox-bootstrapd.nix
@@ -0,0 +1,80 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ home = "/var/lib/tox-bootstrapd";
+ PIDFile = "${home}/pid";
+
+ pkg = pkgs.libtoxcore;
+ cfg = config.services.toxBootstrapd;
+ cfgFile = builtins.toFile "tox-bootstrapd.conf"
+ ''
+ port = ${toString cfg.port}
+ keys_file_path = "${home}/keys"
+ pid_file_path = "${PIDFile}"
+ ${cfg.extraConfig}
+ '';
+in
+{
+ options =
+ { services.toxBootstrapd =
+ { enable = mkOption {
+ type = types.bool;
+ default = false;
+ description =
+ ''
+ Whether to enable the Tox DHT boostrap daemon.
+ '';
+ };
+
+ port = mkOption {
+ type = types.int;
+ default = 33445;
+ description = "Listening port (UDP).";
+ };
+
+ keysFile = mkOption {
+ type = types.str;
+ default = "${home}/keys";
+ description = "Node key file.";
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ description =
+ ''
+ Configuration for boostrap daemon.
+ See
+ and .
+ '';
+ };
+ };
+
+ };
+
+ config = mkIf config.services.toxBootstrapd.enable {
+
+ users.extraUsers = singleton
+ { name = "tox-bootstrapd";
+ uid = config.ids.uids.tox-bootstrapd;
+ description = "Tox bootstrap daemon user";
+ inherit home;
+ createHome = true;
+ };
+
+ systemd.services.tox-bootstrapd = {
+ description = "Tox DHT bootstrap daemon";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig =
+ { ExecStart = "${pkg}/bin/tox-bootstrapd ${cfgFile}";
+ Type = "forking";
+ inherit PIDFile;
+ User = "tox-bootstrapd";
+ };
+ };
+
+ };
+}