forked from M-Labs/it-infra
94 lines
2.6 KiB
Nix
94 lines
2.6 KiB
Nix
|
{ config, pkgs, lib, ... }:
|
||
|
with lib;
|
||
|
let
|
||
|
notifico = (pkgs.callPackage ./pkg.nix {})
|
||
|
.overrideAttrs (attrs: {
|
||
|
buildInputs = attrs.buildInputs ++ [ pkgs.makeWrapper ];
|
||
|
# Extend the module path so that local_config.py can be found
|
||
|
postInstall = ''
|
||
|
${attrs.postInstall}
|
||
|
|
||
|
wrapProgram $out/bin/notifico \
|
||
|
--set PYTHONPATH "$${PYTHONPATH}:${cfg.dbDir}"
|
||
|
'';
|
||
|
});
|
||
|
cfg = config.services.notifico;
|
||
|
in
|
||
|
|
||
|
{
|
||
|
options.services.notifico = {
|
||
|
enable = mkOption {
|
||
|
type = types.bool;
|
||
|
default = false;
|
||
|
description = "Enable the commit notification service";
|
||
|
};
|
||
|
enableLocalRedis = mkOption {
|
||
|
type = types.bool;
|
||
|
default = true;
|
||
|
description = "Enable a local Redis server";
|
||
|
};
|
||
|
dbDir = mkOption {
|
||
|
type = types.str;
|
||
|
default = "/var/db/notifico";
|
||
|
description = "Home directory and location of the database file";
|
||
|
};
|
||
|
config = mkOption {
|
||
|
description = "Path to local_config.py, https://github.com/notifico/notifico/raw/master/notifico/config.py";
|
||
|
type = types.str;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable {
|
||
|
users.users.notifico = {
|
||
|
group = "notifico";
|
||
|
home = cfg.dbDir;
|
||
|
createHome = true;
|
||
|
};
|
||
|
users.groups.notifico = {};
|
||
|
|
||
|
services.redis = mkIf cfg.enableLocalRedis {
|
||
|
enable = true;
|
||
|
bind = "127.0.0.1";
|
||
|
};
|
||
|
|
||
|
systemd.services =
|
||
|
let
|
||
|
User = "notifico";
|
||
|
Group = "notifico";
|
||
|
WorkingDirectory = "${cfg.dbDir}";
|
||
|
ExecStartPre = [
|
||
|
"${pkgs.coreutils}/bin/rm -f local_config.pyc"
|
||
|
"${pkgs.coreutils}/bin/ln -sf ${cfg.config} local_config.py"
|
||
|
];
|
||
|
|
||
|
notifico-init = {
|
||
|
description = "Notifico initialization";
|
||
|
serviceConfig = {
|
||
|
inherit User Group WorkingDirectory ExecStartPre;
|
||
|
Type = "oneshot";
|
||
|
ExecStart = "${notifico}/bin/notifico init";
|
||
|
};
|
||
|
};
|
||
|
notificoService = component: {
|
||
|
description = "Notifico ${component}";
|
||
|
wantedBy = [ "multi-user.target" ];
|
||
|
after = [ "network.target" "notifico-init.service" ];
|
||
|
requires = [ "notifico-init.service" ];
|
||
|
serviceConfig = {
|
||
|
inherit User Group WorkingDirectory ExecStartPre;
|
||
|
Type = "simple";
|
||
|
ExecStart = "${notifico}/bin/notifico ${component}";
|
||
|
|
||
|
Restart = "always";
|
||
|
RestartSec = "5sec";
|
||
|
};
|
||
|
};
|
||
|
in {
|
||
|
inherit notifico-init;
|
||
|
notifico-www = notificoService "www";
|
||
|
notifico-worker = notificoService "worker";
|
||
|
notifico-bots = notificoService "bots";
|
||
|
};
|
||
|
};
|
||
|
}
|