mirror of
https://github.com/matrix-construct/construct
synced 2024-08-14 21:54:40 +02:00
90 lines
2.6 KiB
Nix
90 lines
2.6 KiB
Nix
self: { config, pkgs, lib, ... }:
|
|
|
|
let
|
|
cfg = config.services.matrix-construct;
|
|
in {
|
|
options.services.matrix-construct = with lib; {
|
|
enable = mkEnableOption "the construct server";
|
|
|
|
useScreen = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
example = false;
|
|
description = ''
|
|
Run construct in screen for stdio access.
|
|
'';
|
|
};
|
|
|
|
setupUnbound = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
example = false;
|
|
description = ''
|
|
Setup default unbound forwardAddresses.
|
|
'';
|
|
};
|
|
|
|
extraArgs = mkOption {
|
|
type = with types; listOf str;
|
|
default = [];
|
|
example = [ "-6" "--debug" ];
|
|
description = ''
|
|
Extra flags to pass to construct.
|
|
'';
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = self.packages.${pkgs.system}.matrix-construct;
|
|
defaultText = "pkgs.matrix-construct";
|
|
description = ''
|
|
Guix package to use.
|
|
'';
|
|
};
|
|
|
|
server = mkOption {
|
|
type = types.str;
|
|
default = null;
|
|
example = "matrix.example.org";
|
|
description = ''
|
|
Server configuration to run construct with.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
environment.systemPackages = [ cfg.package ] ++ lib.optional cfg.useScreen pkgs.screen;
|
|
|
|
systemd.services.matrix-construct = {
|
|
description = "Matrix Construct";
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
## bin/construct host.tld [servername]
|
|
## Connect to screen
|
|
## Wait for init, then press ctrl-c
|
|
## Create listener with `net listen matrix * 8448 privkey.pem cert.pem chain.pem`
|
|
## ..I used /var/lib/acme/xa0.uk/key.pem /(...)/xa0.uk/fullchain.pem /(...)/xa0.uk/fullchain.pem`
|
|
## Route and test with https://matrix.org/federationtester/api/report?server_name=host.tld
|
|
## Restart, or reload with `mod reload web_root`
|
|
## Exit screen
|
|
script = '' cd $STATE_DIRECTORY && exec ''
|
|
+ (if cfg.useScreen then '' ${pkgs.screen}/bin/screen -D -m '' else "")
|
|
+ '' ${cfg.package}/bin/construct ${cfg.server} ${lib.concatStringsSep " " cfg.extraArgs} '';
|
|
|
|
serviceConfig = {
|
|
Restart = "on-failure";
|
|
ConfigurationDirectory = "construct";
|
|
RuntimeDirectory = "construct";
|
|
StateDirectory = "construct"; # Todo: bootstrap
|
|
LogsDirectory = "construct";
|
|
StandardOutput = "syslog";
|
|
StandardError = "syslog";
|
|
TimeoutStopSec = "120";
|
|
KillSignal = "SIGQUIT";
|
|
};
|
|
};
|
|
|
|
services.unbound.forwardAddresses = lib.mkIf cfg.setupUnbound [ "4.2.2.1" "4.2.2.2" "4.2.2.3" "4.2.2.4" "4.2.2.5" "4.2.2.6" ];
|
|
};
|
|
}
|