mirror of
https://git.pvv.ntnu.no/Drift/pvv-nixos-config.git
synced 2026-08-11 05:42:33 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b350554bf3 | ||
|
|
f41e6c0a74 | ||
|
|
8bb86ef634 |
@@ -197,6 +197,7 @@
|
|||||||
inputs.pvv-calendar-bot.nixosModules.default
|
inputs.pvv-calendar-bot.nixosModules.default
|
||||||
inputs.minecraft-heatmap.nixosModules.default
|
inputs.minecraft-heatmap.nixosModules.default
|
||||||
self.nixosModules.gickup
|
self.nixosModules.gickup
|
||||||
|
self.nixosModules.hugepages
|
||||||
self.nixosModules.matrix-ooye
|
self.nixosModules.matrix-ooye
|
||||||
];
|
];
|
||||||
overlays = [
|
overlays = [
|
||||||
@@ -309,6 +310,7 @@
|
|||||||
bluemap = ./modules/bluemap.nix;
|
bluemap = ./modules/bluemap.nix;
|
||||||
drumknotty = ./modules/drumknotty;
|
drumknotty = ./modules/drumknotty;
|
||||||
gickup = ./modules/gickup;
|
gickup = ./modules/gickup;
|
||||||
|
hugepages = ./modules/hugepages.nix;
|
||||||
matrix-ooye = ./modules/matrix-ooye.nix;
|
matrix-ooye = ./modules/matrix-ooye.nix;
|
||||||
python-http-handlers = ./modules/python-http-handlers.nix;
|
python-http-handlers = ./modules/python-http-handlers.nix;
|
||||||
robots-txt = ./modules/robots-txt.nix;
|
robots-txt = ./modules/robots-txt.nix;
|
||||||
|
|||||||
@@ -177,11 +177,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."phpfpm-idp" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."idp.pvv.ntnu.no" = {
|
services.nginx.virtualHosts."idp.pvv.ntnu.no" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
|
|||||||
@@ -287,7 +287,6 @@ in {
|
|||||||
|
|
||||||
systemd.services.mediawiki-init = lib.mkIf cfg.enable {
|
systemd.services.mediawiki-init = lib.mkIf cfg.enable {
|
||||||
after = [ "sops-install-secrets.service" ];
|
after = [ "sops-install-secrets.service" ];
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
UMask = lib.mkForce "0007";
|
UMask = lib.mkForce "0007";
|
||||||
};
|
};
|
||||||
@@ -295,7 +294,6 @@ in {
|
|||||||
|
|
||||||
systemd.services.phpfpm-mediawiki = lib.mkIf cfg.enable {
|
systemd.services.phpfpm-mediawiki = lib.mkIf cfg.enable {
|
||||||
after = [ "sops-install-secrets.service" ];
|
after = [ "sops-install-secrets.service" ];
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
UMask = lib.mkForce "0007";
|
UMask = lib.mkForce "0007";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -61,11 +61,6 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.vaultwarden = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."${domain}" = {
|
services.nginx.virtualHosts."${domain}" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
|
|||||||
@@ -49,11 +49,6 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."phpfpm-roundcube" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO: move this back to `webmail.pvv.ntnu.no/roundcube` subpath
|
# TODO: move this back to `webmail.pvv.ntnu.no/roundcube` subpath
|
||||||
|
|
||||||
services.nginx.virtualHosts.${domain} = {
|
services.nginx.virtualHosts.${domain} = {
|
||||||
|
|||||||
@@ -116,11 +116,6 @@ in {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."phpfpm-pvv-nettsiden" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."pvv.ntnu.no" = {
|
services.nginx.virtualHosts."pvv.ntnu.no" = {
|
||||||
globalRedirect = cfg.domainName;
|
globalRedirect = cfg.domainName;
|
||||||
redirectCode = 307;
|
redirectCode = 307;
|
||||||
|
|||||||
@@ -35,9 +35,4 @@ in {
|
|||||||
onCalendar = "*-*-* 09:00:00";
|
onCalendar = "*-*-* 09:00:00";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.pvv-calendar-bot = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ in
|
|||||||
lfs = false;
|
lfs = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: add a module setting to specify additional systemd dependencies
|
|
||||||
# and then mark "sops-install-secrets.service" as a dependency here
|
|
||||||
instances = let
|
instances = let
|
||||||
defaultGithubConfig = {
|
defaultGithubConfig = {
|
||||||
settings.token_file = config.sops.secrets."gickup/github-token".path;
|
settings.token_file = config.sops.secrets."gickup/github-token".path;
|
||||||
|
|||||||
@@ -55,11 +55,6 @@
|
|||||||
# It needs this to be allowed to access the files with the acme group
|
# It needs this to be allowed to access the files with the acme group
|
||||||
systemd.services.coturn.serviceConfig.PrivateUsers = lib.mkForce false;
|
systemd.services.coturn.serviceConfig.PrivateUsers = lib.mkForce false;
|
||||||
|
|
||||||
systemd.services.coturn = {
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services."acme-${config.services.coturn.realm}".serviceConfig = {
|
systemd.services."acme-${config.services.coturn.realm}".serviceConfig = {
|
||||||
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
|
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -39,8 +39,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.mx-puppet-discord = {
|
systemd.services.mx-puppet-discord = {
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
serviceConfig.SupplementaryGroups = [
|
serviceConfig.SupplementaryGroups = [
|
||||||
config.users.groups.keys-matrix-registrations.name
|
config.users.groups.keys-matrix-registrations.name
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -183,7 +183,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
services.matrix-hookshot.serviceDependencies = [
|
services.matrix-hookshot.serviceDependencies = [
|
||||||
"sops-install-secrets.service"
|
|
||||||
"matrix-synapse.target"
|
"matrix-synapse.target"
|
||||||
"nginx.service"
|
"nginx.service"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -43,12 +43,7 @@ in
|
|||||||
keyFile = config.sops.templates."matrix-livekit-keyfile".path;
|
keyFile = config.sops.templates."matrix-livekit-keyfile".path;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.lk-jwt-service = lib.mkIf cfg.enable {
|
systemd.services.lk-jwt-service.environment.LIVEKIT_FULL_ACCESS_HOMESERVERS = lib.mkIf cfg.enable (builtins.concatStringsSep "," [ "pvv.ntnu.no" "dodsorf.as" ]);
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
|
|
||||||
environment.LIVEKIT_FULL_ACCESS_HOMESERVERS = builtins.concatStringsSep "," [ "pvv.ntnu.no" "dodsorf.as" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts.${matrixDomain} = lib.mkIf cfg.enable {
|
services.nginx.virtualHosts.${matrixDomain} = lib.mkIf cfg.enable {
|
||||||
locations."^~ /livekit/jwt/" = {
|
locations."^~ /livekit/jwt/" = {
|
||||||
|
|||||||
@@ -55,57 +55,52 @@
|
|||||||
pantalaimon.username = "bot_admin";
|
pantalaimon.username = "bot_admin";
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.mjolnir = {
|
systemd.services.mjolnir.serviceConfig = {
|
||||||
requires = [ "sops-install-secrets.service" ];
|
DynamicUser = true;
|
||||||
after = [ "sops-install-secrets.service" ];
|
RuntimeDirectory = [ "mjolnir/root-mnt" ];
|
||||||
|
RootDirectory = "/run/mjolnir/root-mnt";
|
||||||
|
BindReadOnlyPaths = [
|
||||||
|
config.sops.secrets."matrix/mjolnir/access_token".path
|
||||||
|
builtins.storeDir
|
||||||
|
"/etc"
|
||||||
|
"/run/nscd"
|
||||||
|
"/var/run/nscd"
|
||||||
|
];
|
||||||
|
|
||||||
serviceConfig = {
|
AmbientCapabilities = "";
|
||||||
DynamicUser = true;
|
CapabilityBoundingSet = "";
|
||||||
RuntimeDirectory = [ "mjolnir/root-mnt" ];
|
LockPersonality = true;
|
||||||
RootDirectory = "/run/mjolnir/root-mnt";
|
MemoryDenyWriteExecute = false; # node needs this
|
||||||
BindReadOnlyPaths = [
|
NoNewPrivileges = true;
|
||||||
config.sops.secrets."matrix/mjolnir/access_token".path
|
PrivateDevices = true;
|
||||||
builtins.storeDir
|
PrivateMounts = true;
|
||||||
"/etc"
|
PrivateTmp = true;
|
||||||
"/run/nscd"
|
PrivateUsers = true;
|
||||||
"/var/run/nscd"
|
ProcSubset = "pid";
|
||||||
];
|
ProtectClock = true;
|
||||||
|
ProtectControlGroups = true;
|
||||||
AmbientCapabilities = "";
|
ProtectHome = true;
|
||||||
CapabilityBoundingSet = "";
|
ProtectHostname = true;
|
||||||
LockPersonality = true;
|
ProtectKernelLogs = true;
|
||||||
MemoryDenyWriteExecute = false; # node needs this
|
ProtectKernelModules = true;
|
||||||
NoNewPrivileges = true;
|
ProtectKernelTunables = true;
|
||||||
PrivateDevices = true;
|
ProtectProc = "invisible";
|
||||||
PrivateMounts = true;
|
ProtectSystem = "strict";
|
||||||
PrivateTmp = true;
|
RemoveIPC = true;
|
||||||
PrivateUsers = true;
|
RestrictAddressFamilies = [
|
||||||
ProcSubset = "pid";
|
"AF_INET"
|
||||||
ProtectClock = true;
|
"AF_INET6"
|
||||||
ProtectControlGroups = true;
|
"AF_UNIX"
|
||||||
ProtectHome = true;
|
];
|
||||||
ProtectHostname = true;
|
RestrictNamespaces = true;
|
||||||
ProtectKernelLogs = true;
|
RestrictRealtime = true;
|
||||||
ProtectKernelModules = true;
|
RestrictSUIDSGID = true;
|
||||||
ProtectKernelTunables = true;
|
SystemCallArchitectures = "native";
|
||||||
ProtectProc = "invisible";
|
SystemCallFilter = [
|
||||||
ProtectSystem = "strict";
|
"@system-service"
|
||||||
RemoveIPC = true;
|
"~@privileged"
|
||||||
RestrictAddressFamilies = [
|
"~@resources"
|
||||||
"AF_INET"
|
];
|
||||||
"AF_INET6"
|
UMask = "0077";
|
||||||
"AF_UNIX"
|
|
||||||
];
|
|
||||||
RestrictNamespaces = true;
|
|
||||||
RestrictRealtime = true;
|
|
||||||
RestrictSUIDSGID = true;
|
|
||||||
SystemCallArchitectures = "native";
|
|
||||||
SystemCallFilter = [
|
|
||||||
"@system-service"
|
|
||||||
"~@privileged"
|
|
||||||
"~@resources"
|
|
||||||
];
|
|
||||||
UMask = "0077";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,15 +56,7 @@ in
|
|||||||
enableSynapseIntegration = false;
|
enableSynapseIntegration = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."matrix-ooye-pre-start" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services."matrix-ooye" = {
|
systemd.services."matrix-ooye" = {
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
RuntimeDirectory = [ "matrix-ooye/root-mnt" ];
|
RuntimeDirectory = [ "matrix-ooye/root-mnt" ];
|
||||||
RootDirectory = "/run/matrix-ooye/root-mnt";
|
RootDirectory = "/run/matrix-ooye/root-mnt";
|
||||||
|
|||||||
@@ -44,11 +44,6 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.targets."matrix-synapse" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.matrix-synapse-next = {
|
services.matrix-synapse-next = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -79,7 +74,7 @@ in {
|
|||||||
name = "psycopg2";
|
name = "psycopg2";
|
||||||
args = {
|
args = {
|
||||||
host = "/var/run/postgresql";
|
host = "/var/run/postgresql";
|
||||||
dbname = "synapse";
|
database = "synapse";
|
||||||
user = "matrix-synapse";
|
user = "matrix-synapse";
|
||||||
cp_min = 1;
|
cp_min = 1;
|
||||||
cp_max = 5;
|
cp_max = 5;
|
||||||
|
|||||||
@@ -23,15 +23,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.minecraft-heatmap-ingest-logs = lib.mkIf cfg.enable {
|
systemd.services.minecraft-heatmap-ingest-logs = lib.mkIf cfg.enable {
|
||||||
after = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
LoadCredential = [
|
LoadCredential = [
|
||||||
"sshkey:${config.sops.secrets."minecraft-heatmap/ssh-key/private".path}"
|
"sshkey:${config.sops.secrets."minecraft-heatmap/ssh-key/private".path}"
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
let
|
let
|
||||||
cfg = config.services.mysql;
|
cfg = config.services.mysql;
|
||||||
dataDir = "/data/mysql";
|
dataDir = "/data/mysql";
|
||||||
|
|
||||||
|
innodbBufferPoolMB = 128;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./backup.nix ];
|
imports = [ ./backup.nix ];
|
||||||
@@ -26,6 +28,10 @@ in
|
|||||||
# Useful for the mysqld prometheus exporter
|
# Useful for the mysqld prometheus exporter
|
||||||
userstat = 1;
|
userstat = 1;
|
||||||
|
|
||||||
|
# Memory settings
|
||||||
|
innodb_buffer_pool_size = "${toString innodbBufferPoolMB}M";
|
||||||
|
"large-pages" = 1;
|
||||||
|
|
||||||
# This was needed in order to be able to use all of the old users
|
# This was needed in order to be able to use all of the old users
|
||||||
# during migration from knakelibrak to bicep in Sep. 2023
|
# during migration from knakelibrak to bicep in Sep. 2023
|
||||||
secure_auth = 0;
|
secure_auth = 0;
|
||||||
@@ -47,6 +53,10 @@ in
|
|||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
boot.kernel.hugepages.reservations.mysql = lib.mkIf cfg.enable (
|
||||||
|
builtins.ceil (innodbBufferPoolMB / config.boot.kernel.hugepages.size)
|
||||||
|
);
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = lib.mkIf cfg.enable [ 3306 ];
|
networking.firewall.allowedTCPPorts = lib.mkIf cfg.enable [ 3306 ];
|
||||||
|
|
||||||
systemd.tmpfiles.settings."10-mysql".${dataDir}.d = lib.mkIf cfg.enable {
|
systemd.tmpfiles.settings."10-mysql".${dataDir}.d = lib.mkIf cfg.enable {
|
||||||
@@ -56,13 +66,9 @@ in
|
|||||||
|
|
||||||
systemd.services.mysql = lib.mkIf cfg.enable {
|
systemd.services.mysql = lib.mkIf cfg.enable {
|
||||||
after = [
|
after = [
|
||||||
"sops-install-secrets.service"
|
|
||||||
"systemd-tmpfiles-setup.service"
|
"systemd-tmpfiles-setup.service"
|
||||||
"systemd-tmpfiles-resetup.service"
|
"systemd-tmpfiles-resetup.service"
|
||||||
];
|
];
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
BindPaths = [ "${dataDir}:${cfg.dataDir}" ];
|
BindPaths = [ "${dataDir}:${cfg.dataDir}" ];
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{ config, lib, pkgs, values, ... }:
|
{ config, lib, pkgs, values, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.services.postgresql;
|
cfg = config.services.postgresql;
|
||||||
|
|
||||||
|
sharedBuffersMB = 8192;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -29,7 +31,7 @@ in
|
|||||||
superuser_reserved_connections = 3;
|
superuser_reserved_connections = 3;
|
||||||
|
|
||||||
# Memory Settings
|
# Memory Settings
|
||||||
shared_buffers = "8192 MB";
|
shared_buffers = "${toString sharedBuffersMB} MB";
|
||||||
work_mem = "32 MB";
|
work_mem = "32 MB";
|
||||||
maintenance_work_mem = "420 MB";
|
maintenance_work_mem = "420 MB";
|
||||||
effective_cache_size = "22 GB";
|
effective_cache_size = "22 GB";
|
||||||
@@ -93,6 +95,10 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
boot.kernel.hugepages.reservations.postgresql = lib.mkIf cfg.enable (
|
||||||
|
builtins.ceil (sharedBuffersMB / config.boot.kernel.hugepages.size)
|
||||||
|
);
|
||||||
|
|
||||||
systemd.tmpfiles.settings."10-postgresql"."/data/postgresql".d = lib.mkIf cfg.enable {
|
systemd.tmpfiles.settings."10-postgresql"."/data/postgresql".d = lib.mkIf cfg.enable {
|
||||||
user = config.systemd.services.postgresql.serviceConfig.User;
|
user = config.systemd.services.postgresql.serviceConfig.User;
|
||||||
group = config.systemd.services.postgresql.serviceConfig.Group;
|
group = config.systemd.services.postgresql.serviceConfig.Group;
|
||||||
|
|||||||
@@ -82,15 +82,6 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."render-bluemap-maps" = {
|
systemd.services."render-bluemap-maps" = {
|
||||||
after = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
StateDirectory = [ "bluemap/world" ];
|
StateDirectory = [ "bluemap/world" ];
|
||||||
ExecStartPre = let
|
ExecStartPre = let
|
||||||
|
|||||||
@@ -79,11 +79,6 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.grafana = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts.${cfg.settings.server.domain} = {
|
services.nginx.virtualHosts.${cfg.settings.server.domain} = {
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
|
|||||||
@@ -37,15 +37,9 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.prometheus-postgres-exporter-knakelibrak = {
|
systemd.services.prometheus-postgres-exporter-knakelibrak.serviceConfig = let
|
||||||
after = [ "sops-install-secrets.service" ];
|
localCfg = config.services.prometheus.exporters.postgres;
|
||||||
requires = [ "sops-install-secrets.service" ];
|
in lib.recursiveUpdate config.systemd.services.prometheus-postgres-exporter.serviceConfig {
|
||||||
|
|
||||||
# TODO: is it really necessary to use recursiveUpdate on the entire attrset here?
|
|
||||||
# Why don't we just update the relevant attrs directly?
|
|
||||||
serviceConfig = let
|
|
||||||
localCfg = config.services.prometheus.exporters.postgres;
|
|
||||||
in lib.recursiveUpdate config.systemd.services.prometheus-postgres-exporter.serviceConfig {
|
|
||||||
EnvironmentFile = config.sops.secrets."keys/postgres/postgres_exporter_knakelibrak_env".path;
|
EnvironmentFile = config.sops.secrets."keys/postgres/postgres_exporter_knakelibrak_env".path;
|
||||||
ExecStart = ''
|
ExecStart = ''
|
||||||
${pkgs.prometheus-postgres-exporter}/bin/postgres_exporter \
|
${pkgs.prometheus-postgres-exporter}/bin/postgres_exporter \
|
||||||
@@ -54,5 +48,4 @@ in {
|
|||||||
${lib.concatStringsSep " \\\n " localCfg.extraFlags}
|
${lib.concatStringsSep " \\\n " localCfg.extraFlags}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,14 +154,8 @@ in {
|
|||||||
environment.systemPackages = [ cfg.package ];
|
environment.systemPackages = [ cfg.package ];
|
||||||
|
|
||||||
systemd.services.gitea = lib.mkIf cfg.enable {
|
systemd.services.gitea = lib.mkIf cfg.enable {
|
||||||
after = [
|
wants = [ "redis-gitea.service" ];
|
||||||
"sops-install-secrets.service"
|
after = [ "redis-gitea.service" ];
|
||||||
"redis-gitea.service"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"redis-gitea.service"
|
|
||||||
];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
CPUSchedulingPolicy = "batch";
|
CPUSchedulingPolicy = "batch";
|
||||||
@@ -222,9 +216,6 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.gitea-dump = {
|
systemd.services.gitea-dump = {
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
|
|
||||||
serviceConfig.ExecStart = let
|
serviceConfig.ExecStart = let
|
||||||
args = lib.cli.toCommandLineShellGNU { } {
|
args = lib.cli.toCommandLineShellGNU { } {
|
||||||
type = cfg.dump.type;
|
type = cfg.dump.type;
|
||||||
|
|||||||
@@ -32,11 +32,7 @@ in
|
|||||||
|
|
||||||
systemd.services.gitea-ensure-gnupg-homedir = {
|
systemd.services.gitea-ensure-gnupg-homedir = {
|
||||||
description = "Import gpg key for gitea";
|
description = "Import gpg key for gitea";
|
||||||
|
|
||||||
before = [ "gitea.service" ];
|
before = [ "gitea.service" ];
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
|
|
||||||
environment = { inherit GNUPGHOME; };
|
environment = { inherit GNUPGHOME; };
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|||||||
@@ -12,16 +12,6 @@ in
|
|||||||
systemd.services.gitea-import-users = lib.mkIf cfg.enable {
|
systemd.services.gitea-import-users = lib.mkIf cfg.enable {
|
||||||
enable = true;
|
enable = true;
|
||||||
environment.PASSWD_FILE_PATH = "/run/gitea-import-users/passwd";
|
environment.PASSWD_FILE_PATH = "/run/gitea-import-users/passwd";
|
||||||
after = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"gitea.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"gitea.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStartPre = ''${pkgs.rsync}/bin/rsync -e "${pkgs.openssh}/bin/ssh -o UserKnownHostsFile=$CREDENTIALS_DIRECTORY/ssh-known-hosts -i $CREDENTIALS_DIRECTORY/sshkey" -a pvv@smtp.pvv.ntnu.no:/etc/passwd /run/gitea-import-users/passwd'';
|
ExecStartPre = ''${pkgs.rsync}/bin/rsync -e "${pkgs.openssh}/bin/ssh -o UserKnownHostsFile=$CREDENTIALS_DIRECTORY/ssh-known-hosts -i $CREDENTIALS_DIRECTORY/sshkey" -a pvv@smtp.pvv.ntnu.no:/etc/passwd /run/gitea-import-users/passwd'';
|
||||||
ExecStart = pkgs.writers.writePython3 "gitea-import-users" {
|
ExecStart = pkgs.writers.writePython3 "gitea-import-users" {
|
||||||
|
|||||||
@@ -48,16 +48,7 @@ in
|
|||||||
# %d - secrets directory
|
# %d - secrets directory
|
||||||
systemd.services."gitea-web-secret-provider@" = {
|
systemd.services."gitea-web-secret-provider@" = {
|
||||||
description = "Ensure all repos in %i has an SSH key to push web content";
|
description = "Ensure all repos in %i has an SSH key to push web content";
|
||||||
after = [
|
requires = [ "gitea.service" "network.target" ];
|
||||||
"sops-install-secrets.service"
|
|
||||||
"gitea.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"gitea.service"
|
|
||||||
"network-online.target"
|
|
||||||
];
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Slice = "system-giteaweb.slice";
|
Slice = "system-giteaweb.slice";
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
|||||||
@@ -94,11 +94,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services."openvpn-ov-firewall" = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
allowedTCPPorts = [ 1194 ];
|
allowedTCPPorts = [ 1194 ];
|
||||||
allowedUDPPorts = [ 1194 ];
|
allowedUDPPorts = [ 1194 ];
|
||||||
|
|||||||
@@ -53,10 +53,5 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.drumknotty-screen-session = {
|
|
||||||
after = [ "sops-install-secrets.service" ];
|
|
||||||
requires = [ "sops-install-secrets.service" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.roowho2.settings.rwhod.ignoreUsers = [ "drumknotty" ];
|
services.roowho2.settings.rwhod.ignoreUsers = [ "drumknotty" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,15 +29,9 @@ in
|
|||||||
systemd.services."httpd-passwd-sync" = {
|
systemd.services."httpd-passwd-sync" = {
|
||||||
requiredBy = [ "userweb.target" ];
|
requiredBy = [ "userweb.target" ];
|
||||||
after = [
|
after = [
|
||||||
"network-online.target"
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
"systemd-tmpfiles-setup.service"
|
"systemd-tmpfiles-setup.service"
|
||||||
"systemd-tmpfiles-resetup.service"
|
"systemd-tmpfiles-resetup.service"
|
||||||
];
|
];
|
||||||
requires = [
|
|
||||||
"network-online.target"
|
|
||||||
"sops-install-secrets.service"
|
|
||||||
];
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
Slice = "system-userweb.slice";
|
Slice = "system-userweb.slice";
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.boot.kernel.hugepages;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.boot.kernel.hugepages = {
|
||||||
|
size = lib.mkOption {
|
||||||
|
type = lib.types.enum [ 2 1024 ];
|
||||||
|
default = 2;
|
||||||
|
description = ''
|
||||||
|
Hugepage size in MB.
|
||||||
|
|
||||||
|
You can use this value to calculate the amount of memory you will have available as hugepages.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
reservations = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.ints.unsigned;
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
Number of hugepages each service wants reserved in vm.nr_hugepages,
|
||||||
|
keyed by service name.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
boot.kernelParams = let
|
||||||
|
num = {
|
||||||
|
"2" = "2M";
|
||||||
|
"1024" = "1G";
|
||||||
|
}.${toString cfg.size};
|
||||||
|
in [ "hugepagesz=${num}" ];
|
||||||
|
|
||||||
|
boot.kernel.sysctl."vm.nr_hugepages" =
|
||||||
|
lib.foldl' (a: b: a + b) 0 (lib.attrValues cfg.reservations);
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -159,6 +159,7 @@ in
|
|||||||
description = "Out of Your Element - a Discord bridge for Matrix.";
|
description = "Out of Your Element - a Discord bridge for Matrix.";
|
||||||
|
|
||||||
wants = [
|
wants = [
|
||||||
|
"network-online.target"
|
||||||
"matrix-synapse.service"
|
"matrix-synapse.service"
|
||||||
"conduit.service"
|
"conduit.service"
|
||||||
"dendrite.service"
|
"dendrite.service"
|
||||||
@@ -167,10 +168,7 @@ in
|
|||||||
"matrix-ooye-pre-start.service"
|
"matrix-ooye-pre-start.service"
|
||||||
"network-online.target"
|
"network-online.target"
|
||||||
];
|
];
|
||||||
requires = [
|
requires = [ "matrix-ooye-pre-start.service" ];
|
||||||
"network-online.target"
|
|
||||||
"matrix-ooye-pre-start.service"
|
|
||||||
];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
startLimitIntervalSec = 5;
|
startLimitIntervalSec = 5;
|
||||||
|
|||||||
Reference in New Issue
Block a user