grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / web-apps / isso.nix
blob4e7785d1eb3e377a76eb3dc3a6e7032ff0f90fbe
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib) mkEnableOption mkIf mkOption types literalExpression;
6   cfg = config.services.isso;
8   settingsFormat = pkgs.formats.ini { };
9   configFile = settingsFormat.generate "isso.conf" cfg.settings;
10 in {
12   options = {
13     services.isso = {
14       enable = mkEnableOption ''
15         isso, a commenting server similar to Disqus.
17         Note: The application's author suppose to run isso behind a reverse proxy.
18         The embedded solution offered by NixOS is also only suitable for small installations
19         below 20 requests per second
20       '';
22       settings = mkOption {
23         description = ''
24           Configuration for `isso`.
26           See [Isso Server Configuration](https://posativ.org/isso/docs/configuration/server/)
27           for supported values.
28         '';
30         type = types.submodule {
31           freeformType = settingsFormat.type;
32         };
34         example = literalExpression ''
35           {
36             general = {
37               host = "http://localhost";
38             };
39           }
40         '';
41       };
42     };
43   };
45   config = mkIf cfg.enable {
46     services.isso.settings.general.dbpath = lib.mkDefault "/var/lib/isso/comments.db";
48     systemd.services.isso = {
49       description = "isso, a commenting server similar to Disqus";
50       wantedBy = [ "multi-user.target" ];
52       serviceConfig = {
53         User = "isso";
54         Group = "isso";
56         DynamicUser = true;
58         StateDirectory = "isso";
60         ExecStart = ''
61           ${pkgs.isso}/bin/isso -c ${configFile}
62         '';
64         Restart = "on-failure";
65         RestartSec = 1;
67         # Hardening
68         CapabilityBoundingSet = [ "" ];
69         DeviceAllow = [ "" ];
70         LockPersonality = true;
71         PrivateDevices = true;
72         PrivateUsers = true;
73         ProcSubset = "pid";
74         ProtectClock = true;
75         ProtectControlGroups = true;
76         ProtectHome = true;
77         ProtectHostname = true;
78         ProtectKernelLogs = true;
79         ProtectKernelModules = true;
80         ProtectKernelTunables = true;
81         ProtectProc = "invisible";
82         RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
83         RestrictNamespaces = true;
84         RestrictRealtime = true;
85         SystemCallArchitectures = "native";
86         SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
87         UMask = "0077";
88       };
89     };
90   };