!vxTmkuJzhGPsMdkAOc:transformierende-gesellschaft.org

NixOS Matrix Subsystem

160 Members
Coordination and discussion about the matrix subsystem in NixOS - https://wiki.nixos.org/wiki/Matrix81 Servers

Load older messages


SenderMessageTime
6 Jan 2022
@piegames:matrix.orgpiegames joined the room.12:19:28
@piegames:matrix.orgpiegamesI'm about to write an announcement for the newly added Heisenbridge and Conduit modules fro TWIM. Do you think I could link this room in the post?12:21:36
@philipp:xndr.dephilippFor it. Discoverability of resources is still a problem in the nix ecosystem, so any bit helps.12:56:43
@piegames:matrix.orgpiegames

Nixos deployment

I don't think we've previously had any Nix/NixOS/nixpkgs related entries in TWIM, so I'll start ^^

We now have a module for Heisenbridge and Conduit, which makes it super easy to deploy any of those services: My configuration for Heisenbridge is 21 lines long, and Conduit is only 11 lines. You can browse the available configuration options online: services.matrix-conduit, services.heisenbridge (note that some of them are freeform and simply forward to the upstream configuration).

For support, join our Matrix space at #nix:nixos.org and the Matrix-Nix channel: #matrix-nix:transformierende-gesellschaft.org

13:36:21
@piegames:matrix.orgpiegamesFeedback?13:36:23
@piegames:matrix.orgpiegames *

Nixos deployment

I don't think we've previously had any Nix/NixOS/nixpkgs related entries in TWIM, so I'll start ^^

We now have a module for Heisenbridge and Conduit, which makes it super easy to deploy any of those services: My configuration for Heisenbridge is 21 lines long, and Conduit is only 11 lines. You can browse the available configuration options online: services.matrix-conduit, services.heisenbridge (note that some of them are freeform and simply forward to the upstream configuration).

For those that are not into NixOS, a module is the code that turns the declarative configuration files into your running system setup. As an example, if you enable services.heisenbridge the following things are done for you:

  • Create a new heisenbridge user and group for the service
  • Create and manage the registration file for the homeserver (i.e. automatically regenerate it after the configuration changed)
  • Create a systemd service that runs the heisenbridge command with the requested bridge configuration. The unit also sets a few systemd security hardening options.

For support, join our Matrix space at #nix:nixos.org and the Matrix-Nix channel: #matrix-nix:transformierende-gesellschaft.org

13:49:09
@janne.hess:helsinki-systems.deJanne Heß joined the room.14:01:33
@janne.hess:helsinki-systems.deJanne Heß
In reply to @piegames:matrix.org
Feedback?
I think you mentioned the wrong room. The space is #community:nixos.org iirc
14:03:32
@piegames:matrix.orgpiegames Oh, fair point. #nix:nixos.org is the general channel then? 14:09:05
@janne.hess:helsinki-systems.deJanne HeßYup14:09:46
@janne.hess:helsinki-systems.deJanne Heß Also I'd go for We now have a module for Heisenbridge and ConduitThe newly released [NixOS](https://nixos.org) 21.11 has extended Matrix support to also include Conduit and Heisenbridge packages and modules (Synapse and Element have already been supported for some time now). (maybe?) 14:12:24
@janne.hess:helsinki-systems.deJanne Heß * Also I'd go for We now have a module for Heisenbridge and ConduitThe newly released [NixOS](https://nixos.org) 21.11 has extended Matrix support to also include Conduit and Heisenbridge packages and modules (Synapse and Element have already been supported for some time). (maybe?) 14:12:36
@janne.hess:helsinki-systems.deJanne Heß * Also I'd go for We now have a module for Heisenbridge and ConduitThe newly released [NixOS](https://nixos.org) 21.11 has extended Matrix support to also include Conduit and Heisenbridge packages and modules (Synapse and Element have already been supported in previous releases). (maybe?) 14:12:44
@janne.hess:helsinki-systems.deJanne Heß * Also I'd go for We now have a module for Heisenbridge and ConduitThe newly released [NixOS](https://nixos.org) 21.11 has extended Matrix support to also include [Conduit](https://blah) and [Heisenbridge](https://blah) packages and modules (Synapse and Element have already been supported in previous releases). (maybe?) 14:13:37
@janne.hess:helsinki-systems.deJanne Heß * Also I'd go for We now have a module for Heisenbridge and ConduitThe latest release 21.11 of the [NixOS](https://nixos.org) distribution has extended Matrix support to also include [Conduit](https://blah) and [Heisenbridge](https://blah) packages and modules (Synapse and Element have already been supported in previous releases). (maybe?) 14:14:51
@piegames:matrix.orgpiegames Janne Heß: the modules are on unstable only 14:23:41
@janne.hess:helsinki-systems.deJanne Heß
In reply to @piegames:matrix.org
Janne Heß: the modules are on unstable only
oops
14:29:32
@hexa:lossy.networkhexawe can always backport them14:35:57
@hexa:lossy.networkhexathey likely won't cause regressions14:36:04
@piegames:matrix.orgpiegamesI wouldn't do that for Heisenbridge until the remaining small issues are resolved, so it certainly won't be ready for TWIM tomorrow.15:44:04
@piegames:matrix.orgpiegames * I wouldn't do that for Heisenbridge until the remaining small issues are resolved, so it certainly won't be ready for TWIM tomorrow. The Conduit module has a "part 2" WIP as well15:44:28
@piegames:matrix.orgpiegames
In reply to @janne.hess:helsinki-systems.de
Also I'd go for We now have a module for Heisenbridge and ConduitThe latest release 21.11 of the [NixOS](https://nixos.org) distribution has extended Matrix support to also include [Conduit](https://blah) and [Heisenbridge](https://blah) packages and modules (Synapse and Element have already been supported in previous releases). (maybe?)

Nixos deployment

I don't think we've previously had any Nix/NixOS/nixpkgs related entries in TWIM, so I'll start ^^

The current unstable channel has extended its Matrix ecosystem support to also include Heisenbridge and Conduit packages and modules. This makes it super easy to deploy any of those services: For example, my configuration for Heisenbridge is 21 lines long, and Conduit is only 11 lines. You can browse the available configuration options online: services.matrix-conduit, services.heisenbridge (note that some of them are freeform and simply forward to the upstream configuration).

For those that are not into NixOS, a module is the code that turns the declarative configuration files into your running system setup. As an example, if you enable services.heisenbridge the following things are done for you:

  • Create a new heisenbridge user and group for the service
  • Create and manage the registration file for the homeserver (i.e. automatically regenerate it after the configuration changed)
  • Create a systemd service that runs the heisenbridge command with the requested bridge configuration. The unit also sets a few systemd security hardening options.

For support, join our Matrix space at #community:nixos.org and its Matrix-Nix channel: #matrix-nix:transformierende-gesellschaft.org

15:51:43
@miloignis:synapse.room409.xyzmiloignis joined the room.21:17:33
7 Jan 2022
@mg:linuxistsuper.ems.hostmg joined the room.23:16:02
8 Jan 2022
@clamydo:matrix.orgclamydo joined the room.06:46:53
@piegames:matrix.orgpiegames Janne Heß: May you please post your Heisenbridge module? Maybe there's more than the hardening options that we can upstream 23:41:50
9 Jan 2022
@janne.hess:helsinki-systems.deJanne HeßRedacted or Malformed Event14:27:49
@janne.hess:helsinki-systems.deJanne HeßRedacted or Malformed Event14:28:49
@janne.hess:helsinki-systems.deJanne Heß
{ pkgs, lib, ... }: let 
  config = {
    id = "heisenbridge";
    url = "http://127.0.0.1:9898";
    as_token = "$APPSERVICE_TOKEN";
    hs_token = "$HOMESERVER_TOKEN";
    rate_limited = false;
    sender_localpart = "heisenbridge";
    namespaces = {
      users = [{ regex = "@heisenbridge_.*"; exclusive = true; }];
      aliases = [ ];
      rooms = [ ];
    };
  };
  configFile = pkgs.writeText "heisenbridge.yml" (lib.generators.toYAML {} config);
  package = pkgs.heisenbridge.overrideAttrs (oA: let
    version = "1.8.2";
  in {
    name = "${oA.pname}-${version}";

    src = pkgs.fetchFromGitHub {
      owner = "hifi";
      repo = oA.pname;
      rev = "v${version}";
      sha256 = "173prcd56rwlxjxlw67arnm12k1l317xi5s6m7jhmp8zbbrj5vwr";
    };

    patches = [];
  });
in {
  systemd.services.heisenbridge = {
    description = "Heisenbridge Matrix IRC bridge";
    before = [ "matrix-synapse.service" ];
    wantedBy = [ "multi-user.target" ];
    stopIfChanged = false;

    preStart = ''
      umask 027
      ${pkgs.envsubst}/bin/envsubst -i ${configFile} -o /run/heisenbridge/appservice.yml
      chgrp matrix-synapse /run/heisenbridge/appservice.yml
    '';

    sandbox = 2;
    serviceConfig = {
      Restart = "always";
      EnvironmentFile = "/run/secrets/heisenbridge/env";
      ExecStart = "${package}/bin/heisenbridge --config /run/heisenbridge/appservice.yml --identd http://localhost:8080";

      RuntimeDirectory = "heisenbridge";
      RuntimeDirectoryMode = "0755";

      User = "heisenbridge";
      Group = "heisenbridge";

      PrivateNetwork = false;
      SystemCallFilter = "@system-service";
      # needed for ident
      AmbientCapabilities = [ "CAP_CHOWN" "CAP_NET_BIND_SERVICE" ];
      PrivateUsers = false;
    };
    apparmor = {
      enable = true;
      extraConfig = ''
        @{PROC}@{pid}/fd/ r,

        network udp,
        network tcp,
        network netlink raw,

        capability chown,
        capability net_bind_service,
      '';
    };
  };

  users.users.heisenbridge = {
    description = "Heisenbridge service user";
    isSystemUser = true;
    group = "heisenbridge";
  };
  users.groups.heisenbridge = {};

  # identd
  helsinki.firewall.ports.tcp = [ 113 ];

  helsinki.helsinkey.private."heisenbridge/env" = {
    services = [ "heisenbridge" ];
  };
}
14:29:25
@janne.hess:helsinki-systems.deJanne HeßThat depends on our sandbox module though… 14:30:10

Show newer messages


Back to Room ListRoom Version: 4