introduce matterbridge and matrix-appservice-discord

This commit is contained in:
Mike Cugini 2021-11-14 17:23:34 -05:00
parent 983ec622b2
commit d7859498c2
4 changed files with 103 additions and 1 deletions

2
.gitignore vendored
View File

@ -3,5 +3,7 @@
matrix_reg_key matrix_reg_key
slack_client_secret slack_client_secret
slack-registration.yaml slack-registration.yaml
discord-registration.yaml
discord_envs
*_psql_password *_psql_password
secrets.json secrets.json

58
nixos_configs/bridge.nix Normal file
View File

@ -0,0 +1,58 @@
# adapted from https://nixos.org/manual/nixos/stable/index.html#module-services-matrix
{ modulesPath, config, lib, pkgs, ... }:
let
secrets = builtins.fromJSON (builtins.readFile ./secrets.json);
in {
imports = [
"${toString modulesPath}/virtualisation/digital-ocean-image.nix"
];
environment.systemPackages = [ pkgs.jq ];
services.openssh.enable = true;
networking.firewall.allowedTCPPorts = [ 22 80 443 ];
users.users.root.openssh.authorizedKeys.keys = [
(builtins.readFile "/home/mike/.ssh/id_mops.pub")
];
### app specific config
users.users.matterbridge = {
createHome = true;
isNormalUser = false;
isSystemUser = true;
};
services.matterbridge = let
config-file = pkgs.writeText "matterbridge.toml" ''
[discord.cryptic]
Token="${secrets.matterbridge.discord.token}"
Server="${secrets.matterbridge.discord.server}"
RemoteNickFormat="{NICK} [{PROTOCOL}]"
AutoWebhooks=true
[slack.cryptic]
Token="${secrets.matterbridge.slack.token}"
RemoteNickFormat="{NICK} [{PROTOCOL}]"
# [[gateway]]
# name="bot-test-gateway"
# enable=true
# [[gateway.inout]]
# account="discord.cryptic"
# channel="bot-test"
#
# [[gateway.inout]]
# account="slack.cryptic"
# channel="bot-test"
[[samechannelgateway]]
name="same-channel-gw"
enable = true
accounts = [ "slack.cryptic", "discord.cryptic" ]
channels = [ "bot-test", "generic-gaming", "to-the-moon-and-back" ]
'';
in {
enable = true;
configPath = "${config-file}";
};
}

View File

@ -10,6 +10,10 @@ let
secrets = builtins.fromJSON (builtins.readFile ./secrets.json); secrets = builtins.fromJSON (builtins.readFile ./secrets.json);
slack-reg-source-yaml = (builtins.readFile ./slack-registration.yaml); slack-reg-source-yaml = (builtins.readFile ./slack-registration.yaml);
slack-reg-dest-yaml = pkgs.writeText "slack-registration.yaml" "${slack-reg-source-yaml}"; slack-reg-dest-yaml = pkgs.writeText "slack-registration.yaml" "${slack-reg-source-yaml}";
discord-reg-source-yaml = (builtins.readFile ./discord-registration.yaml);
discord-reg-dest-yaml = pkgs.writeText "discord-registration.yaml" "${discord-reg-source-yaml}";
discord-envs-src = (builtins.readFile ./discord_envs);
discord-envs-dst = pkgs.writeText "discord_envs" "${discord-envs-src}";
fqdn = fqdn =
let let
join = hostName: domain: hostName + lib.optionalString (domain != null) ".${domain}"; join = hostName: domain: hostName + lib.optionalString (domain != null) ".${domain}";
@ -150,6 +154,7 @@ in {
- "#cryptic-chat:waffle.farm" - "#cryptic-chat:waffle.farm"
app_service_config_files: app_service_config_files:
- "${slack-reg-dest-yaml}" - "${slack-reg-dest-yaml}"
- "${discord-reg-dest-yaml}"
''; '';
listeners = [ listeners = [
@ -313,7 +318,7 @@ encryption:
pantalaimon_url: "http://localhost:8009" pantalaimon_url: "http://localhost:8009"
''; '';
in { in {
enable = true; enable = false;
description = "matrix-appservice-slack daemon"; description = "matrix-appservice-slack daemon";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
serviceConfig = { serviceConfig = {
@ -352,4 +357,18 @@ IgnoreVerification = True
}; };
}; };
services.matrix-appservice-discord = {
enable = true;
settings = {
bridge = {
domain = "waffle.farm";
homeserverUrl = "https://matrix.waffle.farm";
enableSelfServiceBridging = true;
disableJoinLeaveNotifications = true;
disableInviteNotifications = true;
};
};
url = "http://localhost:8008";
environmentFile = "${discord-envs-dst}";
};
} }

23
terraform/bridge.tf Normal file
View File

@ -0,0 +1,23 @@
resource "digitalocean_droplet" "bridge-0" {
name = "bridge-0"
image = data.digitalocean_image.nixos_base.id
region = "nyc3"
size = "s-1vcpu-1gb"
ssh_keys = [data.digitalocean_ssh_key.mops.id]
}
module "deploy_nixos_bridge" {
source = "github.com/tweag/terraform-nixos//deploy_nixos?ref=d055d2180da230e47ba9082fc53a8b7d1fadbc43"
nixos_config = "../nixos_configs/bridge.nix"
target_user = "root"
target_host = digitalocean_droplet.bridge-0.ipv4_address
triggers = {
// Also re-deploy whenever the VM is re-created
instance_id = digitalocean_droplet.bridge-0.id
}
}