dotfiles/modules/services/conduit.nix

131 lines
3.0 KiB
Nix

{ pkgs, config, options, lib, ... }:
with lib;
let
cfg = config.modules.services.matrix.conduit;
in {
options.modules.services.matrix.conduit = {
enable = mkOption {
type = types.bool;
default = false;
};
package = mkOption {
type = types.package;
default = pkgs._.matrix-conduit;
};
domain = mkOption {
type = types.str;
default = "localhost";
};
user = mkOption {
type = types.str;
default = "conduit";
description = "User account under which Conduit runs.";
};
dataDir = mkOption {
type = types.str;
default = "/var/lib/conduit";
};
httpAddress = mkOption {
type = types.str;
default = "127.0.0.1";
};
httpPort = mkOption {
type = types.port;
default = 6167;
};
disableRegistration = mkOption {
type = types.bool;
default = true;
};
disableFederation = mkOption {
type = types.bool;
default = false;
};
settings = mkOption {
type = types.submodule {
freeFormType = format.type;
options = {
server_name = mkOption {
type = types.str;
example = "matrix.aether.gay";
default = config.networking.hostName;
description = "The domain used to be used by the conduit instance for nginx.";
};
database_path = mkOption {
type = types.str;
default = "/var/lib/conduit";
};
database_backend = mkOption {
type = types.str;
default = "postgresql";
example = "rocksdb";
};
port = mkOption {
type = types.int;
default = 6167;
};
max_request_size = mkOption {
type = types.int;
default = 52428800; # 50MiB
};
allow_registration = mkOption {
type = types.bool;
default = false;
};
allow_federation = mkOption {
type = types.bool;
default = true;
};
max_concurrent_requests = mkOption {
type = types.int;
default = 64;
};
trusted_servers = mkOption {
type = types.listOf types.str;
default = [ "matrix.org" ];
};
address = mkOption {
type = types.str;
default = "127.0.0.1";
description = "The address used to access the Conduit instance. Setting this to 127.0.0.1 ensures that it is only possible to reach the server via nginx.";
};
};
};
default = {};
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
modules.services.matrix.conduit.settings = {
server_name = cfg.domain;
database_dir = cfg.dataDir;
port = cfg.httpPort;
enable_registration = !cfg.disableRegistration;
enable_federation = !cfg.disableFederation;
};
};
}