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