python312Packages.yoda: 2.0.1 -> 2.0.2
[NixPkgs.git] / nixos / modules / services / databases / surrealdb.nix
blobd38b7b311f1f8c8a9679b4d819d0e75ec2497ce4
1 { config, lib, pkgs, ... }:
2 let
4   cfg = config.services.surrealdb;
5 in {
7   options = {
8     services.surrealdb = {
9       enable = lib.mkEnableOption "SurrealDB, a scalable, distributed, collaborative, document-graph database, for the realtime web";
11       package = lib.mkPackageOption pkgs "surrealdb" { };
13       dbPath = lib.mkOption {
14         type = lib.types.str;
15         description = ''
16           The path that surrealdb will write data to. Use null for in-memory.
17           Can be one of "memory", "rocksdb://:path", "surrealkv://:path", "tikv://:addr", "fdb://:addr".
18         '';
19         default = "rocksdb:///var/lib/surrealdb/";
20         example = "memory";
21       };
23       host = lib.mkOption {
24         type = lib.types.str;
25         description = ''
26           The host that surrealdb will connect to.
27         '';
28         default = "127.0.0.1";
29         example = "127.0.0.1";
30       };
32       port = lib.mkOption {
33         type = lib.types.port;
34         description = ''
35           The port that surrealdb will connect to.
36         '';
37         default = 8000;
38         example = 8000;
39       };
41       extraFlags = lib.mkOption {
42         type = lib.types.listOf lib.types.str;
43         default = [];
44         example = [ "--allow-all" "--user" "root" "--pass" "root" ];
45         description = ''
46           Specify a list of additional command line flags.
47         '';
48       };
49     };
50   };
52   config = lib.mkIf cfg.enable {
54     # Used to connect to the running service
55     environment.systemPackages = [ cfg.package ] ;
57     systemd.services.surrealdb = {
58       description = "A scalable, distributed, collaborative, document-graph database, for the realtime web";
59       wantedBy = [ "multi-user.target" ];
60       after = [ "network.target" ];
62       serviceConfig = {
63         ExecStart = "${cfg.package}/bin/surreal start --bind ${cfg.host}:${toString cfg.port} ${lib.strings.concatStringsSep " " cfg.extraFlags} -- ${cfg.dbPath}";
64         DynamicUser = true;
65         Restart = "on-failure";
66         StateDirectory = "surrealdb";
67         CapabilityBoundingSet = "";
68         NoNewPrivileges = true;
69         PrivateTmp = true;
70         ProtectHome = true;
71         ProtectClock = true;
72         ProtectProc = "noaccess";
73         ProcSubset = "pid";
74         ProtectKernelLogs = true;
75         ProtectKernelModules = true;
76         ProtectKernelTunables = true;
77         ProtectControlGroups = true;
78         ProtectHostname = true;
79         RestrictSUIDSGID = true;
80         RestrictRealtime = true;
81         RestrictNamespaces = true;
82         LockPersonality = true;
83         RemoveIPC = true;
84         SystemCallFilter = [ "@system-service" "~@privileged" ];
85       };
86     };
87   };