1{ config, lib, pkgs, utils, ... }:
2
3with lib;
4
5let
6 cfg = config.systemd.coredump;
7 systemd = config.systemd.package;
8in {
9 options = {
10 systemd.coredump.enable = mkOption {
11 default = true;
12 type = types.bool;
13 description = lib.mdDoc ''
14 Whether core dumps should be processed by
15 {command}`systemd-coredump`. If disabled, core dumps
16 appear in the current directory of the crashing process.
17 '';
18 };
19
20 systemd.coredump.extraConfig = mkOption {
21 default = "";
22 type = types.lines;
23 example = "Storage=journal";
24 description = lib.mdDoc ''
25 Extra config options for systemd-coredump. See coredump.conf(5) man page
26 for available options.
27 '';
28 };
29 };
30
31 config = mkMerge [
32
33 (mkIf cfg.enable {
34 systemd.additionalUpstreamSystemUnits = [
35 "systemd-coredump.socket"
36 "systemd-coredump@.service"
37 ];
38
39 environment.etc = {
40 "systemd/coredump.conf".text =
41 ''
42 [Coredump]
43 ${cfg.extraConfig}
44 '';
45
46 # install provided sysctl snippets
47 "sysctl.d/50-coredump.conf".source = "${systemd}/example/sysctl.d/50-coredump.conf";
48 "sysctl.d/50-default.conf".source = "${systemd}/example/sysctl.d/50-default.conf";
49 };
50
51 users.users.systemd-coredump = {
52 uid = config.ids.uids.systemd-coredump;
53 group = "systemd-coredump";
54 };
55 users.groups.systemd-coredump = {};
56 })
57
58 (mkIf (!cfg.enable) {
59 boot.kernel.sysctl."kernel.core_pattern" = mkDefault "core";
60 })
61
62 ];
63
64}