1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.rsyslogd;
8
9 syslogConf = pkgs.writeText "syslog.conf" ''
10 $ModLoad imuxsock
11 $SystemLogSocketName /run/systemd/journal/syslog
12 $WorkDirectory /var/spool/rsyslog
13
14 ${cfg.defaultConfig}
15 ${cfg.extraConfig}
16 '';
17
18 defaultConf = ''
19 # "local1" is used for dhcpd messages.
20 local1.* -/var/log/dhcpd
21
22 mail.* -/var/log/mail
23
24 *.=warning;*.=err -/var/log/warn
25 *.crit /var/log/warn
26
27 *.*;mail.none;local1.none -/var/log/messages
28 '';
29
30in
31
32{
33 ###### interface
34
35 options = {
36
37 services.rsyslogd = {
38
39 enable = mkOption {
40 type = types.bool;
41 default = false;
42 description = ''
43 Whether to enable syslogd. Note that systemd also logs
44 syslog messages, so you normally don't need to run syslogd.
45 '';
46 };
47
48 defaultConfig = mkOption {
49 type = types.string;
50 default = defaultConf;
51 description = ''
52 The default <filename>syslog.conf</filename> file configures a
53 fairly standard setup of log files, which can be extended by
54 means of <varname>extraConfig</varname>.
55 '';
56 };
57
58 extraConfig = mkOption {
59 type = types.string;
60 default = "";
61 example = "news.* -/var/log/news";
62 description = ''
63 Additional text appended to <filename>syslog.conf</filename>,
64 i.e. the contents of <varname>defaultConfig</varname>.
65 '';
66 };
67
68 extraParams = mkOption {
69 type = types.listOf types.str;
70 default = [ ];
71 example = [ "-m 0" ];
72 description = ''
73 Additional parameters passed to <command>rsyslogd</command>.
74 '';
75 };
76
77 };
78
79 };
80
81
82 ###### implementation
83
84 config = mkIf cfg.enable {
85
86 environment.systemPackages = [ pkgs.rsyslog ];
87
88 systemd.services.syslog =
89 { description = "Syslog Daemon";
90
91 requires = [ "syslog.socket" ];
92
93 wantedBy = [ "multi-user.target" ];
94
95 serviceConfig =
96 { ExecStart = "${pkgs.rsyslog}/sbin/rsyslogd ${toString cfg.extraParams} -f ${syslogConf} -n";
97 ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/spool/rsyslog";
98 # Prevent syslogd output looping back through journald.
99 StandardOutput = "null";
100 };
101 };
102
103 };
104
105}