0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-19 16:40:32 +03:00
nixpkgs/nixos/modules/services/matrix/pantalaimon.nix

75 lines
2.2 KiB
Nix
Raw Normal View History

{
config,
lib,
pkgs,
...
}:
2021-05-30 17:32:10 +02:00
let
cfg = config.services.pantalaimon-headless;
iniFmt = pkgs.formats.ini { };
mkConfigFile =
name: instanceConfig:
iniFmt.generate "pantalaimon.conf" {
Default = {
LogLevel = instanceConfig.logLevel;
Notifications = false;
};
2021-05-30 17:32:10 +02:00
${name} = (
lib.recursiveUpdate {
Homeserver = instanceConfig.homeserver;
ListenAddress = instanceConfig.listenAddress;
ListenPort = instanceConfig.listenPort;
SSL = instanceConfig.ssl;
2021-05-30 17:32:10 +02:00
# Set some settings to prevent user interaction for headless operation
IgnoreVerification = true;
UseKeyring = false;
} instanceConfig.extraSettings
);
};
2021-05-30 17:32:10 +02:00
mkPantalaimonService =
name: instanceConfig:
lib.nameValuePair "pantalaimon-${name}" {
2021-05-30 17:32:10 +02: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
{
options.services.pantalaimon-headless.instances = lib.mkOption {
2021-05-30 17:32:10 +02:00
default = { };
type = lib.types.attrsOf (lib.types.submodule (import ./pantalaimon-options.nix));
description = ''
2021-05-30 17:32:10 +02:00
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.
2021-05-30 17:32:10 +02:00
'';
};
config = lib.mkIf (config.services.pantalaimon-headless.instances != { }) {
systemd.services = lib.mapAttrs' mkPantalaimonService config.services.pantalaimon-headless.instances;
};
2021-05-30 17:32:10 +02:00
meta = {
maintainers = with lib.maintainers; [ jojosch ];
2021-05-30 17:32:10 +02:00
};
}