about summary refs log tree commit diff
path: root/nixos/modules/services/databases
diff options
context:
space:
mode:
authorGeorge Kollias <georgioskollias@gmail.com>2014-04-01 20:20:33 +0300
committerGeorge Kollias <georgioskollias@gmail.com>2014-04-01 20:20:33 +0300
commit0ded8e6de3da16e9c84ec7f4e5c382565585e04b (patch)
tree66ce646a9df95b4402db93f32706bf1196a079e7 /nixos/modules/services/databases
parent75fb34eb6d5355a156f60ccfb07712c2fa922294 (diff)
downloadnixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar.gz
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar.bz2
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar.lz
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar.xz
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.tar.zst
nixlib-0ded8e6de3da16e9c84ec7f4e5c382565585e04b.zip
Added MonetDB NixOS module.
Diffstat (limited to 'nixos/modules/services/databases')
-rw-r--r--nixos/modules/services/databases/monetdb.nix88
1 files changed, 88 insertions, 0 deletions
diff --git a/nixos/modules/services/databases/monetdb.nix b/nixos/modules/services/databases/monetdb.nix
new file mode 100644
index 000000000000..9d3059c7f452
--- /dev/null
+++ b/nixos/modules/services/databases/monetdb.nix
@@ -0,0 +1,88 @@
+{ config, pkgs, ... }:
+let
+  cfg = config.services.monetdb;
+  monetdbUser = "monetdb";
+in
+with pkgs.lib;
+{
+
+  ###### interface
+
+  options = {
+
+    services.monetdb = {
+
+      enable = mkOption {
+        type = types.bool;
+        default = false;
+        description = "Whether to enable MonetDB database server.";
+      };
+
+      package = mkOption {
+        type = types.path;
+        description = "MonetDB package to use.";
+      };
+
+      dbfarmDir = mkOption {
+        type = types.path;
+        default = "/var/lib/monetdb";
+        description = ''
+          Specifies location of Monetdb dbfarm (keeps database and auxiliary files).
+        '';
+      };
+
+      port = mkOption {
+        default = "50000";
+        example = "50000";
+        description = "Port to listen on.";
+      };
+    };
+
+  };
+
+
+  ###### implementation
+
+  config = mkIf cfg.enable {
+
+    users.extraUsers.monetdb = 
+      { name = monetdbUser;
+        uid = config.ids.uids.monetdb;
+        description = "monetdb user";
+        home = cfg.dbfarmDir;
+      };
+
+    users.extraGroups.monetdb.gid = config.ids.gids.monetdb;
+
+    environment.systemPackages = [ cfg.package ];
+
+    systemd.services.monetdb =
+      { description = "MonetDB Server";
+
+        wantedBy = [ "multi-user.target" ];
+
+        after = [ "network.target" ];
+
+        path = [ cfg.package ];
+
+        preStart =
+          ''
+            # Initialise the database.
+            if ! test -e ${cfg.dbfarmDir}/.merovingian_properties; then
+                mkdir -m 0700 -p ${cfg.dbfarmDir}
+                chown -R ${monetdbUser} ${cfg.dbfarmDir}
+                ${cfg.package}/bin/monetdbd create ${cfg.dbfarmDir}
+                ${cfg.package}/bin/monetdbd set port=${cfg.port} ${cfg.dbfarmDir}
+            fi
+          '';
+
+        serviceConfig.ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dbfarmDir}";
+
+        serviceConfig.ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dbfarmDir}";
+
+        unitConfig.RequiresMountsFor = "${cfg.dbfarmDir}";
+      };
+
+  };
+
+}