allow creating multiple conduwuit instances
Some checks failed
Build and Push to Cachix / Push to Binary Cache (aarch64) (push) Has been cancelled
Build and Push to Cachix / Push to Binary Cache (X86-64) (push) Has been cancelled

This commit is contained in:
Adithya 2024-11-27 23:28:07 +05:30
parent 8e618b0d68
commit 819c467414
Signed by: adtya
GPG key ID: B8857BFBA2C47B9C

View file

@ -3,11 +3,8 @@ let
cfg = config.recipes.conduwuit;
format = pkgs.formats.toml { };
configFile = format.generate "conduwuit.toml" cfg.settings;
in
{
meta.maintainers = with lib.maintainers; [ adtya ];
options.recipes.conduwuit = {
conduitSubmodule = { name, ... }: {
options = {
enable = lib.mkEnableOption "conduwuit";
extraEnvironment = lib.mkOption {
@ -77,19 +74,21 @@ in
'';
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.conduwuit = {
description = "Conduwuit Matrix Server";
systemdService = name: serviceDefinition:
let configFile = format.generate "conduwuit-${name}.toml" serviceDefinition.settings; in {
enable = serviceDefinition.enable;
description = "Conduwuit Matrix Server (${name})";
documentation = [ "https://conduwuit.puppyirl.gay" ];
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
environment = cfg.extraEnvironment;
environment = serviceDefinition.extraEnvironment;
serviceConfig = {
Type = "notify";
DynamicUser = true;
EnvironmentFile = cfg.environmentFiles;
EnvironmentFile = serviceDefinition.environmentFiles;
AmbientCapabilities = [ ];
CapabilityBoundingSet = [ ];
DevicePolicy = "closed";
@ -134,8 +133,8 @@ in
"~@ipc"
];
SystemCallErrorNumber = "EPERM";
StateDirectory = "conduwuit";
RuntimeDirectory = "conduwuit";
StateDirectory = "conduwuit-${name}";
RuntimeDirectory = "conduwuit-${name}";
RuntimeDirectoryMode = "0750";
ExecStart = "${cfg.package}/bin/conduit --config ${configFile}";
Restart = "on-failure";
@ -143,5 +142,18 @@ in
StartLimitBurst = 5;
};
};
mkSystemdService = (name: serviceDefinition: lib.nameValuePair "conduit-${name}" (systemdService name serviceDefinition));
in
{
meta.maintainers = with lib.maintainers; [ adtya ];
options.recipes.conduwuit.instances = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule conduitSubmodule);
default = { };
defaultText = lib.literalExpression { };
description = "Configuration for a conduit instance";
};
config = lib.mkIf (cfg.instances != { }) {
systemd.services = lib.mappAttrs' mkSystemdService cfg.instances;
};
}