nixpkgs-suyu/nixos/modules/services/matrix/maubot.md
2023-11-28 20:35:55 +07:00

3.8 KiB

Maubot

Maubot is a plugin-based bot framework for Matrix.

Configuration

  1. Set to true. The service will use SQLite by default.

  2. If you want to use PostgreSQL instead of SQLite, do this:

    services.maubot.settings.database = "postgresql://maubot@localhost/maubot";
    

    If the PostgreSQL connection requires a password, you will have to add it later on step 8.

  3. If you plan to expose your Maubot interface to the web, do something like this:

    services.nginx.virtualHosts."matrix.example.org".locations = {
      "/_matrix/maubot/" = {
        proxyPass = "http://127.0.0.1:${toString config.services.maubot.settings.server.port}";
        proxyWebsockets = true;
      };
    };
    services.maubot.settings.server.public_url = "matrix.example.org";
    # do the following only if you want to use something other than /_matrix/maubot...
    services.maubot.settings.server.ui_base_path = "/another/base/path";
    
  4. Optionally, set services.maubot.pythonPackages to a list of python3 packages to make available for Maubot plugins.

  5. Optionally, set services.maubot.plugins to a list of Maubot plugins (full list available at https://plugins.maubot.xyz/):

    services.maubot.plugins = with config.services.maubot.package.plugins; [
      reactbot
      # This will only change the default config! After you create a
      # plugin instance, the default config will be copied into that
      # instance's config in Maubot's database, and further base config
      # changes won't affect the running plugin.
      (rss.override {
        base_config = {
          update_interval = 60;
          max_backoff = 7200;
          spam_sleep = 2;
          command_prefix = "rss";
          admins = [ "@chayleaf:pavluk.org" ];
        };
      })
    ];
    # ...or...
    services.maubot.plugins = config.services.maubot.package.plugins.allOfficialPlugins;
    # ...or...
    services.maubot.plugins = config.services.maubot.package.plugins.allPlugins;
    # ...or...
    services.maubot.plugins = with config.services.maubot.package.plugins; [
      (weather.override {
        # you can pass base_config as a string
        base_config = ''
          default_location: New York
          default_units: M
          default_language:
          show_link: true
          show_image: false
        '';
      })
    ];
    
  6. Start Maubot at least once before doing the following steps (it's necessary to generate the initial config).

  7. If your PostgreSQL connection requires a password, add database: postgresql://user:password@localhost/maubot to /var/lib/maubot/config.yaml. This overrides the Nix-provided config. Even then, don't remove the database line from Nix config so the module knows you use PostgreSQL!

  8. To create a user account for logging into Maubot web UI and configuring it, generate a password using the shell command mkpasswd -R 12 -m bcrypt, and edit /var/lib/maubot/config.yaml with the following:

    admins:
        admin_username: $2b$12$g.oIStUeUCvI58ebYoVMtO/vb9QZJo81PsmVOomHiNCFbh0dJpZVa
    

    Where admin_username is your username, and $2b... is the bcrypted password.

  9. Optional: if you want to be able to register new users with the Maubot CLI (mbc), and your homeserver is private, add your homeserver's registration key to /var/lib/maubot/config.yaml:

    homeservers:
        matrix.example.org:
            url: https://matrix.example.org
            secret: your-very-secret-key
    
  10. Restart Maubot after editing /var/lib/maubot/config.yaml,and Maubot will be available at https://matrix.example.org/_matrix/maubot. If you want to use the mbc CLI, it's available using the maubot package (nix-shell -p maubot).