1{
2 config,
3 pkgs,
4 lib,
5 ...
6}:
7
8let
9 cfg = config.services.flaresolverr;
10in
11{
12 options = {
13 services.flaresolverr = {
14 enable = lib.mkEnableOption "FlareSolverr, a proxy server to bypass Cloudflare protection";
15
16 package = lib.mkPackageOption pkgs "flaresolverr" { };
17
18 openFirewall = lib.mkOption {
19 type = lib.types.bool;
20 default = false;
21 description = "Open the port in the firewall for FlareSolverr.";
22 };
23
24 port = lib.mkOption {
25 type = lib.types.port;
26 default = 8191;
27 description = "The port on which FlareSolverr will listen for incoming HTTP traffic.";
28 };
29 };
30 };
31
32 config = lib.mkIf cfg.enable {
33 systemd.services.flaresolverr = {
34 description = "FlareSolverr";
35 after = [ "network.target" ];
36 wantedBy = [ "multi-user.target" ];
37
38 environment = {
39 HOME = "/run/flaresolverr";
40 PORT = toString cfg.port;
41 };
42
43 serviceConfig = {
44 SyslogIdentifier = "flaresolverr";
45 Restart = "always";
46 RestartSec = 5;
47 Type = "simple";
48 DynamicUser = true;
49 RuntimeDirectory = "flaresolverr";
50 WorkingDirectory = "/run/flaresolverr";
51 ExecStart = lib.getExe cfg.package;
52 TimeoutStopSec = 30;
53 };
54 };
55
56 networking.firewall = lib.mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port ]; };
57 };
58}