nixos: services: matrix: add Facebook bridge
I probably won't actually use it, after test-driving it quickly. But now that the effort has been expanded, might as well keep it if only as a future reference.
This commit is contained in:
parent
7a85a44407
commit
30348a1e19
2 changed files with 147 additions and 0 deletions
143
modules/nixos/services/matrix/bridges.nix
Normal file
143
modules/nixos/services/matrix/bridges.nix
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
# Matrix bridges for some services I use
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.my.services.matrix.bridges;
|
||||||
|
synapseCfg = config.services.matrix-synapse;
|
||||||
|
|
||||||
|
domain = config.networking.domain;
|
||||||
|
serverName = synapseCfg.settings.server_name;
|
||||||
|
|
||||||
|
mkBridgeOption = n: lib.mkEnableOption "${n} bridge" // { default = cfg.enable; };
|
||||||
|
mkPortOption = n: default: lib.mkOption {
|
||||||
|
type = lib.types.port;
|
||||||
|
inherit default;
|
||||||
|
example = 8080;
|
||||||
|
description = "${n} bridge port";
|
||||||
|
};
|
||||||
|
mkEnvironmentFileOption = n: lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "/run/secret/matrix/${lib.toLower n}-bridge-secrets.env";
|
||||||
|
description = ''
|
||||||
|
Path to a file which should contain the secret values for ${n} bridge.
|
||||||
|
|
||||||
|
Using through the following format:
|
||||||
|
|
||||||
|
```
|
||||||
|
MATRIX_APPSERVICE_AS_TOKEN=<the_as_value>
|
||||||
|
MATRIX_APPSERVICE_HS_TOKEN=<the_hs_value>
|
||||||
|
```
|
||||||
|
|
||||||
|
Each bridge should use a different set of secrets, as they each register
|
||||||
|
their own independent double-puppetting appservice.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.services.matrix.bridges = with lib; {
|
||||||
|
enable = mkEnableOption "bridges configuration";
|
||||||
|
|
||||||
|
admin = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "ambroisie";
|
||||||
|
example = "admin";
|
||||||
|
description = "Local username for the admin";
|
||||||
|
};
|
||||||
|
|
||||||
|
facebook = {
|
||||||
|
enable = mkBridgeOption "Facebook";
|
||||||
|
|
||||||
|
port = mkPortOption "Facebook" 29321;
|
||||||
|
|
||||||
|
environmentFile = mkEnvironmentFileOption "Facebook";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkMerge [
|
||||||
|
(lib.mkIf cfg.facebook.enable {
|
||||||
|
services.mautrix-meta.instances.facebook = {
|
||||||
|
enable = true;
|
||||||
|
# Automatically register the bridge with synapse
|
||||||
|
registerToSynapse = true;
|
||||||
|
|
||||||
|
# Provide `AS_TOKEN`, `HS_TOKEN`
|
||||||
|
inherit (cfg.facebook) environmentFile;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
homeserver = {
|
||||||
|
domain = serverName;
|
||||||
|
address = "http://localhost:${toString config.my.services.matrix.port}";
|
||||||
|
};
|
||||||
|
|
||||||
|
appservice = {
|
||||||
|
hostname = "localhost";
|
||||||
|
inherit (cfg.facebook) port;
|
||||||
|
address = "http://localhost:${toString cfg.facebook.port}";
|
||||||
|
public_address = "https://facebook-bridge.${domain}";
|
||||||
|
|
||||||
|
as_token = "$MATRIX_APPSERVICE_AS_TOKEN";
|
||||||
|
hs_token = "$MATRIX_APPSERVICE_HS_TOKEN";
|
||||||
|
|
||||||
|
bot = {
|
||||||
|
username = "fbbot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
backfill = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bridge = {
|
||||||
|
delivery_receipts = true;
|
||||||
|
permissions = {
|
||||||
|
"*" = "relay";
|
||||||
|
${serverName} = "user";
|
||||||
|
"@${cfg.admin}:${serverName}" = "admin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
uri = "postgres:///mautrix-meta-facebook?host=/var/run/postgresql/";
|
||||||
|
};
|
||||||
|
|
||||||
|
double_puppet = {
|
||||||
|
secrets = {
|
||||||
|
${serverName} = "as_token:$MATRIX_APPSERVICE_AS_TOKEN";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
|
# Don't be picky on Facebook/Messenger
|
||||||
|
allow_messenger_com_on_fb = true;
|
||||||
|
displayname_template = ''{{or .DisplayName .Username "Unknown user"}} (FB)'';
|
||||||
|
};
|
||||||
|
|
||||||
|
provisioning = {
|
||||||
|
shared_secret = "disable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
ensureDatabases = [ "mautrix-meta-facebook" ];
|
||||||
|
ensureUsers = [{
|
||||||
|
name = "mautrix-meta-facebook";
|
||||||
|
ensureDBOwnership = true;
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.mautrix-meta-facebook = {
|
||||||
|
wants = [ "postgres.service" ];
|
||||||
|
after = [ "postgres.service" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
my.services.nginx.virtualHosts = {
|
||||||
|
# Proxy to the bridge
|
||||||
|
"facebook-bridge" = {
|
||||||
|
inherit (cfg.facebook) port;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -30,6 +30,10 @@ let
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [
|
||||||
|
./bridges.nix
|
||||||
|
];
|
||||||
|
|
||||||
options.my.services.matrix = with lib; {
|
options.my.services.matrix = with lib; {
|
||||||
enable = mkEnableOption "Matrix Synapse";
|
enable = mkEnableOption "Matrix Synapse";
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue