# SPDX-FileCopyrightText: 2026 Slavi Pantaleev # # SPDX-License-Identifier: AGPL-3.0-or-later --- # An opinionated Matrix moderation bot # Project source code URL: https://github.com/maunium/meowlnir matrix_bot_meowlnir_enabled: true # renovate: datasource=docker depName=dock.mau.dev/maunium/meowlnir matrix_bot_meowlnir_version: v0.2606.0 matrix_bot_meowlnir_container_image_self_build: false matrix_bot_meowlnir_container_image_self_build_repo: "https://github.com/maunium/meowlnir.git" matrix_bot_meowlnir_container_image: "{{ matrix_bot_meowlnir_container_image_registry_prefix }}{{ matrix_bot_meowlnir_container_image_registry_namespace_identifier }}:{{ matrix_bot_meowlnir_version }}" matrix_bot_meowlnir_container_image_registry_namespace_identifier: "maunium/meowlnir" matrix_bot_meowlnir_container_image_registry_prefix: "{{ 'localhost/' if matrix_bot_meowlnir_container_image_self_build else matrix_bot_meowlnir_container_image_registry_prefix_upstream }}" matrix_bot_meowlnir_container_image_registry_prefix_upstream: "{{ matrix_bot_meowlnir_container_image_registry_prefix_upstream_default }}" matrix_bot_meowlnir_container_image_registry_prefix_upstream_default: "dock.mau.dev/" matrix_bot_meowlnir_base_path: "{{ matrix_base_data_path }}/meowlnir" matrix_bot_meowlnir_config_path: "{{ matrix_bot_meowlnir_base_path }}/config" matrix_bot_meowlnir_data_path: "{{ matrix_bot_meowlnir_base_path }}/data" matrix_bot_meowlnir_bin_path: "{{ matrix_bot_meowlnir_base_path }}/bin" matrix_bot_meowlnir_container_src_files_path: "{{ matrix_bot_meowlnir_base_path }}/docker-src" matrix_bot_meowlnir_container_network: "" matrix_bot_meowlnir_container_additional_networks: "{{ matrix_bot_meowlnir_container_additional_networks_auto + matrix_bot_meowlnir_container_additional_networks_custom }}" matrix_bot_meowlnir_container_additional_networks_auto: [] matrix_bot_meowlnir_container_additional_networks_custom: [] # Controls whether the matrix-bot-meowlnir container exposes its HTTP port. # # Takes an ":" or "" value (e.g. # "127.0.0.1:29339"), or empty string to not expose. matrix_bot_meowlnir_container_http_host_bind_port: '' # A list of extra arguments to pass to the container matrix_bot_meowlnir_container_extra_arguments: [] # List of systemd services that matrix-bot-meowlnir.service depends on matrix_bot_meowlnir_systemd_required_services_list: "{{ matrix_bot_meowlnir_systemd_required_services_list_default + matrix_bot_meowlnir_systemd_required_services_list_auto + matrix_bot_meowlnir_systemd_required_services_list_custom }}" matrix_bot_meowlnir_systemd_required_services_list_default: "{{ [devture_systemd_docker_base_docker_service_name] if devture_systemd_docker_base_docker_service_name else [] }}" matrix_bot_meowlnir_systemd_required_services_list_auto: [] matrix_bot_meowlnir_systemd_required_services_list_custom: [] # List of systemd services that matrix-bot-meowlnir.service wants matrix_bot_meowlnir_systemd_wanted_services_list: [] ######################################################################## # # # Appservice registration # # # ######################################################################## # Meowlnir runs as an appservice. # Unlike Draupnir in bot mode, it does not log in with an access token — the homeserver is told about it via a registration file. # # Bots themselves are created at runtime through Meowlnir's management API, within the user namespace declared below. # See the role's documentation page for details. matrix_bot_meowlnir_appservice_id: meowlnir # The localpart of the appservice's own user. # This user does not act as a moderation bot; it is the appservice's sender. # Individual bots get their own users. matrix_bot_meowlnir_appservice_sender_localpart: meowlnir # The prefix for bot users created via the management API. # Must line up with `matrix_bot_meowlnir_config_meowlnir4all_localpart_template`. matrix_bot_meowlnir_user_prefix: "meowlnir_" ######################################################################## # # # Managed bots # # # ######################################################################## # Meowlnir hosts multiple bots, each with one or more management rooms, and creates them at runtime through its management API, not from its configuration file. # # The bots listed here are created (and kept up to date) by the playbook when running with the `ensure-matrix-users-created` tag, so that you do not need to call that API yourself. # # The fields below are required on every entry, so that each bot's setup can be understood without having to know what the playbook defaults to. # # - `username`: the localpart of the bot user. Must begin with `matrix_bot_meowlnir_user_prefix`, or the homeserver will not let Meowlnir operate it. Pick it carefully — it becomes the bot's Matrix user ID and is awkward to change later. # - `displayname`: the name shown in rooms. Safe to change at any time. # - `avatar_url`: an `mxc://` URI, or an empty string for no avatar. # - `management_room_auto_create`: whether the playbook creates a management room for this bot. Mutually exclusive with `management_rooms` — see below. # - `management_rooms`: the rooms you send commands to. A list, because Meowlnir supports several per bot. Each entry needs an `id` (a room ID, not an alias) and an `encrypted` flag saying whether that room is encrypted. # # `management_room_auto_create` and `management_rooms` are mutually exclusive: # # - `management_room_auto_create: false` requires at least one entry in `management_rooms`. You create the room yourself, and invite the bot after the first run. # - `management_room_auto_create: true` requires `management_rooms` to be empty. The playbook creates the room, invites the bot's initial managers and gives them the power level needed to command the bot. The room's encryption follows `matrix_bot_meowlnir_config_encryption_enable`. # # One optional field is also recognized: # # - `initial_managers`: the users invited to a management room the playbook creates for this bot. Omit it to use `matrix_bot_meowlnir_initial_managers`. An explicitly empty list means nobody, which is an error for a bot relying on `management_room_auto_create`. # # Example: # matrix_bot_meowlnir_bots_custom: # - username: meowlnir_bot # displayname: Meowlnir # avatar_url: "" # management_room_auto_create: false # management_rooms: # - id: "!qporfwt:example.com" # encrypted: false matrix_bot_meowlnir_bots: "{{ matrix_bot_meowlnir_bots_auto + matrix_bot_meowlnir_bots_custom }}" matrix_bot_meowlnir_bots_auto: [] matrix_bot_meowlnir_bots_custom: [] # The users invited to management rooms that the playbook creates, and given the power level required to command the bot there. # Full Matrix user IDs (`@alice:example.com`). # # Only consulted by bots with `management_room_auto_create: true`, and only as the default for those which do not carry their own `initial_managers` list. # The playbook points this at `matrix_admin` by default. matrix_bot_meowlnir_initial_managers: [] # Controls whether the bot list above is authoritative for this Meowlnir instance. # # When enabled, bots and management rooms which are registered with Meowlnir but no longer declared are removed, so that the list describes the whole installation, not merely additions to it. # # Note that removing a bot only makes Meowlnir forget it. # The bot's Matrix user is not deactivated and stays in the rooms it had joined, so clean that up separately if you want it gone for good. matrix_bot_meowlnir_bots_pruning_enabled: true # Controls whether pruning also happens when no bots are declared at all. # # Disabled by default, because an empty list is far more often a mistake (a commented-out block, an unset variable) than a genuine instruction to remove every bot. # With this off, the playbook refuses that particular run. # # Only relevant when `matrix_bot_meowlnir_bots_pruning_enabled` is enabled. matrix_bot_meowlnir_bots_pruning_on_empty_roster_enabled: false # How long to wait after starting the Meowlnir service and before creating bots. # Only waited on when the service was not already running. matrix_bot_meowlnir_bots_start_wait_time_seconds: 15 # The name and topic given to management rooms that the playbook creates. # Only used by bots with `management_room_auto_create` enabled. matrix_bot_meowlnir_management_room_name: Meowlnir management room matrix_bot_meowlnir_management_room_topic: >- Moderation commands for this Meowlnir bot are sent here. # Regular expressions matching the users this appservice owns. # # Defined here, because they are used both in the appservice registration file below and when telling other components (Ketesa, for one) which users are appservice-managed. # Writing them twice invites the two from drifting apart. # # The character class covers what the Matrix specification allows in a user ID localpart. matrix_bot_meowlnir_user_regex: "^@{{ matrix_bot_meowlnir_user_prefix | regex_escape }}[a-zA-Z0-9._=/+-]+:{{ matrix_bot_meowlnir_config_homeserver_domain | regex_escape }}$" matrix_bot_meowlnir_appservice_sender_regex: "^@{{ matrix_bot_meowlnir_appservice_sender_localpart | regex_escape }}:{{ matrix_bot_meowlnir_config_homeserver_domain | regex_escape }}$" # Tokens shared between Meowlnir and the homeserver. # Set these to strong, unique values. # The playbook derives them from `matrix_homeserver_generic_secret_key` by default. matrix_bot_meowlnir_appservice_token: '' matrix_bot_meowlnir_homeserver_token: '' matrix_bot_meowlnir_registration_yaml: | id: {{ matrix_bot_meowlnir_appservice_id | to_json }} as_token: {{ matrix_bot_meowlnir_appservice_token | to_json }} hs_token: {{ matrix_bot_meowlnir_homeserver_token | to_json }} url: {{ matrix_bot_meowlnir_appservice_url | to_json }} sender_localpart: {{ matrix_bot_meowlnir_appservice_sender_localpart | to_json }} rate_limited: false namespaces: users: - exclusive: true regex: {{ matrix_bot_meowlnir_user_regex | to_json }} - exclusive: true regex: {{ matrix_bot_meowlnir_appservice_sender_regex | to_json }} {% if matrix_bot_meowlnir_config_encryption_enable %} de.sorunome.msc2409.push_ephemeral: true push_ephemeral: true receive_ephemeral: true org.matrix.msc3202: true io.element.msc4190: true {% endif %} matrix_bot_meowlnir_registration: "{{ matrix_bot_meowlnir_registration_yaml | from_yaml }}" ######################################################################## # # # Configuration: homeserver # # # ######################################################################## # The address that Meowlnir can use to connect to the homeserver (client-server API). matrix_bot_meowlnir_config_homeserver_address: '' # The server name (base domain) of the homeserver. matrix_bot_meowlnir_config_homeserver_domain: '' ######################################################################## # # # Configuration: meowlnir # # # ######################################################################## # The hostname and port that Meowlnir listens on, inside the container. matrix_bot_meowlnir_config_meowlnir_hostname: 0.0.0.0 matrix_bot_meowlnir_config_meowlnir_port: 29339 # The address that the homeserver can use to connect to Meowlnir. matrix_bot_meowlnir_appservice_url: "http://matrix-bot-meowlnir:{{ matrix_bot_meowlnir_config_meowlnir_port }}" # Secret for the management API (`/_meowlnir/v1/...`), which is how bots and management rooms get created. # Set to `disable` to turn the API off entirely. # The playbook derives a value from `matrix_homeserver_generic_secret_key` by default. matrix_bot_meowlnir_config_meowlnir_management_secret: '' # Secret for the `/_meowlnir/data` API. # The playbook derives a value from `matrix_homeserver_generic_secret_key` by default. matrix_bot_meowlnir_config_meowlnir_data_secret: '' # Whether the `/_meowlnir/mxauth` APIs are enabled, which allow querying certain data using any Matrix account. # Needed by the (not yet released) management web interface. matrix_bot_meowlnir_config_meowlnir_federation_auth: false # When enabled, Meowlnir does everything except take actual moderation actions. # Useful for trialling Meowlnir alongside an existing moderation bot. matrix_bot_meowlnir_config_meowlnir_dry_run: false # Whether all bots should be considered untrusted, which enables additional checks (e.g. preventing subscription to a policy list without being in the room). matrix_bot_meowlnir_config_meowlnir_untrusted: false # The ID of the management room that handles requests to the Matrix report API. # Requires `matrix_bot_meowlnir_config_reporting_enabled` to be enabled to be of use. matrix_bot_meowlnir_config_meowlnir_report_room: '' # The ID of the management room in charge of deleting rooms from the server. # Room bans are not processed in other management rooms. matrix_bot_meowlnir_config_meowlnir_room_ban_room: '' # Whether Meowlnir should load all room IDs from the Synapse database on startup. # Requires `matrix_bot_meowlnir_synapse_database_uri` to be set. matrix_bot_meowlnir_config_meowlnir_load_all_room_hashes: "{{ matrix_bot_meowlnir_synapse_database_uri != '' }}" # Entities (user IDs or server names) whose policies are ignored entirely. # A blunt safety net against overly-wide policies from subscribed lists. # # Meowlnir always ignores policies matching its own homeserver domain, so there is no need to list it here. matrix_bot_meowlnir_config_meowlnir_hacky_rule_filter: "{{ matrix_bot_meowlnir_config_meowlnir_hacky_rule_filter_auto + matrix_bot_meowlnir_config_meowlnir_hacky_rule_filter_custom }}" matrix_bot_meowlnir_config_meowlnir_hacky_rule_filter_auto: [] matrix_bot_meowlnir_config_meowlnir_hacky_rule_filter_custom: [] # Glob patterns matched against policy reasons. # When a policy matches, all messages from the banned target are redacted automatically. # The reason `spam` is implicit. matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns: "{{ matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_default + matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_auto + matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_custom }}" matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_default: - spam matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_auto: [] matrix_bot_meowlnir_config_meowlnir_hacky_redact_patterns_custom: [] # Custom Synapse admin access tokens, per bot user ID. # # A few features (suspending or deactivating users, deleting rooms during a takedown) call Synapse's admin API, which requires the caller to be a server admin. # Bots are not server admins, so those calls fail with `M_FORBIDDEN` until a token is supplied here. Nothing else is affected. # # When left empty, each bot falls back to the appservice token. That is fine for the client-server API, but carries no admin rights. # # The key is the bot the token is used for; the token itself belongs to an administrator account. # Under Matrix Authentication Service it has to be issued by MAS, since Synapse no longer decides who is an admin. See the role's documentation page. # # Example: # matrix_bot_meowlnir_config_meowlnir_admin_tokens: # "@meowlnir_bot:example.com": "ADMIN_TOKEN_HERE" matrix_bot_meowlnir_config_meowlnir_admin_tokens: {} ######################################################################## # # # Configuration: meowlnir4all (provisioning bots for other people) # # # ######################################################################## # None of this is relevant unless you offer moderation bots to other users. # The management room ID that is allowed to use the `!provision` command. matrix_bot_meowlnir_config_meowlnir4all_admin_room: '' # The user ID template for newly provisioned bots. matrix_bot_meowlnir_config_meowlnir4all_localpart_template: "{{ matrix_bot_meowlnir_user_prefix }}{{ '{{ uuidgen }}' }}" matrix_bot_meowlnir_config_meowlnir4all_displayname: Administrator matrix_bot_meowlnir_config_meowlnir4all_avatar_url: '' matrix_bot_meowlnir_config_meowlnir4all_room_name: Meowlnir Management Room # The policy lists that newly provisioned bots subscribe to by default. # # Note that the order of this list is meaningful: when several lists carry a policy for the same entity, the first match wins. # Put your own list first if you want to be able to override policies from community lists with `!add-unban`. matrix_bot_meowlnir_config_meowlnir4all_default_watched_lists: "{{ matrix_bot_meowlnir_config_meowlnir4all_default_watched_lists_auto + matrix_bot_meowlnir_config_meowlnir4all_default_watched_lists_custom }}" matrix_bot_meowlnir_config_meowlnir4all_default_watched_lists_auto: [] matrix_bot_meowlnir_config_meowlnir4all_default_watched_lists_custom: [] ######################################################################## # # # Configuration: antispam (synapse-http-antispam integration) # # # ######################################################################## # Certain Meowlnir features (blocking invites and joins before they happen) require the synapse-http-antispam module: https://github.com/maunium/synapse-http-antispam # # The module has a single consumer, so this cannot be enabled at the same time as `matrix_bot_draupnir_config_web_synapseHTTPAntispam_enabled`. matrix_bot_meowlnir_synapse_http_antispam_enabled: false # Secret shared between Meowlnir and the synapse-http-antispam module. # The playbook derives a value from `matrix_homeserver_generic_secret_key` by default. matrix_bot_meowlnir_config_antispam_secret: '' # Whether Meowlnir should check local invites for spam too. matrix_bot_meowlnir_config_antispam_filter_local_invites: false # When set, Meowlnir uses this token to reject pending invites from users who get banned. # This should be an appservice token with access to all local users — the double-puppeting appservice token works well here. matrix_bot_meowlnir_config_antispam_auto_reject_invites_token: '' # Whether the management room receives a notice about blocked invites. matrix_bot_meowlnir_config_antispam_notify_management_room: false # Inviting any of the users listed here is blocked by default, unless separately allowed with the `!allow-invite` command. matrix_bot_meowlnir_config_antispam_block_invites_to: "{{ matrix_bot_meowlnir_config_antispam_block_invites_to_auto + matrix_bot_meowlnir_config_antispam_block_invites_to_custom }}" matrix_bot_meowlnir_config_antispam_block_invites_to_auto: [] matrix_bot_meowlnir_config_antispam_block_invites_to_custom: [] # The ID of the management room whose policies the synapse-http-antispam module consults. # # Meowlnir can host several bots, each with its own management room, so the module needs to be told which one to ask. # Required when `matrix_bot_meowlnir_synapse_http_antispam_enabled` is on. matrix_bot_meowlnir_synapse_http_antispam_management_room_id: '' # The URL that the synapse-http-antispam module targets in Meowlnir. # # Meowlnir serves the antispam API at `/_meowlnir/antispam//`; the module appends the callback name to this base URL. matrix_bot_meowlnir_synapse_http_antispam_config_base_url: "{{ matrix_bot_meowlnir_appservice_url }}/_meowlnir/antispam/{{ matrix_bot_meowlnir_synapse_http_antispam_management_room_id }}" matrix_bot_meowlnir_synapse_http_antispam_config_enabled_callbacks: - user_may_invite - user_may_join_room matrix_bot_meowlnir_synapse_http_antispam_config_fail_open: user_may_invite: true user_may_join_room: true matrix_bot_meowlnir_synapse_http_antispam_config_async: {} ######################################################################## # # # Configuration: policy server (MSC4284) # # # ######################################################################## # Whether Meowlnir acts as a policy server, letting rooms ask it to vet events before they are accepted. # Rooms opt in by pointing at this server. # # Enabling this exposes `/_matrix/policy/` on the Matrix federation endpoint, so that other servers in the room can reach it. matrix_bot_meowlnir_policy_server_enabled: false # Whether to always issue redactions for events blocked by the policy server. matrix_bot_meowlnir_config_policy_server_always_redact: true # The Synapse-style private signing key used by the policy server. # # Must NOT be left as the literal `generate`: # Meowlnir re-runs its config upgrader on every start, so `generate` would mint a fresh key on each restart. # The playbook derives a stable key from `matrix_homeserver_generic_secret_key` by default. matrix_bot_meowlnir_config_policy_server_signing_key: '' ######################################################################## # # # Configuration: reporting # # # ######################################################################## # Meowlnir can intercept the report API endpoints of the client-server API, so that abuse reports land in a management room. # This requires integration with the reverse proxy in front of the homeserver, which the playbook sets up for you when using Traefik. # # Also set `matrix_bot_meowlnir_config_meowlnir_report_room` to the management room that should receive the reports. matrix_bot_meowlnir_config_reporting_enabled: false ######################################################################## # # # Configuration: encryption # # # ######################################################################## # Whether Meowlnir bots support end-to-end encryption. # # This requires MSC3202, MSC4190 and MSC4203 support on the homeserver, plus `experimental_features.msc2409_to_device_messages_enabled`. # On Synapse, the playbook turns these on for you when this is enabled. matrix_bot_meowlnir_config_encryption_enable: false # Pickle key used for encrypting encryption keys in the crypto store. # # A fixed constant, like the mautrix bridge roles use, and for the same reason: the crypto store can't be read with a different key than it was written with, so a value that may change would cost the bots their encryption sessions. # # When migrating a Meowlnir installation that this playbook did not set up, set this to the `pickle_key` from its old configuration file. matrix_bot_meowlnir_config_encryption_pickle_key: go.mau.fi/meowlnir ######################################################################## # # # Configuration: databases # # # ######################################################################## matrix_bot_meowlnir_database_engine: postgres matrix_bot_meowlnir_database_username: matrix_bot_meowlnir matrix_bot_meowlnir_database_password: '' matrix_bot_meowlnir_database_hostname: '' matrix_bot_meowlnir_database_port: 5432 matrix_bot_meowlnir_database_name: matrix_bot_meowlnir matrix_bot_meowlnir_database_sslmode: disable matrix_bot_meowlnir_database_connection_string: "postgresql://{{ matrix_bot_meowlnir_database_username }}:{{ matrix_bot_meowlnir_database_password }}@{{ matrix_bot_meowlnir_database_hostname }}:{{ matrix_bot_meowlnir_database_port }}/{{ matrix_bot_meowlnir_database_name }}?sslmode={{ matrix_bot_meowlnir_database_sslmode }}" matrix_bot_meowlnir_config_database_max_open_conns: 20 matrix_bot_meowlnir_config_database_max_idle_conns: 2 matrix_bot_meowlnir_config_database_max_conn_idle_time: '' matrix_bot_meowlnir_config_database_max_conn_lifetime: '' # Access to the Synapse database. # Optional: it powers room-hash lookups used by the room takedown features. # Leave disabled to run without it. # # Upstream expects a user with read-only (SELECT) permissions. # The playbook does not create one, so enabling the integration below hands Meowlnir the same credentials Synapse itself uses — which grant write access too. # Enable it only if you are comfortable with that; otherwise set `matrix_bot_meowlnir_synapse_database_uri` yourself, pointing at a read-only user you have created. matrix_bot_meowlnir_synapse_database_integration_enabled: false # Only Postgres is supported. # Example: # matrix_bot_meowlnir_synapse_database_uri: postgresql://user:password@matrix-postgres:5432/synapse?sslmode=disable matrix_bot_meowlnir_synapse_database_uri: '' matrix_bot_meowlnir_config_synapse_db_max_open_conns: 2 matrix_bot_meowlnir_config_synapse_db_max_idle_conns: 1 matrix_bot_meowlnir_config_synapse_db_max_conn_idle_time: '' matrix_bot_meowlnir_config_synapse_db_max_conn_lifetime: '' ######################################################################## # # # Configuration: logging # # # ######################################################################## matrix_bot_meowlnir_config_logging_min_level: info matrix_bot_meowlnir_config_logging_writers: - type: stdout format: pretty-colored ######################################################################## # # # Traefik labels # # # ######################################################################## # Controls whether labels will be added that route certain paths to Meowlnir. # Regardless of whether this is enabled, it may or may not take effect due to the value of other variables. # See `matrix_synapse_container_labels_traefik_enabled` or `matrix_synapse_container_labels_matrix_related_labels_enabled`. matrix_bot_meowlnir_container_labels_traefik_enabled: "{{ matrix_bot_meowlnir_config_reporting_enabled or matrix_bot_meowlnir_policy_server_enabled }}" matrix_bot_meowlnir_container_labels_traefik_docker_network: "{{ matrix_bot_meowlnir_container_network }}" # Reports (/_matrix/client/../rooms/../report and /_matrix/client/../users/../report) # # Only `v3` is matched on purpose: # Meowlnir does not serve the legacy `r0` paths, so routing those here would break reporting for old clients. matrix_bot_meowlnir_container_labels_reporting_traefik_hostname: "{{ matrix_synapse_container_labels_traefik_hostname }}" matrix_bot_meowlnir_container_labels_reporting_traefik_path_regexp: "^/_matrix/client/v3/(rooms|users)/[^/]+/report(/.*)?$" matrix_bot_meowlnir_container_labels_reporting_traefik_rule: "Host(`{{ matrix_bot_meowlnir_container_labels_reporting_traefik_hostname }}`) && PathRegexp(`{{ matrix_bot_meowlnir_container_labels_reporting_traefik_path_regexp }}`)" matrix_bot_meowlnir_container_labels_reporting_traefik_priority: 0 matrix_bot_meowlnir_container_labels_reporting_traefik_entrypoints: "{{ matrix_synapse_container_labels_traefik_entrypoints }}" matrix_bot_meowlnir_container_labels_reporting_traefik_tls: "{{ matrix_bot_meowlnir_container_labels_reporting_traefik_entrypoints != 'web' }}" matrix_bot_meowlnir_container_labels_reporting_traefik_tls_certResolver: "{{ matrix_synapse_container_labels_traefik_tls_certResolver }}" # noqa var-naming # Policy server (/_matrix/policy), served on the federation endpoint matrix_bot_meowlnir_container_labels_policy_server_traefik_hostname: "{{ matrix_synapse_container_labels_public_federation_api_traefik_hostname }}" matrix_bot_meowlnir_container_labels_policy_server_traefik_path_prefix: /_matrix/policy matrix_bot_meowlnir_container_labels_policy_server_traefik_rule: "Host(`{{ matrix_bot_meowlnir_container_labels_policy_server_traefik_hostname }}`) && PathPrefix(`{{ matrix_bot_meowlnir_container_labels_policy_server_traefik_path_prefix }}`)" matrix_bot_meowlnir_container_labels_policy_server_traefik_priority: 0 matrix_bot_meowlnir_container_labels_policy_server_traefik_entrypoints: "{{ matrix_synapse_container_labels_public_federation_api_traefik_entrypoints }}" matrix_bot_meowlnir_container_labels_policy_server_traefik_tls: "{{ matrix_bot_meowlnir_container_labels_policy_server_traefik_entrypoints != 'web' }}" matrix_bot_meowlnir_container_labels_policy_server_traefik_tls_certResolver: "{{ matrix_synapse_container_labels_traefik_tls_certResolver }}" # noqa var-naming # matrix_bot_meowlnir_container_labels_traefik_labels_additional_labels contains a multiline string with additional labels to add to the container label file. # See `../templates/labels.j2` for details. # # Example: # matrix_bot_meowlnir_container_labels_traefik_labels_additional_labels: | # my.label=1 # another.label="here" matrix_bot_meowlnir_container_labels_traefik_labels_additional_labels: '' ######################################################################## # # # Configuration assembly # # # ######################################################################## # Default configuration template which covers the generic use case. # You can customize it by controlling the various variables inside it. # # For a more advanced customization, you can extend the default (see `matrix_bot_meowlnir_configuration_extension_yaml`) or completely replace this variable with your own template. matrix_bot_meowlnir_configuration_yaml: "{{ lookup('template', 'templates/config.yaml.j2') }}" matrix_bot_meowlnir_configuration_extension_yaml: | # Your custom YAML configuration goes here. # This configuration extends the default starting configuration (`matrix_bot_meowlnir_configuration_yaml`). # # You can override individual variables from the default configuration, or introduce new ones. # # If you need something more special, you can take full control by completely redefining `matrix_bot_meowlnir_configuration_yaml`. matrix_bot_meowlnir_configuration_extension: "{{ matrix_bot_meowlnir_configuration_extension_yaml | from_yaml if matrix_bot_meowlnir_configuration_extension_yaml | from_yaml is mapping else {} }}" # Holds the final configuration (a combination of the default and its extension). # You most likely don't need to touch this variable. # Instead, see `matrix_bot_meowlnir_configuration_yaml`. matrix_bot_meowlnir_configuration: "{{ matrix_bot_meowlnir_configuration_yaml | from_yaml | combine(matrix_bot_meowlnir_configuration_extension, recursive=True) }}" # matrix_bot_meowlnir_restart_necessary controls whether the service will be restarted (when true) or merely started (when false) by the systemd service manager role (when conditional restart is enabled). # # This value is automatically computed during installation based on whether any configuration files, the systemd service file, or the container image changed. # The default of `false` means "no restart needed" — appropriate when the role's installation tasks haven't run (e.g., due to --tags skipping them). matrix_bot_meowlnir_restart_necessary: false