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}