nerdfonts: fix wrong attribute name in error message (#364463)
[NixPkgs.git] / nixos / modules / services / web-apps / prosody-filer.nix
blob93bc37a5be5492e11636aa6ea17c6e12d64cc612
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
9 let
11   cfg = config.services.prosody-filer;
13   settingsFormat = pkgs.formats.toml { };
14   configFile = settingsFormat.generate "prosody-filer.toml" cfg.settings;
18   options = {
19     services.prosody-filer = {
20       enable = mkEnableOption "Prosody Filer XMPP upload file server";
22       settings = mkOption {
23         description = ''
24           Configuration for Prosody Filer.
25           Refer to <https://github.com/ThomasLeister/prosody-filer#configure-prosody-filer> for details on supported values.
26         '';
28         type = settingsFormat.type;
30         example = {
31           secret = "mysecret";
32           storeDir = "/srv/http/nginx/prosody-upload";
33         };
35         defaultText = literalExpression ''
36           {
37             listenport = mkDefault "127.0.0.1:5050";
38             uploadSubDir = mkDefault "upload/";
39           }
40         '';
41       };
42     };
43   };
45   config = mkIf cfg.enable {
46     services.prosody-filer.settings = {
47       listenport = mkDefault "127.0.0.1:5050";
48       uploadSubDir = mkDefault "upload/";
49     };
51     users.users.prosody-filer = {
52       group = "prosody-filer";
53       isSystemUser = true;
54     };
56     users.groups.prosody-filer = { };
58     systemd.services.prosody-filer = {
59       description = "Prosody file upload server";
60       wantedBy = [ "multi-user.target" ];
61       after = [ "network.target" ];
63       serviceConfig = {
64         User = "prosody-filer";
65         Group = "prosody-filer";
66         ExecStart = "${pkgs.prosody-filer}/bin/prosody-filer -config ${configFile}";
67         Restart = "on-failure";
68         CapabilityBoundingSet = "";
69         NoNewPrivileges = true;
70         PrivateDevices = true;
71         PrivateTmp = true;
72         PrivateMounts = true;
73         ProtectHome = true;
74         ProtectClock = true;
75         ProtectProc = "noaccess";
76         ProcSubset = "pid";
77         ProtectKernelLogs = true;
78         ProtectKernelModules = true;
79         ProtectKernelTunables = true;
80         ProtectControlGroups = true;
81         ProtectHostname = true;
82         RestrictSUIDSGID = true;
83         RestrictRealtime = true;
84         RestrictNamespaces = true;
85         LockPersonality = true;
86         RemoveIPC = true;
87         RestrictAddressFamilies = [
88           "AF_INET"
89           "AF_INET6"
90         ];
91         SystemCallFilter = [
92           "@system-service"
93           "~@privileged"
94         ];
95       };
96     };
97   };