signal-irc-bridge/module.nix

88 lines
2.3 KiB
Nix
Raw Permalink Normal View History

2024-07-19 19:06:13 +02:00
{
pkgs,
config,
lib,
...
}:
2024-05-22 12:34:33 +02:00
let
cfg = config.services.signal-irc-bridge;
commonServiceOptions = {
User = "signal-irc";
Group = "signal-irc";
2024-05-22 12:34:33 +02:00
StateDirectory = "signal-cli";
RuntimeDirectory = "signal-cli";
2024-07-19 19:06:13 +02:00
PrivateDevices = true;
PrivateTmp = true;
ProtectControlGroups = true;
ProtectKernelTunables = true;
RestrictSUIDSGID = true;
2024-05-22 12:34:33 +02:00
2024-07-19 19:06:13 +02:00
ProtectSystem = "strict";
ProtectKernelLogs = true;
ProtectProc = "invisible";
PrivateUsers = true;
ProtectHome = true;
UMask = "0027";
RuntimeDirectoryMode = "0750";
StateDirectoryMode = "0750";
2024-05-22 12:34:33 +02:00
};
2024-07-19 19:06:13 +02:00
in
{
2024-05-22 12:34:33 +02:00
options = {
services.signal-irc-bridge = {
enable = lib.mkEnableOption "signal-irc bridge";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.signal-irc-bridge;
};
configFile = lib.mkOption {
type = lib.types.path;
description = "Path to the toml config file";
};
};
};
config = {
2024-07-19 19:06:13 +02:00
nixpkgs.overlays = [ (import ./overlay.nix) ];
2024-05-22 12:34:33 +02:00
systemd.services = lib.mkIf cfg.enable {
signal-irc-bridge = {
2024-05-22 17:09:01 +02:00
script = ''
CONFIG_PATH=$CREDENTIALS_DIRECTORY/config ${lib.getExe cfg.package}
'';
2024-05-22 12:34:33 +02:00
unitConfig = {
BindsTo = [ "signal-irc-bridge-signal-cli.service" ];
After = [ "signal-irc-bridge-signal-cli.service" ];
};
serviceConfig = commonServiceOptions // {
Restart = "always";
2024-07-19 19:06:13 +02:00
RestartSec = "5s";
2024-05-22 17:09:01 +02:00
LoadCredential = [ "config:${cfg.configFile}" ];
2024-05-22 17:09:01 +02:00
# Change state/runtime dirs because it deletes the socket else
2024-05-22 12:34:33 +02:00
StateDirectory = "signal-irc";
RuntimeDirectory = "signal-irc";
};
};
signal-irc-bridge-signal-cli = {
serviceConfig = commonServiceOptions // {
ExecStart = "${lib.getExe pkgs.signal-cli} --config \"\${STATE_DIRECTORY}\"/signal-cli-config/ daemon --socket \"\${RUNTIME_DIRECTORY}\"/socket --receive-mode=manual";
Restart = "always";
2024-07-19 19:06:13 +02:00
RestartSec = "5s";
2024-05-22 12:34:33 +02:00
};
};
};
2024-07-19 19:06:13 +02:00
environment.systemPackages = lib.mkIf cfg.enable [ pkgs.signal-cli ];
users = lib.mkIf cfg.enable {
users.signal-irc = {
isSystemUser = true;
group = "signal-irc";
};
2024-07-19 19:06:13 +02:00
groups.signal-irc = { };
};
2024-05-22 12:34:33 +02:00
};
}