Merge: zmap: 4.2.0 -> 4.3.1 (#364578)
[NixPkgs.git] / nixos / modules / services / networking / polipo.nix
blob67f83358312e428bc9c76b386565983d4c4c9702
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
10 let
12   cfg = config.services.polipo;
14   polipoConfig = pkgs.writeText "polipo.conf" ''
15     proxyAddress = ${cfg.proxyAddress}
16     proxyPort = ${toString cfg.proxyPort}
17     allowedClients = ${concatStringsSep ", " cfg.allowedClients}
18     ${optionalString (cfg.parentProxy != "") "parentProxy = ${cfg.parentProxy}"}
19     ${optionalString (cfg.socksParentProxy != "") "socksParentProxy = ${cfg.socksParentProxy}"}
20     ${config.services.polipo.extraConfig}
21   '';
27   options = {
29     services.polipo = {
31       enable = mkEnableOption "polipo caching web proxy";
33       proxyAddress = mkOption {
34         type = types.str;
35         default = "127.0.0.1";
36         description = "IP address on which Polipo will listen.";
37       };
39       proxyPort = mkOption {
40         type = types.port;
41         default = 8123;
42         description = "TCP port on which Polipo will listen.";
43       };
45       allowedClients = mkOption {
46         type = types.listOf types.str;
47         default = [
48           "127.0.0.1"
49           "::1"
50         ];
51         example = [
52           "127.0.0.1"
53           "::1"
54           "134.157.168.0/24"
55           "2001:660:116::/48"
56         ];
57         description = ''
58           List of IP addresses or network addresses that may connect to Polipo.
59         '';
60       };
62       parentProxy = mkOption {
63         type = types.str;
64         default = "";
65         example = "localhost:8124";
66         description = ''
67           Hostname and port number of an HTTP parent proxy;
68           it should have the form ‘host:port’.
69         '';
70       };
72       socksParentProxy = mkOption {
73         type = types.str;
74         default = "";
75         example = "localhost:9050";
76         description = ''
77           Hostname and port number of an SOCKS parent proxy;
78           it should have the form ‘host:port’.
79         '';
80       };
82       extraConfig = mkOption {
83         type = types.lines;
84         default = "";
85         description = ''
86           Polio configuration. Contents will be added
87           verbatim to the configuration file.
88         '';
89       };
91     };
93   };
95   config = mkIf cfg.enable {
97     users.users.polipo = {
98       uid = config.ids.uids.polipo;
99       description = "Polipo caching proxy user";
100       home = "/var/cache/polipo";
101       createHome = true;
102     };
104     users.groups.polipo = {
105       gid = config.ids.gids.polipo;
106       members = [ "polipo" ];
107     };
109     systemd.services.polipo = {
110       description = "caching web proxy";
111       after = [
112         "network.target"
113         "nss-lookup.target"
114       ];
115       wantedBy = [ "multi-user.target" ];
116       serviceConfig = {
117         ExecStart = "${pkgs.polipo}/bin/polipo -c ${polipoConfig}";
118         User = "polipo";
119       };
120     };
122   };