114 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # TODO too lazy to figure out how the official module works so i use this one lol
 | |
| { config, lib, pkgs, ... }: with lib; let
 | |
|   cfg = config.services.sealight.heisenbridge;
 | |
| 
 | |
|   heisenbridgeAppserviceConfig = {
 | |
|     id = "heisenbridge";
 | |
|     url = "http://${cfg.listenAddress}:${toString cfg.listenPort}";
 | |
|     as_token = cfg.appServiceToken;
 | |
|     hs_token = cfg.homeserverToken;
 | |
|     rate_limited = false;
 | |
|     sender_localpart = cfg.senderLocalpart;
 | |
|     namespaces = {
 | |
|       users = [{ regex = "@irc_.*"; exclusive = true; }];
 | |
|       aliases = [ ];
 | |
|       rooms = [ ];
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   heisenbridgeConfigYaml = pkgs.writeText "heisenbridge.yaml" (
 | |
|     generators.toYAML { } heisenbridgeAppserviceConfig);
 | |
| in
 | |
| {
 | |
|   options = {
 | |
|     services.sealight.heisenbridge = {
 | |
|       enable = mkEnableOption "heisenbridge, a bouncer-style Matrix IRC bridge.";
 | |
|       identd.enable = mkEnableOption "identd for heisenbridge" // {
 | |
|         default = true;
 | |
|       };
 | |
|       homeserver = mkOption {
 | |
|         type = types.str;
 | |
|         default = "http://localhost:8008";
 | |
|         description = "The URL of the Matrix homeserver.";
 | |
|       };
 | |
|       listenAddress = mkOption {
 | |
|         type = types.str;
 | |
|         default = "127.0.0.1";
 | |
|         description = "The address for heisenbridge to listen on.";
 | |
|       };
 | |
|       listenPort = mkOption {
 | |
|         type = types.int;
 | |
|         default = 9898;
 | |
|         description = "The port for heisenbridge to listen on.";
 | |
|       };
 | |
|       senderLocalpart = mkOption {
 | |
|         type = types.str;
 | |
|         default = "heisenbridge";
 | |
|         description = "The localpart of the heisenbridge admin bot's username.";
 | |
|       };
 | |
|       ownerId = mkOption {
 | |
|         type = types.nullOr types.str;
 | |
|         default = null;
 | |
|         description = ''
 | |
|           The owner MXID (for example, @user:homeserver) of the bridge. If
 | |
|           unspecified, the first talking local user will claim the bridge.
 | |
|         '';
 | |
|       };
 | |
|       appServiceToken = mkOption {
 | |
|         type = types.str;
 | |
|         description = ''
 | |
|           This is the token that the app service should use as its access_token
 | |
|           when using the Client-Server API. This can be anything you want.
 | |
|         '';
 | |
|       };
 | |
|       homeserverToken = mkOption {
 | |
|         type = types.str;
 | |
|         description = ''
 | |
|           This is the token that the homeserver will use when sending requests
 | |
|           to the app service. This can be anything you want.
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     meta.maintainers = [ maintainers.sumnerevans ];
 | |
| 
 | |
|     services.matrix-synapse.settings.app_service_config_files = [
 | |
|       heisenbridgeConfigYaml
 | |
|     ];
 | |
| 
 | |
|     # Create a user for heisenbridge.
 | |
|     users.users.heisenbridge = {
 | |
|       group = "heisenbridge";
 | |
|       isSystemUser = true;
 | |
|     };
 | |
|     users.groups.heisenbridge = { };
 | |
| 
 | |
|     # Open ports for identd.
 | |
|     networking.firewall.allowedTCPPorts = mkIf cfg.identd.enable [ 113 ];
 | |
| 
 | |
|     systemd.services.heisenbridge-sealight = {
 | |
|       description = "Heisenbridge Matrix IRC bridge";
 | |
|       after = [ "matrix-synapse.service" ];
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       serviceConfig = {
 | |
|         ExecStart = ''
 | |
|           ${pkgs.heisenbridge}/bin/heisenbridge \
 | |
|             --config ${heisenbridgeConfigYaml} \
 | |
|             --verbose --verbose \
 | |
|             --listen-address ${cfg.listenAddress} \
 | |
|             --listen-port ${toString cfg.listenPort} \
 | |
|             --uid heisenbridge \
 | |
|             --gid heisenbridge \
 | |
|             ${optionalString cfg.identd.enable "--identd"} \
 | |
|             ${optionalString (cfg.ownerId != null) "--owner ${cfg.ownerId}"} \
 | |
|             ${cfg.homeserver}
 | |
|         '';
 | |
|         Restart = "on-failure";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 | |
| 
 |