95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, lib, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
| 
 | |
|   cfg = config.services.syslog-ng;
 | |
| 
 | |
|   syslogngConfig = pkgs.writeText "syslog-ng.conf" ''
 | |
|     ${cfg.configHeader}
 | |
|     ${cfg.extraConfig}
 | |
|   '';
 | |
| 
 | |
|   ctrlSocket = "/run/syslog-ng/syslog-ng.ctl";
 | |
|   pidFile = "/run/syslog-ng/syslog-ng.pid";
 | |
|   persistFile = "/var/syslog-ng/syslog-ng.persist";
 | |
| 
 | |
|   syslogngOptions = [
 | |
|     "--foreground"
 | |
|     "--module-path=${concatStringsSep ":" (["${cfg.package}/lib/syslog-ng"] ++ cfg.extraModulePaths)}"
 | |
|     "--cfgfile=${syslogngConfig}"
 | |
|     "--control=${ctrlSocket}"
 | |
|     "--persist-file=${persistFile}"
 | |
|     "--pidfile=${pidFile}"
 | |
|   ];
 | |
| 
 | |
| in {
 | |
| 
 | |
|   options = {
 | |
| 
 | |
|     services.syslog-ng = {
 | |
|       enable = mkOption {
 | |
|         type = types.bool;
 | |
|         default = false;
 | |
|         description = ''
 | |
|           Whether to enable the syslog-ng daemon.
 | |
|         '';
 | |
|       };
 | |
|       package = mkOption {
 | |
|         type = types.package;
 | |
|         default = pkgs.syslogng;
 | |
|         description = ''
 | |
|           The package providing syslog-ng binaries.
 | |
|         '';
 | |
|       };
 | |
|       extraModulePaths = mkOption {
 | |
|         type = types.listOf types.str;
 | |
|         default = [];
 | |
|         example = literalExample ''
 | |
|           [ "''${pkgs.syslogng_incubator}/lib/syslog-ng" ]
 | |
|         '';
 | |
|         description = ''
 | |
|           A list of paths that should be included in syslog-ng's
 | |
|           <literal>--module-path</literal> option. They should usually
 | |
|           end in <literal>/lib/syslog-ng</literal>
 | |
|         '';
 | |
|       };
 | |
|       extraConfig = mkOption {
 | |
|         type = types.lines;
 | |
|         default = "";
 | |
|         description = ''
 | |
|           Configuration added to the end of <literal>syslog-ng.conf</literal>.
 | |
|         '';
 | |
|       };
 | |
|       configHeader = mkOption {
 | |
|         type = types.lines;
 | |
|         default = ''
 | |
|           @version: 3.6
 | |
|           @include "scl.conf"
 | |
|         '';
 | |
|         description = ''
 | |
|           The very first lines of the configuration file. Should usually contain
 | |
|           the syslog-ng version header.
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     systemd.services.syslog-ng = {
 | |
|       description = "syslog-ng daemon";
 | |
|       preStart = "mkdir -p /{var,run}/syslog-ng";
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       after = [ "multi-user.target" ]; # makes sure hostname etc is set
 | |
|       serviceConfig = {
 | |
|         Type = "notify";
 | |
|         StandardOutput = "null";
 | |
|         Restart = "on-failure";
 | |
|         ExecStart = "${cfg.package}/sbin/syslog-ng ${concatStringsSep " " syslogngOptions}";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
| }
 | 
