diff options
author | sefidel <contact@sefidel.net> | 2024-02-11 02:11:21 +0900 |
---|---|---|
committer | sefidel <contact@sefidel.net> | 2024-02-11 02:15:33 +0900 |
commit | f4d8ab880a58e00af5a7fcda112baa7de2f8f0df (patch) | |
tree | a93467f9cdae84f38e00c95a62464709fa222b82 /overlays/mautrix-discord-module.nix | |
parent | 955671dc0751f320d22ca5cfd2b0a2eb60dd8a99 (diff) | |
download | infra-f4d8ab880a58e00af5a7fcda112baa7de2f8f0df.tar.gz infra-f4d8ab880a58e00af5a7fcda112baa7de2f8f0df.zip |
feat(project)!: support nixos-rebuild and hydra
Diffstat (limited to 'overlays/mautrix-discord-module.nix')
-rw-r--r-- | overlays/mautrix-discord-module.nix | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/overlays/mautrix-discord-module.nix b/overlays/mautrix-discord-module.nix deleted file mode 100644 index 36cafe6..0000000 --- a/overlays/mautrix-discord-module.nix +++ /dev/null @@ -1,205 +0,0 @@ -{ config, pkgs, lib, ... }: - -with lib; - -let - dataDir = "/var/lib/mautrix-discord"; - registrationFile = "${dataDir}/discord-registration.yaml"; - cfg = config.services.mautrix-discord; - settingsFormat = pkgs.formats.json { }; - settingsFile = "${dataDir}/config.json"; - settingsFileUnsubstituted = settingsFormat.generate "mautrix-discord-config.json" cfg.settings; - -in -{ - options = { - services.mautrix-discord = { - enable = mkEnableOption (lib.mdDoc "Mautrix-discord, a Matrix-discord puppeting bridge."); - - package = mkOption { type = types.package; default = pkgs.mautrix-discord; }; - - settings = mkOption rec { - apply = recursiveUpdate default; - inherit (settingsFormat) type; - default = { - homeserver = { - software = "standard"; - }; - - appservice = rec { - database = "sqlite:///${dataDir}/mautrix-discord.db"; - database_opts = { }; - hostname = "localhost"; - port = 8080; - address = "http://localhost:${toString port}"; - }; - - bridge = { - permissions."*" = "relay"; - relay.whitelist = [ ]; - double_puppet_server_map = { }; - login_shared_secret_map = { }; - }; - - logging = { - min_level = "debug"; - writers = [ - { - type = "stdout"; - format = "pretty-colored"; - } - ]; - }; - }; - example = literalExpression '' - { - homeserver = { - address = "http://localhost:8008"; - domain = "public-domain.tld"; - }; - - appservice.public = { - prefix = "/public"; - external = "https://public-appservice-address/public"; - }; - - bridge.permissions = { - "example.com" = "full"; - "@admin:example.com" = "admin"; - }; - } - ''; - description = lib.mdDoc '' - {file}`config.yaml` configuration as a Nix attribute set. - Configuration options should match those described in - [example-config.yaml](https://github.com/mautrix/discord/blob/master/discord/example-config.yaml). - - Secret tokens should be specified using {option}`environmentFile` - instead of this world-readable attribute set. - ''; - }; - - environmentFile = mkOption { - type = types.nullOr types.path; - default = null; - description = lib.mdDoc '' - File containing environment variables to be passed to the mautrix-discord service, - in which secret tokens can be specified securely by defining values for e.g. - `MAUTRIX_DISCORD_APPSERVICE_AS_TOKEN`, - `MAUTRIX_DISCORD_APPSERVICE_HS_TOKEN`, - - These environment variables can also be used to set other options by - replacing hierarchy levels by `.`, converting the name to uppercase - and prepending `MAUTRIX_DISCORD_`. - For example, the first value above maps to - {option}`settings.appservice.as_token`. - - The environment variable values can be prefixed with `json::` to have - them be parsed as JSON. For example, `login_shared_secret_map` can be - set as follows: - `MAUTRIX_DISCORD_BRIDGE_LOGIN_SHARED_SECRET_MAP=json::{"example.com":"secret"}`. - ''; - }; - - serviceDependencies = mkOption { - type = with types; listOf str; - default = optional config.services.matrix-synapse.enable "matrix-synapse.service"; - defaultText = literalExpression '' - optional config.services.matrix-synapse.enable "matrix-synapse.service" - ''; - description = lib.mdDoc '' - List of Systemd services to require and wait for when starting the application service. - ''; - }; - }; - }; - - config = mkIf cfg.enable { - users.users.mautrix-discord = { - isSystemUser = true; - group = "mautrix-discord"; - home = dataDir; - description = "Mautrix-Discord bridge user"; - }; - - users.groups.mautrix-discord = {}; - - systemd.services.mautrix-discord = { - description = "Mautrix-discord, a Matrix-discord puppeting bridge."; - - wantedBy = [ "multi-user.target" ]; - wants = [ "network-online.target" ] ++ cfg.serviceDependencies; - after = [ "network-online.target" ] ++ cfg.serviceDependencies; - - preStart = '' - # substitute the settings file by environment variables - # in this case read from EnvironmentFile - test -f '${settingsFile}' && rm -f '${settingsFile}' - old_umask=$(umask) - umask 0177 - ${pkgs.envsubst}/bin/envsubst \ - -o '${settingsFile}' \ - -i '${settingsFileUnsubstituted}' \ - umask $old_umask - - # generate the appservice's registration file if absent - if [ ! -f '${registrationFile}' ]; then - ${pkgs.mautrix-discord}/bin/mautrix-discord \ - --generate-registration \ - --config='${settingsFile}' \ - --registration='${registrationFile}' - fi - chmod 640 ${registrationFile} - - umask 0177 - ${pkgs.yq}/bin/yq -s '.[0].appservice.as_token = .[1].as_token - | .[0].appservice.hs_token = .[1].hs_token - | .[0]' '${settingsFile}' '${registrationFile}' \ - > '${settingsFile}.tmp' - mv '${settingsFile}.tmp' '${settingsFile}' - umask $old_umask - ''; - - serviceConfig = { - Type = "simple"; - Restart = "on-failure"; - - LockPersonality = true; - MemoryDenyWriteExecute = true; - NoNewPrivileges = true; - ProtectSystem = "strict"; - ProtectHome = true; - ProtectKernelTunables = true; - ProtectKernelModules = true; - ProtectKernelLogs = true; - ProtectControlGroups = true; - ProtectClock = true; - ProtectHostname = true; - RestrictRealtime = true; - RestrictSUIDSGID = true; - - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = ["@system-service"]; - - PrivateTmp = true; - PrivateDevices = true; - PrivateUsers = true; - - User = "mautrix-discord"; - Group = "mautrix-discord"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = "0027"; - EnvironmentFile = cfg.environmentFile; - - ExecStart = '' - ${cfg.package}/bin/mautrix-discord \ - --config='${settingsFile}' \ - --registration='${registrationFile}' - ''; - }; - restartTriggers = [settingsFileUnsubstituted]; - }; - }; -} |