grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / databases / chromadb.nix
blobd8d60078cf4555766e54a05fe06e3038437ce9ed
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
8 let
9   cfg = config.services.chromadb;
10   inherit (lib)
11     mkEnableOption
12     mkOption
13     mkIf
14     types
15     literalExpression
16     ;
20   meta.maintainers = with lib.maintainers; [ drupol ];
22   options = {
23     services.chromadb = {
24       enable = mkEnableOption "ChromaDB, an open-source AI application database.";
26       package = mkOption {
27         type = types.package;
28         example = literalExpression "pkgs.python3Packages.chromadb";
29         default = pkgs.python3Packages.chromadb;
30         defaultText = "pkgs.python3Packages.chromadb";
31         description = "ChromaDB package to use.";
32       };
34       host = mkOption {
35         type = types.str;
36         default = "127.0.0.1";
37         description = ''
38           Defines the IP address by which ChromaDB will be accessible.
39         '';
40       };
42       port = mkOption {
43         type = types.port;
44         default = 8000;
45         description = ''
46           Defined the port number to listen.
47         '';
48       };
50       logFile = mkOption {
51         type = types.path;
52         default = "/var/log/chromadb/chromadb.log";
53         description = ''
54           Specifies the location of file for logging output.
55         '';
56       };
58       dbpath = mkOption {
59         type = types.str;
60         default = "/var/lib/chromadb";
61         description = "Location where ChromaDB stores its files";
62       };
64       openFirewall = mkOption {
65         type = types.bool;
66         default = false;
67         description = ''
68           Whether to automatically open the specified TCP port in the firewall.
69         '';
70       };
71     };
72   };
74   config = mkIf cfg.enable {
75     systemd.services.chromadb = {
76       description = "ChromaDB";
77       after = [ "network.target" ];
78       wantedBy = [ "multi-user.target" ];
79       serviceConfig = {
80         Type = "simple";
81         StateDirectory = "chromadb";
82         WorkingDirectory = "/var/lib/chromadb";
83         LogsDirectory = "chromadb";
84         ExecStart = "${lib.getExe cfg.package} run --path ${cfg.dbpath} --host ${cfg.host} --port ${toString cfg.port} --log-path ${cfg.logFile}";
85         Restart = "on-failure";
86         ProtectHome = true;
87         ProtectSystem = "strict";
88         PrivateTmp = true;
89         PrivateDevices = true;
90         ProtectHostname = true;
91         ProtectClock = true;
92         ProtectKernelTunables = true;
93         ProtectKernelModules = true;
94         ProtectKernelLogs = true;
95         ProtectControlGroups = true;
96         NoNewPrivileges = true;
97         RestrictRealtime = true;
98         RestrictSUIDSGID = true;
99         RemoveIPC = true;
100         PrivateMounts = true;
101         DynamicUser = true;
102       };
103     };
105     networking.firewall.allowedTCPPorts = lib.optionals cfg.openFirewall [ cfg.port ];
106   };