1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.syslog-ng;
8
9 syslogngConfig = pkgs.writeText "syslog-ng.conf" ''
10 ${cfg.configHeader}
11 ${cfg.extraConfig}
12 '';
13
14 ctrlSocket = "/run/syslog-ng/syslog-ng.ctl";
15 pidFile = "/run/syslog-ng/syslog-ng.pid";
16 persistFile = "/var/syslog-ng/syslog-ng.persist";
17
18 syslogngOptions = [
19 "--foreground"
20 "--module-path=${concatStringsSep ":" (["${cfg.package}/lib/syslog-ng"] ++ cfg.extraModulePaths)}"
21 "--cfgfile=${syslogngConfig}"
22 "--control=${ctrlSocket}"
23 "--persist-file=${persistFile}"
24 "--pidfile=${pidFile}"
25 ];
26
27in {
28 imports = [
29 (mkRemovedOptionModule [ "services" "syslog-ng" "serviceName" ] "")
30 (mkRemovedOptionModule [ "services" "syslog-ng" "listenToJournal" ] "")
31 ];
32
33 options = {
34
35 services.syslog-ng = {
36 enable = mkOption {
37 type = types.bool;
38 default = false;
39 description = ''
40 Whether to enable the syslog-ng daemon.
41 '';
42 };
43 package = mkOption {
44 type = types.package;
45 default = pkgs.syslogng;
46 defaultText = literalExpression "pkgs.syslogng";
47 description = ''
48 The package providing syslog-ng binaries.
49 '';
50 };
51 extraModulePaths = mkOption {
52 type = types.listOf types.str;
53 default = [];
54 example = literalExpression ''
55 [ "''${pkgs.syslogng_incubator}/lib/syslog-ng" ]
56 '';
57 description = ''
58 A list of paths that should be included in syslog-ng's
59 <literal>--module-path</literal> option. They should usually
60 end in <literal>/lib/syslog-ng</literal>
61 '';
62 };
63 extraConfig = mkOption {
64 type = types.lines;
65 default = "";
66 description = ''
67 Configuration added to the end of <literal>syslog-ng.conf</literal>.
68 '';
69 };
70 configHeader = mkOption {
71 type = types.lines;
72 default = ''
73 @version: 3.6
74 @include "scl.conf"
75 '';
76 description = ''
77 The very first lines of the configuration file. Should usually contain
78 the syslog-ng version header.
79 '';
80 };
81 };
82 };
83
84 config = mkIf cfg.enable {
85 systemd.services.syslog-ng = {
86 description = "syslog-ng daemon";
87 preStart = "mkdir -p /{var,run}/syslog-ng";
88 wantedBy = [ "multi-user.target" ];
89 after = [ "multi-user.target" ]; # makes sure hostname etc is set
90 serviceConfig = {
91 Type = "notify";
92 PIDFile = pidFile;
93 StandardOutput = "null";
94 Restart = "on-failure";
95 ExecStart = "${cfg.package}/sbin/syslog-ng ${concatStringsSep " " syslogngOptions}";
96 ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
97 };
98 };
99 };
100
101}