trivionomicon: soju: add soju to the trivionomicon #5
3 changed files with 76 additions and 0 deletions
13
modules/soju/default.nix
Normal file
13
modules/soju/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
doctrine,
|
||||
...
|
||||
}:
|
||||
doctrine.lib.mkModule {
|
||||
inherit config;
|
||||
name = "soju";
|
||||
sys = ./sys.nix;
|
||||
options = ./options.nix;
|
||||
}
|
16
modules/soju/options.nix
Normal file
16
modules/soju/options.nix
Normal file
|
@ -0,0 +1,16 @@
|
|||
{lib, ...}:
|
||||
with lib.types; {
|
||||
sys = {
|
||||
fullyQualifiedDomain = lib.mkOption {
|
||||
type = str;
|
||||
example = "soju.trivionomicon.com";
|
||||
description = "fully qualified domain name to be used by soju";
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
type = port;
|
||||
default = 6697;
|
||||
description = "port to be used by soju";
|
||||
};
|
||||
};
|
||||
}
|
47
modules/soju/sys.nix
Normal file
47
modules/soju/sys.nix
Normal file
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
cfg,
|
||||
doctrine,
|
||||
...
|
||||
}:
|
||||
with lib; {
|
||||
security.acme.certs."${cfg.fullyQualifiedDomain}" = {
|
||||
reloadServices = ["soju.service"];
|
||||
group = "soju";
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [cfg.port];
|
||||
|
||||
services.soju = let
|
||||
sojuCertDir = config.security.acme.certs."${cfg.fullyQualifiedDomain}".directory;
|
||||
in {
|
||||
enable = true;
|
||||
hostName = "${cfg.fullyQualifiedDomain}";
|
||||
listen = ["ircs://[::]:${toString cfg.port}"];
|
||||
tlsCertificate = "${sojuCertDir}/fullchain.pem";
|
||||
tlsCertificateKey = "${sojuCertDir}/key.pem";
|
||||
};
|
||||
|
||||
systemd.services.soju = {
|
||||
after = ["acme-${cfg.fullyQualifiedDomain}.service"];
|
||||
serviceConfig = {
|
||||
DynamicUser = mkForce false; # fuck dynamic users
|
||||
User = "soju";
|
||||
Group = "soju";
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = "read-only";
|
||||
PrivateTmp = true;
|
||||
RemoveIPC = true;
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
users.soju = {
|
||||
isSystemUser = true;
|
||||
group = "soju";
|
||||
};
|
||||
groups.soju = {};
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue