{ config, lib, pkgs, ... }:
let
cfg = config.myServices.websites.tools.im;
converseVersion = "9.1.1";
www = pkgs.runCommand "www" {} ''
cp -a ${./www} $out
substituteInPlace $out/converse.html --replace {{converseVersion}} ${converseVersion}
'';
in
{
options.myServices.websites.tools.im = {
enable = lib.mkEnableOption "enable im website";
};
config = lib.mkIf cfg.enable {
myServices.chatonsProperties.services.converse = {
file.datetime = "2022-08-21T19:20:00";
service = {
name = "Converse";
description = "A free and open-source XMPP chat client in your browser";
website = "https://im.immae.fr/converse";
logo = "https://conversejs.org/docs/html/_static/favicon.ico";
status.level = "OK";
status.description = "OK";
registration."" = ["NONE" "FREE"];
registration.load = "OPEN";
install.type = "PACKAGE";
};
software = {
name = "Converse";
website = "https://conversejs.org/";
license.name = "Mozilla Public License 2.0";
license.url = "https://github.com/conversejs/converse.js/blob/master/LICENSE";
version = "9.1.1";
source.url = "https://github.com/conversejs/converse.js";
};
};
myServices.chatonsProperties.services.weechat-bridge = {
file.datetime = "2022-08-21T19:20:00";
service = {
name = "Weechat bridge";
description = "WeeChat web frontend";
website = "https://im.immae.fr/glowing-bear";
logo = "https://im.immae.fr/glowing-bear/assets/img/glowing_bear_128x128.png";
status.level = "OK";
status.description = "OK";
registration."" = ["NONE" "FREE"];
registration.load = "OPEN";
install.type = "PACKAGE";
};
software = {
name = "Glowing bear";
website = "https://www.ejabberd.im/";
license.name = "GNU General Public License v3.0";
license.url = "https://github.com/processone/ejabberd";
version = pkgs.glowing-bear.version;
source.url = "https://github.com/glowing-bear/glowing-bear";
};
};
myServices.chatonsProperties.services.xmpp = {
file.datetime = "2022-08-21T19:20:00";
service = {
name = "XMPP";
description = "Universal messaging standard";
website = "https://im.immae.fr/";
logo = "https://xmpp.org/favicon-32x32.png";
status.level = "OK";
status.description = "OK";
registration."" = ["MEMBER" "CLIENT"];
registration.load = "OPEN";
install.type = "PACKAGE";
};
software = {
name = "ejabberd";
website = "https://www.ejabberd.im/";
license.url = "https://github.com/processone/ejabberd/blob/master/COPYING";
license.name = "GNU GENERAL PUBLIC LICENSE Version 2";
version = pkgs.ejabberd.version;
source.url = "https://github.com/processone/ejabberd";
modules = "converse";
};
};
security.acme.certs.eldiron.extraDomainNames = [ "im.immae.fr" ];
services.websites.env.tools.vhostConfs.im = {
certName = "eldiron";
hosts = ["im.immae.fr"];
root = www;
extraConfig = [
''
Alias /glowing-bear ${pkgs.glowing-bear}
Alias /converse ${www}/converse.html
ProxyPreserveHost On
ProxyPass http://localhost:5280/bosh
ProxyPassReverse http://localhost:5280/bosh
ProxyPass ws://localhost:5280/ws
ProxyPass /upload http://localhost:5280/upload
ProxyPassReverse /upload http://localhost:5280/upload
ProxyPass /admin http://localhost:5280/admin
ProxyPassReverse /admin http://localhost:5280/admin
ProxyPass /api http://localhost:5280/api
ProxyPassReverse /api http://localhost:5280/api
AllowOverride none
Require all granted
Require all granted
AllowOverride none
''
];
};
};
}