added transmission torrent client, will evaluate both it and deluge.
This commit is contained in:
		
							parent
							
								
									c3a46b1737
								
							
						
					
					
						commit
						fe87cf397e
					
				
					 3 changed files with 67 additions and 8 deletions
				
			
		| 
						 | 
					@ -116,6 +116,14 @@ in {
 | 
				
			||||||
              description = "Torrent webUI";
 | 
					              description = "Torrent webUI";
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            Transmission = {
 | 
				
			||||||
 | 
					              icon = "sh-transmission.svg";
 | 
				
			||||||
 | 
					              href = "http:cirrostratus:9090";
 | 
				
			||||||
 | 
					              siteMonitor = "http:cirrostratus:9091";
 | 
				
			||||||
 | 
					              description = "Torrent webUI";
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            Syncthing = {
 | 
					            Syncthing = {
 | 
				
			||||||
              icon = "sh-syncthing.svg";
 | 
					              icon = "sh-syncthing.svg";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ inputs.nixpkgs.lib.nixosSystem {
 | 
				
			||||||
    ./restic.nix
 | 
					    ./restic.nix
 | 
				
			||||||
    ./nginx.nix
 | 
					    ./nginx.nix
 | 
				
			||||||
    ./copyparty.nix
 | 
					    ./copyparty.nix
 | 
				
			||||||
    ./deluge.nix
 | 
					    ./torrent.nix
 | 
				
			||||||
    ../../configs/nixos/common.nix
 | 
					    ../../configs/nixos/common.nix
 | 
				
			||||||
    ../../configs/nixos/tailscale.nix
 | 
					    ../../configs/nixos/tailscale.nix
 | 
				
			||||||
    ../../configs/nixos/sshd.nix
 | 
					    ../../configs/nixos/sshd.nix
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,12 @@
 | 
				
			||||||
  lib,
 | 
					  lib,
 | 
				
			||||||
  ...
 | 
					  ...
 | 
				
			||||||
}: let
 | 
					}: let
 | 
				
			||||||
  webUiPort = "8100";
 | 
					 | 
				
			||||||
  namespace = "pvpn";
 | 
					  namespace = "pvpn";
 | 
				
			||||||
  interface-name = "pvpn0";
 | 
					  interface-name = "pvpn0";
 | 
				
			||||||
  dnsIP = "DNS = 10.2.0.1";
 | 
					  dnsIP = "DNS = 10.2.0.1";
 | 
				
			||||||
  privateIP = "10.2.0.2/32";
 | 
					  privateIP = "10.2.0.2/32";
 | 
				
			||||||
  port = 8112;
 | 
					  delugeWebPort = 8112;
 | 
				
			||||||
 | 
					  transmissionWebPort = 9091;
 | 
				
			||||||
  user = config.host.details.user;
 | 
					  user = config.host.details.user;
 | 
				
			||||||
  group = "users";
 | 
					  group = "users";
 | 
				
			||||||
in {
 | 
					in {
 | 
				
			||||||
| 
						 | 
					@ -71,13 +71,15 @@ in {
 | 
				
			||||||
    group = group;
 | 
					    group = group;
 | 
				
			||||||
    web = {
 | 
					    web = {
 | 
				
			||||||
      enable = true;
 | 
					      enable = true;
 | 
				
			||||||
      port = port;
 | 
					      port = delugeWebPort;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  # binding deluged to network namespace
 | 
					  systemd.services.deluged = {
 | 
				
			||||||
  systemd.services.deluged.bindsTo = ["netns@${namespace}.service"];
 | 
					    # binding deluged to network namespace
 | 
				
			||||||
  systemd.services.deluged.requires = ["network-online.target" "${namespace}.service"];
 | 
					    bindsTo = ["netns@${namespace}.service"];
 | 
				
			||||||
  systemd.services.deluged.serviceConfig.NetworkNamespacePath = ["/var/run/netns/${namespace}"];
 | 
					    requires = ["network-online.target" "${namespace}.service"];
 | 
				
			||||||
 | 
					    serviceConfig.NetworkNamespacePath = ["/var/run/netns/${namespace}"];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # allowing delugeweb to access deluged in network namespace, a socket is necesarry
 | 
					  # allowing delugeweb to access deluged in network namespace, a socket is necesarry
 | 
				
			||||||
  systemd.sockets."proxy-to-deluged" = {
 | 
					  systemd.sockets."proxy-to-deluged" = {
 | 
				
			||||||
| 
						 | 
					@ -101,4 +103,53 @@ in {
 | 
				
			||||||
      PrivateNetwork = "yes";
 | 
					      PrivateNetwork = "yes";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					  #transmission, another torrent client.
 | 
				
			||||||
 | 
					  services.transmission = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    package = pkgs.transmission_4;
 | 
				
			||||||
 | 
					    user = user;
 | 
				
			||||||
 | 
					    group = group;
 | 
				
			||||||
 | 
					    openPeerPorts = true;
 | 
				
			||||||
 | 
					    openRPCPort = true;
 | 
				
			||||||
 | 
					    webHome = pkgs.flood-for-transmission;
 | 
				
			||||||
 | 
					    settings = {
 | 
				
			||||||
 | 
					      utp-enabled = true;
 | 
				
			||||||
 | 
					      watch-dir = "/storage/torrent/watch";
 | 
				
			||||||
 | 
					      watch-dir-enabled = true;
 | 
				
			||||||
 | 
					      incomplete-dir = "/storage/torrent/incomplete";
 | 
				
			||||||
 | 
					      incomplete-dir-enabled = true;
 | 
				
			||||||
 | 
					      download-dir = "/storage/torrent/complete";
 | 
				
			||||||
 | 
					      rpc-bind-address = "100.0.0.0";
 | 
				
			||||||
 | 
					      rpc-port = transmissionWebPort;
 | 
				
			||||||
 | 
					      rpc-whitelist-enabled = false;
 | 
				
			||||||
 | 
					      rpc-host-whitelist-enabled = false;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  systemd.services.transmission = {
 | 
				
			||||||
 | 
					    # binding transmission to network namespace
 | 
				
			||||||
 | 
					    bindsTo = ["netns@${namespace}.service"];
 | 
				
			||||||
 | 
					    requires = ["network-online.target" "${namespace}.service"];
 | 
				
			||||||
 | 
					    serviceConfig.NetworkNamespacePath = ["/var/run/netns/${namespace}"];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  # allowing transmissionweb to access transmission in network namespace, a socket is necesarry
 | 
				
			||||||
 | 
					  systemd.sockets."proxy-to-transmission" = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    description = "Socket for Proxy to Transmission Daemon";
 | 
				
			||||||
 | 
					    listenStreams = ["${toString transmissionWebPort}"];
 | 
				
			||||||
 | 
					    wantedBy = ["sockets.target"];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  # creating proxy service on socket, which forwards the same port from the root namespace to the isolated namespace
 | 
				
			||||||
 | 
					  systemd.services."proxy-to-transmission" = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    description = "Proxy to Transmission Web UI in Network Namespace";
 | 
				
			||||||
 | 
					    requires = ["transmission.service" "proxy-to-transmission.socket"];
 | 
				
			||||||
 | 
					    after = ["transmission.service" "proxy-to-transmission.socket"];
 | 
				
			||||||
 | 
					    unitConfig = {JoinsNamespaceOf = "transmission.service";};
 | 
				
			||||||
 | 
					    serviceConfig = {
 | 
				
			||||||
 | 
					      User = user;
 | 
				
			||||||
 | 
					      Group = group;
 | 
				
			||||||
 | 
					      ExecStart = "${pkgs.systemd}/lib/systemd/systemd-socket-proxyd --exit-idle-time=5min 0.0.0.0:${toString transmissionWebPort}";
 | 
				
			||||||
 | 
					      PrivateNetwork = "yes";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue