python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / modules / services / torrent / flood.nix
blob213f4ef046483a820cdae15d6425444f05acff73
1 { config, lib, pkgs, utils, ... }:
3 let
4   cfg = config.services.flood;
5 in
7   meta.maintainers = with lib.maintainers; [ thiagokokada ];
9   options.services.flood = {
10     enable = lib.mkEnableOption "flood";
11     package = lib.mkPackageOption pkgs "flood" { };
12     openFirewall = lib.mkEnableOption "" // {
13       description = "Whether to open the firewall for the port in {option}`services.flood.port`.";
14     };
15     port = lib.mkOption {
16       type = lib.types.int;
17       description = "Port to bind webserver.";
18       default = 3000;
19       example = 3001;
20     };
21     host = lib.mkOption {
22       type = lib.types.str;
23       description = "Host to bind webserver.";
24       default = "localhost";
25       example = "::";
26     };
27     extraArgs = lib.mkOption {
28       type = with lib.types; listOf str;
29       description = "Extra arguments passed to `flood`.";
30       default = [ ];
31       example = [ "--baseuri=/" ];
32     };
33   };
35   config = lib.mkIf cfg.enable {
36     systemd.services.flood = {
37       description = "A modern web UI for various torrent clients.";
38       after = [ "network.target" ];
39       wantedBy = [ "multi-user.target" ];
40       unitConfig = {
41         Documentation = "https://github.com/jesec/flood/wiki";
42       };
43       serviceConfig = {
44         Restart = "on-failure";
45         RestartSec = "3s";
46         ExecStart = utils.escapeSystemdExecArgs ([
47           (lib.getExe cfg.package)
48           "--host"
49           cfg.host
50           "--port"
51           (toString cfg.port)
52           "--rundir=/var/lib/flood"
53         ] ++ cfg.extraArgs);
55         CapabilityBoundingSet = [ "" ];
56         DynamicUser = true;
57         LockPersonality = true;
58         NoNewPrivileges = true;
59         PrivateDevices = true;
60         PrivateTmp = true;
61         ProtectClock = true;
62         ProtectControlGroups = true;
63         ProtectHome = true;
64         ProtectHostname = true;
65         ProtectKernelLogs = true;
66         ProtectKernelModules = true;
67         ProtectKernelTunables = true;
68         ProtectProc = "invisible";
69         ProtectSystem = "strict";
70         RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
71         RestrictNamespaces = true;
72         RestrictRealtime = true;
73         RestrictSUIDSGID = true;
74         StateDirectory = "flood";
75         SystemCallArchitectures = "native";
76         SystemCallFilter = [ "@system-service" "@pkey" "~@privileged" ];
77       };
78     };
80     networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [
81       cfg.port
82     ];
83   };