linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / services / misc / plikd.nix
blob477c1b413fd0e2e087835c254d1883f01b4ffbf6
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.plikd;
5   format = pkgs.formats.toml {};
6   plikdCfg = format.generate "plikd.cfg" cfg.settings;
7 in
9   options = {
10     services.plikd = {
11       enable = lib.mkEnableOption "plikd, a temporary file upload system";
13       openFirewall = lib.mkOption {
14         type = lib.types.bool;
15         default = false;
16         description = "Open ports in the firewall for the plikd.";
17       };
19       settings = lib.mkOption {
20         type = format.type;
21         default = {};
22         description = ''
23           Configuration for plikd, see <https://github.com/root-gg/plik/blob/master/server/plikd.cfg>
24           for supported values.
25         '';
26       };
27     };
28   };
30   config = lib.mkIf cfg.enable {
31     services.plikd.settings = lib.mapAttrs (name: lib.mkDefault) {
32       ListenPort = 8080;
33       ListenAddress = "localhost";
34       DataBackend = "file";
35       DataBackendConfig = {
36          Directory = "/var/lib/plikd";
37       };
38       MetadataBackendConfig = {
39         Driver = "sqlite3";
40         ConnectionString = "/var/lib/plikd/plik.db";
41       };
42     };
44     systemd.services.plikd = {
45       description = "Plikd file sharing server";
46       after = [ "network.target" ];
47       wantedBy = [ "multi-user.target" ];
48       serviceConfig = {
49         Type = "simple";
50         ExecStart = "${pkgs.plikd}/bin/plikd --config ${plikdCfg}";
51         Restart = "on-failure";
52         StateDirectory = "plikd";
53         LogsDirectory = "plikd";
54         DynamicUser = true;
56         # Basic hardening
57         NoNewPrivileges = "yes";
58         PrivateTmp = "yes";
59         PrivateDevices = "yes";
60         DevicePolicy = "closed";
61         ProtectSystem = "strict";
62         ProtectHome = "read-only";
63         ProtectControlGroups = "yes";
64         ProtectKernelModules = "yes";
65         ProtectKernelTunables = "yes";
66         RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
67         RestrictNamespaces = "yes";
68         RestrictRealtime = "yes";
69         RestrictSUIDSGID = "yes";
70         MemoryDenyWriteExecute = "yes";
71         LockPersonality = "yes";
72       };
73     };
75     networking.firewall = lib.mkIf cfg.openFirewall {
76       allowedTCPPorts = [ cfg.settings.ListenPort ];
77     };
78   };