1{ config, lib, pkgs, ... }: 2let 3 cfg = config.services.monetdb; 4 monetdbUser = "monetdb"; 5in 6with lib; 7{ 8 9 ###### interface 10 11 options = { 12 13 services.monetdb = { 14 15 enable = mkOption { 16 type = types.bool; 17 default = false; 18 description = "Whether to enable MonetDB database server."; 19 }; 20 21 package = mkOption { 22 type = types.path; 23 description = "MonetDB package to use."; 24 }; 25 26 dbfarmDir = mkOption { 27 type = types.path; 28 default = "/var/lib/monetdb"; 29 description = '' 30 Specifies location of Monetdb dbfarm (keeps database and auxiliary files). 31 ''; 32 }; 33 34 port = mkOption { 35 default = "50000"; 36 example = "50000"; 37 description = "Port to listen on."; 38 }; 39 }; 40 41 }; 42 43 44 ###### implementation 45 46 config = mkIf cfg.enable { 47 48 users.extraUsers.monetdb = 49 { name = monetdbUser; 50 uid = config.ids.uids.monetdb; 51 description = "monetdb user"; 52 home = cfg.dbfarmDir; 53 }; 54 55 users.extraGroups.monetdb.gid = config.ids.gids.monetdb; 56 57 environment.systemPackages = [ cfg.package ]; 58 59 systemd.services.monetdb = 60 { description = "MonetDB Server"; 61 62 wantedBy = [ "multi-user.target" ]; 63 64 after = [ "network.target" ]; 65 66 path = [ cfg.package ]; 67 68 preStart = 69 '' 70 # Initialise the database. 71 if ! test -e ${cfg.dbfarmDir}/.merovingian_properties; then 72 mkdir -m 0700 -p ${cfg.dbfarmDir} 73 chown -R ${monetdbUser} ${cfg.dbfarmDir} 74 ${cfg.package}/bin/monetdbd create ${cfg.dbfarmDir} 75 ${cfg.package}/bin/monetdbd set port=${cfg.port} ${cfg.dbfarmDir} 76 fi 77 ''; 78 79 serviceConfig.ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dbfarmDir}"; 80 81 serviceConfig.ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dbfarmDir}"; 82 83 unitConfig.RequiresMountsFor = "${cfg.dbfarmDir}"; 84 }; 85 86 }; 87 88}