1{ config, lib, pkgs, ... }:
2
3with lib;
4
5{
6 ###### interface
7
8 options = {
9
10 services.openfire = {
11
12 enable = mkEnableOption "OpenFire XMPP server";
13
14 usePostgreSQL = mkOption {
15 type = types.bool;
16 default = true;
17 description = "
18 Whether you use PostgreSQL service for your storage back-end.
19 ";
20 };
21
22 };
23
24 };
25
26
27 ###### implementation
28
29 config = mkIf config.services.openfire.enable {
30
31 assertions = singleton
32 { assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
33 message = "OpenFire configured to use PostgreSQL but services.postgresql.enable is not enabled.";
34 };
35
36 systemd.services.openfire = {
37 description = "OpenFire XMPP server";
38 wantedBy = [ "multi-user.target" ];
39 after = [ "networking.target" ] ++
40 optional config.services.openfire.usePostgreSQL "postgresql.service";
41 path = with pkgs; [ jre openfire coreutils which gnugrep gawk gnused ];
42 script = ''
43 export HOME=/tmp
44 mkdir /var/log/openfire || true
45 mkdir /etc/openfire || true
46 for i in ${pkgs.openfire}/conf.inst/*; do
47 if ! test -f /etc/openfire/$(basename $i); then
48 cp $i /etc/openfire/
49 fi
50 done
51 openfire start
52 ''; # */
53 };
54 };
55
56}