grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / misc / pykms.nix
blobd1b209e38932068d249b265e2bcdb90522f5e50a
1 { config, lib, pkgs, ... }:
3 with lib;
4 let
5   cfg = config.services.pykms;
6   libDir = "/var/lib/pykms";
8 in
10   meta.maintainers = with lib.maintainers; [ peterhoeg ];
12   imports = [
13     (mkRemovedOptionModule [ "services" "pykms" "verbose" ] "Use services.pykms.logLevel instead")
14   ];
16   options = {
17     services.pykms = {
18       enable = mkOption {
19         type = types.bool;
20         default = false;
21         description = "Whether to enable the PyKMS service.";
22       };
24       listenAddress = mkOption {
25         type = types.str;
26         default = "0.0.0.0";
27         description = "The IP address on which to listen.";
28       };
30       port = mkOption {
31         type = types.port;
32         default = 1688;
33         description = "The port on which to listen.";
34       };
36       openFirewallPort = mkOption {
37         type = types.bool;
38         default = false;
39         description = "Whether the listening port should be opened automatically.";
40       };
42       memoryLimit = mkOption {
43         type = types.str;
44         default = "64M";
45         description = "How much memory to use at most.";
46       };
48       logLevel = mkOption {
49         type = types.enum [ "CRITICAL" "ERROR" "WARNING" "INFO" "DEBUG" "MININFO" ];
50         default = "INFO";
51         description = "How much to log";
52       };
54       extraArgs = mkOption {
55         type = types.listOf types.str;
56         default = [ ];
57         description = "Additional arguments";
58       };
59     };
60   };
62   config = mkIf cfg.enable {
63     networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewallPort [ cfg.port ];
65     systemd.services.pykms = {
66       description = "Python KMS";
67       after = [ "network.target" ];
68       wantedBy = [ "multi-user.target" ];
69       # python programs with DynamicUser = true require HOME to be set
70       environment.HOME = libDir;
71       serviceConfig = with pkgs; {
72         DynamicUser = true;
73         StateDirectory = baseNameOf libDir;
74         ExecStartPre = "${getBin pykms}/libexec/create_pykms_db.sh ${libDir}/clients.db";
75         ExecStart = lib.concatStringsSep " " ([
76           "${getBin pykms}/bin/server"
77           "--logfile=STDOUT"
78           "--loglevel=${cfg.logLevel}"
79           "--sqlite=${libDir}/clients.db"
80         ] ++ cfg.extraArgs ++ [
81           cfg.listenAddress
82           (toString cfg.port)
83         ]);
84         ProtectHome = "tmpfs";
85         WorkingDirectory = libDir;
86         SyslogIdentifier = "pykms";
87         Restart = "on-failure";
88         MemoryMax = cfg.memoryLimit;
89       };
90     };
91   };