1{ config, lib, pkgs, ...}:
2let
3 cfg = config.services.varnish;
4
5in
6with lib;
7{
8 options = {
9 services.varnish = {
10 enable = mkOption {
11 default = false;
12 description = "
13 Enable the Varnish Server.
14 ";
15 };
16
17 http_address = mkOption {
18 default = "*:6081";
19 description = "
20 HTTP listen address and port.
21 ";
22 };
23
24 config = mkOption {
25 description = "
26 Verbatim default.vcl configuration.
27 ";
28 };
29
30 stateDir = mkOption {
31 default = "/var/spool/varnish";
32 description = "
33 Directory holding all state for Varnish to run.
34 ";
35 };
36 };
37
38 };
39
40 config = mkIf cfg.enable {
41
42 systemd.services.varnish = {
43 description = "Varnish";
44 wantedBy = [ "multi-user.target" ];
45 preStart = ''
46 mkdir -p ${cfg.stateDir}
47 chown -R varnish:varnish ${cfg.stateDir}
48 '';
49 path = [ pkgs.gcc ];
50 serviceConfig.ExecStart = "${pkgs.varnish}/sbin/varnishd -a ${cfg.http_address} -f ${pkgs.writeText "default.vcl" cfg.config} -n ${cfg.stateDir} -u varnish";
51 serviceConfig.Type = "forking";
52 };
53
54 environment.systemPackages = [ pkgs.varnish ];
55
56 users.extraUsers.varnish = {
57 group = "varnish";
58 uid = config.ids.uids.varnish;
59 };
60
61 users.extraGroups.varnish.gid = config.ids.uids.varnish;
62 };
63}