grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / logging / syslogd.nix
blobad2d09b5a8de6a5abfdbaa608028d33be9a8cba8
1 { config, lib, pkgs, ... }:
2 let
4   cfg = config.services.syslogd;
6   syslogConf = pkgs.writeText "syslog.conf" ''
7     ${lib.optionalString (cfg.tty != "") "kern.warning;*.err;authpriv.none /dev/${cfg.tty}"}
8     ${cfg.defaultConfig}
9     ${cfg.extraConfig}
10   '';
12   defaultConf = ''
13     # Send emergency messages to all users.
14     *.emerg                       *
16     # "local1" is used for dhcpd messages.
17     local1.*                     -/var/log/dhcpd
19     mail.*                       -/var/log/mail
21     *.=warning;*.=err            -/var/log/warn
22     *.crit                        /var/log/warn
24     *.*;mail.none;local1.none    -/var/log/messages
25   '';
30   ###### interface
32   options = {
34     services.syslogd = {
36       enable = lib.mkOption {
37         type = lib.types.bool;
38         default = false;
39         description = ''
40           Whether to enable syslogd.  Note that systemd also logs
41           syslog messages, so you normally don't need to run syslogd.
42         '';
43       };
45       tty = lib.mkOption {
46         type = lib.types.str;
47         default = "tty10";
48         description = ''
49           The tty device on which syslogd will print important log
50           messages. Leave this option blank to disable tty logging.
51         '';
52       };
54       defaultConfig = lib.mkOption {
55         type = lib.types.lines;
56         default = defaultConf;
57         description = ''
58           The default {file}`syslog.conf` file configures a
59           fairly standard setup of log files, which can be extended by
60           means of {var}`extraConfig`.
61         '';
62       };
64       enableNetworkInput = lib.mkOption {
65         type = lib.types.bool;
66         default = false;
67         description = ''
68           Accept logging through UDP. Option -r of syslogd(8).
69         '';
70       };
72       extraConfig = lib.mkOption {
73         type = lib.types.lines;
74         default = "";
75         example = "news.* -/var/log/news";
76         description = ''
77           Additional text appended to {file}`syslog.conf`,
78           i.e. the contents of {var}`defaultConfig`.
79         '';
80       };
82       extraParams = lib.mkOption {
83         type = lib.types.listOf lib.types.str;
84         default = [ ];
85         example = [ "-m 0" ];
86         description = ''
87           Additional parameters passed to {command}`syslogd`.
88         '';
89       };
91     };
93   };
96   ###### implementation
98   config = lib.mkIf cfg.enable {
100     assertions =
101       [ { assertion = !config.services.rsyslogd.enable;
102           message = "rsyslogd conflicts with syslogd";
103         }
104       ];
106     environment.systemPackages = [ pkgs.sysklogd ];
108     services.syslogd.extraParams = lib.optional cfg.enableNetworkInput "-r";
110     # FIXME: restarting syslog seems to break journal logging.
111     systemd.services.syslog =
112       { description = "Syslog Daemon";
114         requires = [ "syslog.socket" ];
116         wantedBy = [ "multi-user.target" ];
118         serviceConfig =
119           { ExecStart = "${pkgs.sysklogd}/sbin/syslogd ${toString cfg.extraParams} -f ${syslogConf} -n";
120             # Prevent syslogd output looping back through journald.
121             StandardOutput = "null";
122           };
123       };
125   };