vuls: init at 0.27.0 (#348530)
[NixPkgs.git] / nixos / modules / services / web-apps / eintopf.nix
bloba2b304445597ea5b5f14b634f2d88312bb93b654
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
7   cfg = config.services.eintopf;
9 in {
10   options.services.eintopf = {
12     enable = mkEnableOption "Eintopf community event calendar web app";
14     settings = mkOption {
15       type = types.attrsOf types.str;
16       default = { };
17       description = ''
18         Settings to configure web service. See
19         <https://codeberg.org/Klasse-Methode/eintopf/src/branch/main/DEPLOYMENT.md>
20         for available options.
21       '';
22       example = literalExpression ''
23         {
24           EINTOPF_ADDR = ":1234";
25           EINTOPF_ADMIN_EMAIL = "admin@example.org";
26           EINTOPF_TIMEZONE = "Europe/Berlin";
27         }
28       '';
29     };
31     secrets = lib.mkOption {
32       type = with types; listOf path;
33       description = ''
34         A list of files containing the various secrets. Should be in the
35         format expected by systemd's `EnvironmentFile` directory.
36       '';
37       default = [ ];
38     };
40   };
42   config = mkIf cfg.enable {
44     systemd.services.eintopf = {
45       description = "Community event calendar web app";
46       wantedBy = [ "multi-user.target" ];
47       after = [ "network-online.target" ];
48       wants = [ "network-online.target" ];
49       environment = cfg.settings;
50       serviceConfig = {
51         ExecStart = "${pkgs.eintopf}/bin/eintopf";
52         WorkingDirectory = "/var/lib/eintopf";
53         StateDirectory = "eintopf" ;
54         EnvironmentFile = [ cfg.secrets ];
56         # hardening
57         AmbientCapabilities = "";
58         CapabilityBoundingSet = "" ;
59         DevicePolicy = "closed";
60         DynamicUser = true;
61         LockPersonality = true;
62         MemoryDenyWriteExecute = true;
63         NoNewPrivileges = true;
64         PrivateDevices = true;
65         PrivateTmp = true;
66         PrivateUsers = true;
67         ProcSubset = "pid";
68         ProtectClock = true;
69         ProtectControlGroups = true;
70         ProtectHome = true;
71         ProtectHostname = true;
72         ProtectKernelLogs = true;
73         ProtectKernelModules = true;
74         ProtectKernelTunables = true;
75         ProtectProc = "invisible";
76         ProtectSystem = "strict";
77         RemoveIPC = true;
78         RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
79         RestrictNamespaces = true;
80         RestrictRealtime = true;
81         RestrictSUIDSGID = true;
82         SystemCallArchitectures = "native";
83         SystemCallFilter = [ "@system-service" "~@privileged" ];
84         UMask = "0077";
85       };
86     };
88   };
90   meta.maintainers = with lib.maintainers; [ onny ];