1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 inherit (pkgs) jre openfire coreutils which gnugrep gawk gnused;
8
9 extraStartDependency =
10 if config.services.openfire.usePostgreSQL then "and started postgresql" else "";
11
12in
13
14{
15
16 ###### interface
17
18 options = {
19
20 services.openfire = {
21
22 enable = mkOption {
23 default = false;
24 description = "
25 Whether to enable OpenFire XMPP server.
26 ";
27 };
28
29 usePostgreSQL = mkOption {
30 default = true;
31 description = "
32 Whether you use PostgreSQL service for your storage back-end.
33 ";
34 };
35
36 };
37
38 };
39
40
41 ###### implementation
42
43 config = mkIf config.services.openfire.enable {
44
45 assertions = singleton
46 { assertion = !(config.services.openfire.usePostgreSQL -> config.services.postgresql.enable);
47 message = "OpenFire assertion failed.";
48 };
49
50 jobs.openfire =
51 { description = "OpenFire XMPP server";
52
53 startOn = "started networking ${extraStartDependency}";
54
55 script =
56 ''
57 export PATH=${jre}/bin:${openfire}/bin:${coreutils}/bin:${which}/bin:${gnugrep}/bin:${gawk}/bin:${gnused}/bin
58 export HOME=/tmp
59 mkdir /var/log/openfire || true
60 mkdir /etc/openfire || true
61 for i in ${openfire}/conf.inst/*; do
62 if ! test -f /etc/openfire/$(basename $i); then
63 cp $i /etc/openfire/
64 fi
65 done
66 openfire start
67 ''; # */
68 };
69
70 };
71
72}