6 Commits

Author SHA1 Message Date
832c1bbd08 Specify default locale and encoding for postgresql
All checks were successful
Check flake / build-amd64-linux (push) Successful in 2m48s
2024-07-08 23:27:50 +01:00
31c747812e Add postgresql module 2024-07-08 22:13:36 +01:00
162e7bc114 Disable auditd on server hosts 2024-07-08 22:12:56 +01:00
8504c06610 Add postgresql support to matrix-synapse 2024-07-08 21:50:47 +01:00
8505cd07a9 Remove deprecated coturn config 2024-07-08 20:57:11 +01:00
5f4ca804f4 Refactor matrix-synapse module 2024-07-08 20:56:51 +01:00
6 changed files with 116 additions and 46 deletions

View File

@@ -18,13 +18,13 @@
webroot = "/var/lib/acme/acme-challenge";
};
};
auditd.enable = true;
audit = {
enable = true;
rules = [
"-a exit,always -F arch=b64 -S execve"
];
};
# auditd.enable = true;
# audit = {
# enable = true;
# rules = [
# "-a exit,always -F arch=b64 -S execve"
# ];
# };
};
systemd = {

View File

@@ -43,7 +43,8 @@
services.openssh.settings.PermitRootLogin = lib.mkForce "prohibit-password";
modules = {
modules = rec {
databases.postgresql.enable = true;
services = {
borgmatic = {
enable = true;
@@ -61,7 +62,10 @@
};
gitea.enable = true;
headscale.enable = true;
matrix-synapse.enable = true;
matrix-synapse = {
enable = true;
usePostgresql = databases.postgresql.enable;
};
nginx.enable = true;
photoprism.enable = true;
};

View File

@@ -0,0 +1,40 @@
{
config,
lib,
...
}:
let
cfg = config.modules.databases.postgresql;
in {
options.modules.databases.postgresql = {
enable = lib.mkOption {
default = false;
example = true;
};
};
config = lib.mkIf cfg.enable {
services.postgresql = {
enable = true;
initdbArgs = [
"--allow-group-access"
"--encoding=UTF8"
"--locale=C"
];
settings = {
log_connections = true;
log_disconnections = true;
log_destination = lib.mkForce "syslog";
};
};
services.borgmatic.settings = {
postgresql_databases = [
{
name = "all";
}
];
};
};
}

View File

@@ -2,6 +2,7 @@
imports = [
./options.nix
./podman.nix
./databases/postgresql.nix
./desktop/gnome.nix
./desktop/forensics.nix
./desktop/hyprland.nix

View File

@@ -79,7 +79,6 @@ in {
no-tcp-relay = true;
extraConfig = ''
cipher-list="HIGH"
no-loopback-peers
no-multicast-peers
# Ban private CIDR blocks

View File

@@ -2,61 +2,58 @@
config,
lib,
pkgs,
inputs,
...
}:
let
cfg = config.modules.services.matrix-synapse;
matrixClientConfig = {
"m.homeserver" = {
base_url = "https://matrix.vimium.com";
server_name = "vimium.com";
};
"m.identity_server" = {};
};
matrixServerConfig."m.server" = "matrix.vimium.com:443";
mkWellKnown = data: ''
more_set_headers 'Content-Type: application/json';
return 200 '${builtins.toJSON data}';
'';
in {
options.modules.services.matrix-synapse = {
enable = lib.mkOption {
default = false;
example = true;
};
enableElementWeb = lib.mkOption {
default = true;
example = false;
};
serverName = lib.mkOption {
type = lib.types.str;
default = "vimium.com";
example = "vimium.com";
};
usePostgresql = lib.mkOption {
default = false;
example = true;
};
};
config = lib.mkIf cfg.enable {
config = let
matrixClientConfig = {
"m.homeserver" = {
base_url = "https://matrix.${cfg.serverName}";
server_name = cfg.serverName;
};
"m.identity_server" = {};
};
matrixServerConfig."m.server" = "matrix.${cfg.serverName}:443";
mkWellKnown = data: ''
more_set_headers 'Content-Type: application/json';
return 200 '${builtins.toJSON data}';
'';
in lib.mkIf cfg.enable {
networking.firewall.allowedTCPPorts = [
8448 # Matrix federation
];
security.acme.certs = {
"matrix.vimium.com" = {
"matrix.${cfg.serverName}" = {
reloadServices = [ "matrix-synapse" ];
};
};
services.nginx.virtualHosts = {
"chat.vimium.com" = {
forceSSL = true;
enableACME = true;
root = pkgs.unstable.element-web.override {
conf = {
default_server_config = matrixClientConfig;
brand = "Vimium Chat";
branding = {
auth_header_logo_url = "https://vimium.com/images/logo.svg";
auth_footer_links = [
{ "text" = "Vimium.com"; "url" = "https://vimium.com"; }
];
};
};
};
};
"matrix.vimium.com" = {
"matrix.${cfg.serverName}" = {
forceSSL = true;
enableACME = true;
listen = [
@@ -106,22 +103,51 @@ in {
"/_synapse/client".proxyPass = "http://localhost:8008";
};
};
"vimium.com" = {
"${cfg.serverName}" = {
locations."= /.well-known/matrix/server".extraConfig = (mkWellKnown matrixServerConfig);
locations."= /.well-known/matrix/client".extraConfig = (mkWellKnown matrixClientConfig);
};
} // (if cfg.enableElementWeb then {
"chat.${cfg.serverName}" = {
forceSSL = true;
enableACME = true;
root = pkgs.unstable.element-web.override {
conf = {
default_server_config = matrixClientConfig;
brand = "Vimium Chat";
branding = {
auth_header_logo_url = "https://vimium.com/images/logo.svg";
auth_footer_links = [
{ "text" = "Vimium.com"; "url" = "https://vimium.com"; }
];
};
};
};
};
} else {});
services.matrix-synapse = {
enable = true;
settings = {
database.name = "sqlite3";
database.name = (if cfg.usePostgresql then "psycopg2" else "sqlite3");
enable_metrics = false;
enable_registration = false;
max_upload_size = "100M";
report_stats = false;
server_name = "vimium.com";
server_name = cfg.serverName;
};
};
services.postgresql = lib.mkIf cfg.usePostgresql {
ensureUsers = [
{
name = "matrix-synapse";
ensureDBOwnership = true;
}
];
ensureDatabases = [
"matrix-synapse"
];
};
};
}