parent
d252f6438e
commit
b8448def21
@ -0,0 +1,70 @@ |
||||
{ 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. |
||||
''; |
||||
}; |
||||
}; |
||||
} |
@ -0,0 +1,70 @@ |
||||
{ 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 ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue