summaryrefslogtreecommitdiffstats
path: root/krebs/3modules/Reaktor.nix
diff options
context:
space:
mode:
authorlassulus <lass@aidsballs.de>2015-09-05 12:17:59 +0200
committerlassulus <lass@aidsballs.de>2015-09-05 12:17:59 +0200
commitf54a0a9ea7fd5a9902a5b38786da42f06d615b5a (patch)
treed7c475b212d8acc35a5dc7d20ec1f2228c664010 /krebs/3modules/Reaktor.nix
parentf3c1727659c59ff638b1adead8e30ee2f79f39de (diff)
parentd6d9956abc60548c755d30e6a5bd13c10abbb181 (diff)
Merge branch 'makefu'
Diffstat (limited to 'krebs/3modules/Reaktor.nix')
-rw-r--r--krebs/3modules/Reaktor.nix132
1 files changed, 132 insertions, 0 deletions
diff --git a/krebs/3modules/Reaktor.nix b/krebs/3modules/Reaktor.nix
new file mode 100644
index 000000000..fce24fa63
--- /dev/null
+++ b/krebs/3modules/Reaktor.nix
@@ -0,0 +1,132 @@
+{ config, pkgs,lib, ... }:
+
+
+let
+ kpkgs = import ../5pkgs { inherit pkgs; inherit lib; };
+
+ inherit (lib)
+ mkIf
+ mkOption
+ types
+ singleton
+ isString
+ optionalString
+ concatStrings
+ escapeShellArg
+ ;
+
+ ReaktorConfig = pkgs.writeText "config.py" ''
+ ${if (isString cfg.overrideConfig ) then ''
+ # Overriden Config
+ ${cfg.overrideConfig}
+ '' else ""}
+ ## Extra Config
+ ${cfg.extraConfig}
+ '';
+ cfg = config.krebs.Reaktor;
+
+ out = {
+ options.krebs.Reaktor = api;
+ config = mkIf cfg.enable imp;
+ };
+
+ api = {
+ enable = mkOption {
+ default = false;
+ description = ''
+ Start Reaktor at system boot
+ '';
+ };
+
+ nickname = mkOption {
+ default = config.krebs.build.host.name + "|r";
+ type = types.string;
+ description = ''
+ The nick name of the irc bot.
+ Defaults to {hostname}|r
+ '';
+ };
+
+
+ overrideConfig = mkOption {
+ default = null;
+ type = types.nullOr types.str;
+ description = ''
+ configuration to be used instead of default ones.
+ Reaktor default cfg can be retrieved via `reaktor get-config`
+ '';
+ };
+ extraConfig = mkOption {
+ default = "";
+ type = types.string;
+ description = ''
+ configuration appended to the default or overridden configuration
+ '';
+ };
+
+ ReaktorPkg = mkOption {
+ default = kpkgs.Reaktor;
+ description = ''
+ the Reaktor pkg to use.
+ '';
+ };
+ debug = mkOption {
+ default = false;
+ description = ''
+ Reaktor debug output
+ '';
+ };
+ };
+
+ imp = {
+ # for reaktor get-config
+ environment.systemPackages = [ cfg.ReaktorPkg ];
+ users.extraUsers = singleton {
+ name = "Reaktor";
+ # uid = config.ids.uids.Reaktor;
+ uid = 2066439104; #genid Reaktor
+ description = "Reaktor user";
+ home = "/var/lib/Reaktor";
+ createHome = true;
+ };
+
+ #users.extraGroups = singleton {
+ # name = "Reaktor";
+ # gid = config.ids.gids.Reaktor;
+ #};
+
+ systemd.services.Reaktor = {
+ path = with pkgs; [
+ utillinux #flock for tell_on-join
+ # git # for nag
+ python # for caps
+ ];
+ description = "Reaktor IRC Bot";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ environment = {
+ GIT_SSL_CAINFO = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
+ REAKTOR_NICKNAME = cfg.nickname;
+ REAKTOR_DEBUG = (if cfg.debug then "True" else "False");
+ };
+ serviceConfig= {
+ ExecStartPre = pkgs.writeScript "Reaktor-init" ''
+ #! /bin/sh
+ ${if (isString cfg.overrideConfig) then
+ ''cp ${ReaktorConfig} /tmp/config.py''
+ else
+ ''(${cfg.ReaktorPkg}/bin/reaktor get-config;cat "${ReaktorConfig}" ) > /tmp/config.py''
+ }
+ '';
+ ExecStart = "${cfg.ReaktorPkg}/bin/reaktor run /tmp/config.py";
+ PrivateTmp = "true";
+ User = "Reaktor";
+ Restart = "on-abort";
+ StartLimitInterval = "1m";
+ StartLimitBurst = "1";
+ };
+ };
+ };
+
+in
+out