Compare commits
No commits in common. "3dcd9f52d6e67fcd0ebf3796e99f53ac956cc30c" and "c56d157c3f6867703dcf395100e8144d6e754f1a" have entirely different histories.
3dcd9f52d6
...
c56d157c3f
|
@ -57,7 +57,7 @@
|
||||||
rec {
|
rec {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit unstablePkgs inputs;
|
inherit nixpkgs-unstable inputs;
|
||||||
values = import ./values.nix;
|
values = import ./values.nix;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
./mjolnir.nix
|
./mjolnir.nix
|
||||||
|
|
||||||
./discord.nix
|
./discord.nix
|
||||||
./hookshot
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
{ config, lib, unstablePkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.matrix-hookshot;
|
|
||||||
webhookListenAddress = "127.0.0.1";
|
|
||||||
webhookListenPort = 9000;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./module.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
sops.secrets."matrix/registrations/matrix-hookshot" = {
|
|
||||||
sopsFile = ../../../../../secrets/bicep/matrix.yaml;
|
|
||||||
key = "registrations/matrix-hookshot";
|
|
||||||
owner = config.users.users.matrix-synapse.name;
|
|
||||||
group = config.users.groups.keys-matrix-registrations.name;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.matrix-hookshot = {
|
|
||||||
serviceConfig.SupplementaryGroups = [ config.users.groups.keys-matrix-registrations.name ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.matrix-hookshot = {
|
|
||||||
enable = true;
|
|
||||||
package = unstablePkgs.matrix-hookshot;
|
|
||||||
registrationFile = config.sops.secrets."matrix/registrations/matrix-hookshot".path;
|
|
||||||
settings = {
|
|
||||||
bridge = {
|
|
||||||
bindAddress = "127.0.0.1";
|
|
||||||
domain = "pvv.ntnu,no";
|
|
||||||
url = "https://matrix.pvv.ntnu.no";
|
|
||||||
mediaUrl = "https://matrix.pvv.ntnu.no";
|
|
||||||
port = 9993;
|
|
||||||
};
|
|
||||||
listeners = [
|
|
||||||
{
|
|
||||||
bindAddress = webhookListenAddress;
|
|
||||||
port = webhookListenPort;
|
|
||||||
resources = [
|
|
||||||
"webhooks"
|
|
||||||
# "metrics"
|
|
||||||
# "provisioning"
|
|
||||||
"widgets"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
generic = {
|
|
||||||
enabled = true;
|
|
||||||
outbound = true;
|
|
||||||
};
|
|
||||||
feeds = {
|
|
||||||
enabled = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.matrix-hookshot.serviceDependencies = [ "matrix-synapse.target" "nginx.service" ];
|
|
||||||
|
|
||||||
services.matrix-synapse-next.settings = {
|
|
||||||
app_service_config_files = [ config.sops.secrets."matrix/registrations/matrix-hookshot".path ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."hookshot.pvv.ntnu.no" = {
|
|
||||||
enableACME = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://${webhookListenAddress}:${toString webhookListenPort}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,127 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
cfg = config.services.matrix-hookshot;
|
|
||||||
settingsFormat = pkgs.formats.yaml { };
|
|
||||||
configFile = settingsFormat.generate "matrix-hookshot-config.yml" cfg.settings;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
services.matrix-hookshot = {
|
|
||||||
enable = lib.mkEnableOption "matrix-hookshot, a bridge between Matrix and project management services";
|
|
||||||
|
|
||||||
package = lib.mkPackageOption pkgs "matrix-hookshot" { };
|
|
||||||
|
|
||||||
registrationFile = lib.mkOption {
|
|
||||||
type = lib.types.path;
|
|
||||||
description = ''
|
|
||||||
Appservice registration file.
|
|
||||||
As it contains secret tokens, you may not want to add this to the publicly readable Nix store.
|
|
||||||
'';
|
|
||||||
example = lib.literalExpression ''
|
|
||||||
pkgs.writeText "matrix-hookshot-registration" \'\'
|
|
||||||
id: matrix-hookshot
|
|
||||||
as_token: aaaaaaaaaa
|
|
||||||
hs_token: aaaaaaaaaa
|
|
||||||
namespaces:
|
|
||||||
rooms: []
|
|
||||||
users:
|
|
||||||
- regex: "@_webhooks_.*:foobar"
|
|
||||||
exclusive: true
|
|
||||||
|
|
||||||
sender_localpart: hookshot
|
|
||||||
url: "http://localhost:9993"
|
|
||||||
rate_limited: false
|
|
||||||
\'\'
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
{file}`config.yml` configuration as a Nix attribute set.
|
|
||||||
|
|
||||||
For details please see the [documentation](https://matrix-org.github.io/matrix-hookshot/latest/setup/sample-configuration.html).
|
|
||||||
'';
|
|
||||||
example = {
|
|
||||||
bridge = {
|
|
||||||
domain = "example.com";
|
|
||||||
url = "http://localhost:8008";
|
|
||||||
mediaUrl = "https://example.com";
|
|
||||||
port = 9993;
|
|
||||||
bindAddress = "127.0.0.1";
|
|
||||||
};
|
|
||||||
listeners = [
|
|
||||||
{
|
|
||||||
port = 9000;
|
|
||||||
bindAddress = "0.0.0.0";
|
|
||||||
resources = [ "webhooks" ];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
port = 9001;
|
|
||||||
bindAddress = "localhost";
|
|
||||||
resources = [
|
|
||||||
"metrics"
|
|
||||||
"provisioning"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
default = { };
|
|
||||||
type = lib.types.submodule {
|
|
||||||
freeformType = settingsFormat.type;
|
|
||||||
options = {
|
|
||||||
passFile = lib.mkOption {
|
|
||||||
type = lib.types.path;
|
|
||||||
default = "/var/lib/matrix-hookshot/passkey.pem";
|
|
||||||
description = ''
|
|
||||||
A passkey used to encrypt tokens stored inside the bridge.
|
|
||||||
File will be generated if not found.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
serviceDependencies = lib.mkOption {
|
|
||||||
type = with lib.types; listOf str;
|
|
||||||
default = lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
|
|
||||||
defaultText = lib.literalExpression ''
|
|
||||||
lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit
|
|
||||||
'';
|
|
||||||
description = ''
|
|
||||||
List of Systemd services to require and wait for when starting the application service,
|
|
||||||
such as the Matrix homeserver if it's running on the same host.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
systemd.services.matrix-hookshot = {
|
|
||||||
description = "a bridge between Matrix and multiple project management services";
|
|
||||||
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
wants = [ "network-online.target" ] ++ cfg.serviceDependencies;
|
|
||||||
after = [ "network-online.target" ] ++ cfg.serviceDependencies;
|
|
||||||
|
|
||||||
preStart = ''
|
|
||||||
if [ ! -f '${cfg.settings.passFile}' ]; then
|
|
||||||
mkdir -p $(dirname '${cfg.settings.passFile}')
|
|
||||||
${pkgs.openssl}/bin/openssl genpkey -out '${cfg.settings.passFile}' -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:4096
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "simple";
|
|
||||||
Restart = "always";
|
|
||||||
ExecStart = "${cfg.package}/bin/matrix-hookshot ${configFile} ${cfg.registrationFile}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ flandweber ];
|
|
||||||
}
|
|
Loading…
Reference in New Issue