2021-05-30 15:32:10 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.services.pantalaimon-headless;
|
|
|
|
|
|
|
|
iniFmt = pkgs.formats.ini { };
|
|
|
|
|
|
|
|
mkConfigFile = name: instanceConfig: iniFmt.generate "pantalaimon.conf" {
|
|
|
|
Default = {
|
|
|
|
LogLevel = instanceConfig.logLevel;
|
|
|
|
Notifications = false;
|
|
|
|
};
|
|
|
|
|
2024-08-24 20:05:37 +00:00
|
|
|
${name} = (lib.recursiveUpdate
|
2021-05-30 15:32:10 +00:00
|
|
|
{
|
|
|
|
Homeserver = instanceConfig.homeserver;
|
|
|
|
ListenAddress = instanceConfig.listenAddress;
|
|
|
|
ListenPort = instanceConfig.listenPort;
|
|
|
|
SSL = instanceConfig.ssl;
|
|
|
|
|
|
|
|
# Set some settings to prevent user interaction for headless operation
|
|
|
|
IgnoreVerification = true;
|
|
|
|
UseKeyring = false;
|
|
|
|
}
|
|
|
|
instanceConfig.extraSettings
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
mkPantalaimonService = name: instanceConfig:
|
2024-08-24 20:05:37 +00:00
|
|
|
lib.nameValuePair "pantalaimon-${name}" {
|
2021-05-30 15:32:10 +00:00
|
|
|
description = "pantalaimon instance ${name} - E2EE aware proxy daemon for matrix clients";
|
|
|
|
wants = [ "network-online.target" ];
|
|
|
|
after = [ "network-online.target" ];
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
|
|
|
|
serviceConfig = {
|
|
|
|
ExecStart = ''${pkgs.pantalaimon-headless}/bin/pantalaimon --config ${mkConfigFile name instanceConfig} --data-path ${instanceConfig.dataPath}'';
|
|
|
|
Restart = "on-failure";
|
|
|
|
DynamicUser = true;
|
|
|
|
NoNewPrivileges = true;
|
|
|
|
PrivateDevices = true;
|
|
|
|
PrivateTmp = true;
|
|
|
|
ProtectHome = true;
|
|
|
|
ProtectSystem = "strict";
|
|
|
|
StateDirectory = "pantalaimon-${name}";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
in
|
|
|
|
{
|
2024-08-24 20:05:37 +00:00
|
|
|
options.services.pantalaimon-headless.instances = lib.mkOption {
|
2021-05-30 15:32:10 +00:00
|
|
|
default = { };
|
2024-08-24 20:05:37 +00:00
|
|
|
type = lib.types.attrsOf (lib.types.submodule (import ./pantalaimon-options.nix));
|
2021-05-30 15:32:10 +00:00
|
|
|
description = ''
|
|
|
|
Declarative instance config.
|
|
|
|
|
|
|
|
Note: to use pantalaimon interactively, e.g. for a Matrix client which does not
|
|
|
|
support End-to-end encryption (like `fractal`), refer to the home-manager module.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2024-08-24 20:05:37 +00:00
|
|
|
config = lib.mkIf (config.services.pantalaimon-headless.instances != { })
|
2021-05-30 15:32:10 +00:00
|
|
|
{
|
2024-08-24 20:05:37 +00:00
|
|
|
systemd.services = lib.mapAttrs' mkPantalaimonService config.services.pantalaimon-headless.instances;
|
2021-05-30 15:32:10 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
meta = {
|
2024-08-24 20:05:37 +00:00
|
|
|
maintainers = with lib.maintainers; [ jojosch ];
|
2021-05-30 15:32:10 +00:00
|
|
|
};
|
|
|
|
}
|