96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { lib, pkgs, config, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   pkg = pkgs.tox-node;
 | |
|   cfg = config.services.tox-node;
 | |
|   homeDir = "/var/lib/tox-node";
 | |
| 
 | |
|   configFile = let
 | |
|     # fetchurl should be switched to getting this file from tox-node.src once
 | |
|     # the dpkg directory is in a release
 | |
|     src = pkgs.fetchurl {
 | |
|       url = "https://raw.githubusercontent.com/tox-rs/tox-node/master/dpkg/config.yml";
 | |
|       sha256 = "1431wzpzm786mcvyzk1rp7ar418n45dr75hdggxvlm7pkpam31xa";
 | |
|     };
 | |
|     confJSON = pkgs.writeText "config.json" (
 | |
|       builtins.toJSON {
 | |
|         log-type = cfg.logType;
 | |
|         keys-file = cfg.keysFile;
 | |
|         udp-address = cfg.udpAddress;
 | |
|         tcp-addresses = cfg.tcpAddresses;
 | |
|         tcp-connections-limit = cfg.tcpConnectionLimit;
 | |
|         lan-discovery = cfg.lanDiscovery;
 | |
|         threads = cfg.threads;
 | |
|         motd = cfg.motd;
 | |
|       }
 | |
|     );
 | |
|   in with pkgs; runCommand "config.yml" {} ''
 | |
|     ${remarshal}/bin/remarshal -if yaml -of json ${src} -o src.json
 | |
|     ${jq}/bin/jq -s '(.[0] | with_entries( select(.key == "bootstrap-nodes"))) * .[1]' src.json ${confJSON} > $out
 | |
|   '';
 | |
| 
 | |
| in {
 | |
|   options.services.tox-node = {
 | |
|     enable = mkEnableOption "Tox Node service";
 | |
| 
 | |
|     logType = mkOption {
 | |
|       type = types.enum [ "Stderr" "Stdout" "Syslog" "None" ];
 | |
|       default = "Stderr";
 | |
|       description = "Logging implementation.";
 | |
|     };
 | |
|     keysFile = mkOption {
 | |
|       type = types.str;
 | |
|       default = "${homeDir}/keys";
 | |
|       description = "Path to the file where DHT keys are stored.";
 | |
|     };
 | |
|     udpAddress = mkOption {
 | |
|       type = types.str;
 | |
|       default = "0.0.0.0:33445";
 | |
|       description = "UDP address to run DHT node.";
 | |
|     };
 | |
|     tcpAddresses = mkOption {
 | |
|       type = types.listOf types.str;
 | |
|       default = [ "0.0.0.0:33445" ];
 | |
|       description = "TCP addresses to run TCP relay.";
 | |
|     };
 | |
|     tcpConnectionLimit = mkOption {
 | |
|       type = types.int;
 | |
|       default = 8192;
 | |
|       description = "Maximum number of active TCP connections relay can hold";
 | |
|     };
 | |
|     lanDiscovery = mkOption {
 | |
|       type = types.bool;
 | |
|       default = true;
 | |
|       description = "Enable local network discovery.";
 | |
|     };
 | |
|     threads = mkOption {
 | |
|       type = types.int;
 | |
|       default = 1;
 | |
|       description = "Number of threads for execution";
 | |
|     };
 | |
|     motd = mkOption {
 | |
|       type = types.str;
 | |
|       default = "Hi from tox-rs! I'm up {{uptime}}. TCP: incoming {{tcp_packets_in}}, outgoing {{tcp_packets_out}}, UDP: incoming {{udp_packets_in}}, outgoing {{udp_packets_out}}";
 | |
|       description = "Message of the day";
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = lib.mkIf cfg.enable {
 | |
|     systemd.services.tox-node = {
 | |
|       description = "Tox Node";
 | |
| 
 | |
|       after = [ "network.target" ];
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
| 
 | |
|       serviceConfig = {
 | |
|         ExecStart = "${pkg}/bin/tox-node config ${configFile}";
 | |
|         StateDirectory = "tox-node";
 | |
|         DynamicUser = true;
 | |
|         Restart = "always";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |