at 16.09-beta 1.5 kB view raw
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/${config.networking.hostName}"; 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 postStop = '' 50 rm -rf ${cfg.stateDir} 51 ''; 52 path = [ pkgs.gcc ]; 53 serviceConfig.ExecStart = "${pkgs.varnish}/sbin/varnishd -a ${cfg.http_address} -f ${pkgs.writeText "default.vcl" cfg.config} -n ${cfg.stateDir} -u varnish"; 54 serviceConfig.Type = "forking"; 55 }; 56 57 environment.systemPackages = [ pkgs.varnish ]; 58 59 users.extraUsers.varnish = { 60 group = "varnish"; 61 uid = config.ids.uids.varnish; 62 }; 63 64 users.extraGroups.varnish.gid = config.ids.uids.varnish; 65 }; 66}