linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / services / databases / monetdb.nix
blobee24cf2b0fc2077545fed595900c3f4e91102cbd
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.monetdb;
8 in {
9   meta.maintainers = with maintainers; [ StillerHarpo ];
11   ###### interface
12   options = {
13     services.monetdb = {
15       enable = mkEnableOption "the MonetDB database server";
17       package = mkPackageOption pkgs "monetdb" { };
19       user = mkOption {
20         type = types.str;
21         default = "monetdb";
22         description = "User account under which MonetDB runs.";
23       };
25       group = mkOption {
26         type = types.str;
27         default = "monetdb";
28         description = "Group under which MonetDB runs.";
29       };
31       dataDir = mkOption {
32         type = types.path;
33         default = "/var/lib/monetdb";
34         description = "Data directory for the dbfarm.";
35       };
37       port = mkOption {
38         type = types.ints.u16;
39         default = 50000;
40         description = "Port to listen on.";
41       };
43       listenAddress = mkOption {
44         type = types.str;
45         default = "127.0.0.1";
46         example = "0.0.0.0";
47         description = "Address to listen on.";
48       };
49     };
50   };
52   ###### implementation
53   config = mkIf cfg.enable {
55     users.users.monetdb = mkIf (cfg.user == "monetdb") {
56       uid = config.ids.uids.monetdb;
57       group = cfg.group;
58       description = "MonetDB user";
59       home = cfg.dataDir;
60       createHome = true;
61     };
63     users.groups.monetdb = mkIf (cfg.group == "monetdb") {
64       gid = config.ids.gids.monetdb;
65       members = [ cfg.user ];
66     };
68     environment.systemPackages = [ cfg.package ];
70     systemd.services.monetdb = {
71       description = "MonetDB database server";
72       wantedBy = [ "multi-user.target" ];
73       after = [ "network.target" ];
74       path = [ cfg.package ];
75       unitConfig.RequiresMountsFor = "${cfg.dataDir}";
76       serviceConfig = {
77         User = cfg.user;
78         Group = cfg.group;
79         ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dataDir}";
80         ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dataDir}";
81       };
82       preStart = ''
83         if [ ! -e ${cfg.dataDir}/.merovingian_properties ]; then
84           # Create the dbfarm (as cfg.user)
85           ${cfg.package}/bin/monetdbd create ${cfg.dataDir}
86         fi
88         # Update the properties
89         ${cfg.package}/bin/monetdbd set port=${toString cfg.port} ${cfg.dataDir}
90         ${cfg.package}/bin/monetdbd set listenaddr=${cfg.listenAddress} ${cfg.dataDir}
91       '';
92     };
94   };