nixos-config/machines/fuuko/services/matrix/mautrix-whatsapp.nix

102 lines
3.1 KiB
Nix

# somewhat adapted from https://github.com/NixOS/nixpkgs/pull/59211
{ config, lib, pkgs, ... }:
let
nixpkgsMa27 = import
(pkgs.fetchFromGitHub {
owner = "Ma27";
repo = "nixpkgs";
rev = "5c7156faf1c766166d663a68e666678992ca2b2a";
sha256 = "0jj9slwrpzxm88cqz7qy2v92828wsiqhrr32alix5mq7xhfyblg0";
})
{ inherit (pkgs) system; };
synapseCfg = config.services.matrix-synapse;
in
let
config = rec {
homeserver = {
address = synapseCfg.public_baseurl;
domain = synapseCfg.server_name;
};
appservice = rec {
hostname = "127.0.0.1";
port = 29318;
address = "http://${hostname}:${toString port}";
provisioning.shared_secret = "disable";
database = {
type = "sqlite3";
uri = "/var/lib/mautrix-whatsapp/mautrix-whatsapp.db";
};
id = "whatsapp";
bot = {
username = "whatsappbot";
displayname = "WhatsApp bridge bot";
avatar = "mxc://maunium.net/NeXNQarUbrlYBiPCpprYsRqr";
};
};
whatsapp = {
browser_name = "mx-wa";
os_name = "Mautrix-WhatsApp bridge";
};
bridge = {
chat_list_wait = 30;
command_prefix = "!wa";
connection_retry_delay = -1;
connection_timeout = 20;
delivery_receipts = true;
displayname_template = "{{if .Name}}{{.Name}}{{else if .Notify}}{{.Notify}}{{else}}{{.Jid}}{{end}} (WA)";
fetch_message_on_timeout = true;
initial_chat_sync_count = 10;
initial_history_fill_count = 20;
invite_own_puppet_for_backfilling = true;
login_qr_regen_count = 2;
max_connection_attempts = 12;
portal_sync_wait = 600;
private_chat_portal_meta = true;
recovery_chat_sync_count = -1;
recovery_history_backfill = true;
relaybot.enabled = false;
report_connection_retry = true;
sync_max_chat_age = 259200;
sync_with_custom_puppets = true;
username_template = "whatsapp_{{.}}";
call_notices = {
start = true;
end = true;
};
permissions = {
# Only one user since using the name from the address book does not
# work with multiple users
"@simon:${homeserver.domain}" = 100;
};
};
logging.print_level = "info";
};
generatedConfig = pkgs.runCommandNoCC "mautrix-whatsapp-config"
{
buildInputs = with pkgs; [ mautrix-whatsapp ];
}
''
mkdir $out
cat ${pkgs.writeText "mautrix-whatsapp.yaml" (lib.generators.toYAML { } config)} > $out/config.yaml
mautrix-whatsapp -c $out/config.yaml -g -r $out/registration.yaml
'';
in
{
systemd.services.mautrix-whatsapp = {
description = "Mautrix-WhatsApp Service - A WhatsApp bridge for Matrix";
after = [ "network.target" "matrix-synapse.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
DynamicUser = true;
StateDirectory = "mautrix-whatsapp";
ExecStart = "${nixpkgsMa27.mautrix-whatsapp}/bin/mautrix-whatsapp -c ${generatedConfig}/config.yaml";
Restart = "on-failure";
};
};
services.matrix-synapse.app_service_config_files = lib.singleton "${generatedConfig}/registration.yaml";
}