diff --git a/hosts/nachtigall/apps/matrix/irc.nix b/hosts/nachtigall/apps/matrix/irc.nix new file mode 100644 index 00000000..b00a5b02 --- /dev/null +++ b/hosts/nachtigall/apps/matrix/irc.nix @@ -0,0 +1,114 @@ +{lib, ...}: +{ + services.matrix-appservice-irc = { + enable = true; + localpart = "irc_bot"; + port = 8010; + registrationUrl = "http://localhost:8010"; + settings = { + homeserver = { + # TODO: Use the port from synapse config + domain = "test.pub.solar"; + url = "http://127.0.0.1:8008"; + media_url = "https://matrix.test.pub.solar"; + enablePresence = false; + }; + ircService = { + ident = { + address = "::"; + enabled = false; + port = 1113; + }; + logging = { + level = "debug"; + maxFiles = 5; + toCosole = true; + }; + matrixHandler = { + eventCacheSize = 4096; + }; + metrics = { + enabled = true; + remoteUserAgeBuckets = [ "1h" "1d" "1w" ]; + }; + provisioning = { + enabled = false; + requestTimeoutSeconds = 300; + }; + servers = + let + commonConfig = { + allowExpiredCerts = false; + botConfig = { + enabled = false; + joinChannelsIfNoUsers = false; + nick = "MatrixBot"; + }; + dynamicChannels = { + createAlias = true; + enabled = true; + federate = true; + joinRule = "public"; + published = true; + }; + ircClients = { + allowNickChanges = true; + concurrentReconnectLimit = 50; + idleTimeout = 10800; + lineLimit = 3; + maxClients = 30; + nickTemplate = "$DISPLAY[m]"; + reconnectIntervalMs = 5000; + }; + matrixClients = { + joinAttempts = -1; + }; + membershipLists = { + enabled = true; + floodDelayMs = 10000; + global = { + ircToMatrix = { + incremental = true; + initial = true; + }; + matrixToIrc = { + incremental = true; + initial = true; + }; + }; + }; + port = 6697; + privateMessages = { + enabled = true; + federate = true; + }; + sasl = false; + sendConnectionMessages = true; + ssl = true; + }; + in { + # TODO: Remove freenode if nobody uses it. + "irc.freenode.net" = lib.attrsets.recursiveUpdate commonConfig { + name = "freenode"; + dynamicChannels.groupId = "+freenode.net:localhost"; + # TODO: if someone uses freenode, we should specify freenode in the user display names insted of just "IRC"; + matrixClients.displayName = "$NICK (IRC)"; + dynamicChannels.aliasTemplate = "#irc_$CHANNEL"; + matrixClients.userTemplate = "@irc_$NICK"; + }; + "irc.libera.chat" = lib.attrsets.recursiveUpdate commonConfig { + name = "libera"; + dynamicChannels.groupId = "+libera.chat:localhost"; + matrixClients.displayName = "$NICK (LIBERA-IRC)"; + }; + "irc.scratch-network.net" = lib.attrsets.recursiveUpdate commonConfig { + name = "scratch"; + matrixClients.displayName = "$NICK (SCRATCH-IRC)"; + dynamicChannels.groupId = "+scratch-network.net:localhost"; + }; + }; + }; + }; + }; +} + diff --git a/hosts/nachtigall/apps/matrix/synapse.nix b/hosts/nachtigall/apps/matrix/synapse.nix index d0b2fe24..a44dec02 100644 --- a/hosts/nachtigall/apps/matrix/synapse.nix +++ b/hosts/nachtigall/apps/matrix/synapse.nix @@ -209,7 +209,7 @@ in { app_service_config_files = [ "/var/lib/matrix-synapse/telegram-registration.yaml" - # "/matrix-appservice-irc-registration.yaml" + "/var/lib/matrix-appservice-irc/registration.yml" # "/matrix-appservice-slack-registration.yaml" # "/hookshot-registration.yml" # "/matrix-mautrix-signal-registration.yaml" diff --git a/hosts/nachtigall/default.nix b/hosts/nachtigall/default.nix index 4fd0578d..1c7361fa 100644 --- a/hosts/nachtigall/default.nix +++ b/hosts/nachtigall/default.nix @@ -27,6 +27,7 @@ ./apps/matrix/mautrix-telegram.nix ./apps/matrix/synapse.nix + ./apps/matrix/irc.nix ./apps/nginx-matrix.nix # Override with module from nixos-unstable, needs to be added