depot/nixos/modules/services/matrix/maubot.md
Luke Granger-Brown 57725ef3ec Squashed 'third_party/nixpkgs/' content from commit 76612b17c0ce
git-subtree-dir: third_party/nixpkgs
git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
2024-11-10 23:59:47 +00:00

3.9 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).