nixos/pantalaimon: init

Changed files
+145
nixos
pkgs
top-level
+1
nixos/modules/module-list.nix
···
./services/mail/roundcube.nix
./services/mail/sympa.nix
./services/mail/nullmailer.nix
+
./services/matrix/pantalaimon.nix
./services/misc/airsonic.nix
./services/misc/ankisyncd.nix
./services/misc/apache-kafka.nix
+70
nixos/modules/services/matrix/pantalaimon-options.nix
···
+
{ config, lib, name, ... }:
+
+
with lib;
+
{
+
options = {
+
dataPath = mkOption {
+
type = types.path;
+
default = "/var/lib/pantalaimon-${name}";
+
description = ''
+
The directory where <literal>pantalaimon</literal> should store its state such as the database file.
+
'';
+
};
+
+
logLevel = mkOption {
+
type = types.enum [ "info" "warning" "error" "debug" ];
+
default = "warning";
+
description = ''
+
Set the log level of the daemon.
+
'';
+
};
+
+
homeserver = mkOption {
+
type = types.str;
+
example = "https://matrix.org";
+
description = ''
+
The URI of the homeserver that the <literal>pantalaimon</literal> proxy should
+
forward requests to, without the matrix API path but including
+
the http(s) schema.
+
'';
+
};
+
+
ssl = mkOption {
+
type = types.bool;
+
default = true;
+
description = ''
+
Whether or not SSL verification should be enabled for outgoing
+
connections to the homeserver.
+
'';
+
};
+
+
listenAddress = mkOption {
+
type = types.str;
+
default = "localhost";
+
description = ''
+
The address where the daemon will listen to client connections
+
for this homeserver.
+
'';
+
};
+
+
listenPort = mkOption {
+
type = types.port;
+
default = 8009;
+
description = ''
+
The port where the daemon will listen to client connections for
+
this homeserver. Note that the listen address/port combination
+
needs to be unique between different homeservers.
+
'';
+
};
+
+
extraSettings = mkOption {
+
type = types.attrs;
+
default = { };
+
description = ''
+
Extra configuration options. See
+
<link xlink:href="https://github.com/matrix-org/pantalaimon/blob/master/docs/man/pantalaimon.5.md">pantalaimon(5)</link>
+
for available options.
+
'';
+
};
+
};
+
}
+70
nixos/modules/services/matrix/pantalaimon.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
let
+
cfg = config.services.pantalaimon-headless;
+
+
iniFmt = pkgs.formats.ini { };
+
+
mkConfigFile = name: instanceConfig: iniFmt.generate "pantalaimon.conf" {
+
Default = {
+
LogLevel = instanceConfig.logLevel;
+
Notifications = false;
+
};
+
+
${name} = (recursiveUpdate
+
{
+
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:
+
nameValuePair "pantalaimon-${name}" {
+
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 = mkOption {
+
default = { };
+
type = types.attrsOf (types.submodule (import ./pantalaimon-options.nix));
+
description = ''
+
Declarative instance config.
+
+
Note: to use pantalaimon interactively, e.g. for a Matrix client which does not
+
support End-to-end encryption (like <literal>fractal</literal>), refer to the home-manager module.
+
'';
+
};
+
+
config = mkIf (config.services.pantalaimon-headless.instances != { })
+
{
+
systemd.services = mapAttrs' mkPantalaimonService config.services.pantalaimon-headless.instances;
+
};
+
+
meta = {
+
maintainers = with maintainers; [ jojosch ];
+
};
+
}
+4
pkgs/top-level/all-packages.nix
···
pantalaimon = python3Packages.callPackage ../applications/networking/instant-messengers/pantalaimon { };
+
pantalaimon-headless = python3Packages.callPackage ../applications/networking/instant-messengers/pantalaimon {
+
enableDbusUi = false;
+
};
+
pavucontrol = callPackage ../applications/audio/pavucontrol { };
paraview = libsForQt5.callPackage ../applications/graphics/paraview { };