diff options
author | lassulus <lass@aidsballs.de> | 2015-09-05 12:17:59 +0200 |
---|---|---|
committer | lassulus <lass@aidsballs.de> | 2015-09-05 12:17:59 +0200 |
commit | f54a0a9ea7fd5a9902a5b38786da42f06d615b5a (patch) | |
tree | d7c475b212d8acc35a5dc7d20ec1f2228c664010 /krebs/3modules/Reaktor.nix | |
parent | f3c1727659c59ff638b1adead8e30ee2f79f39de (diff) | |
parent | d6d9956abc60548c755d30e6a5bd13c10abbb181 (diff) |
Merge branch 'makefu'
Diffstat (limited to 'krebs/3modules/Reaktor.nix')
-rw-r--r-- | krebs/3modules/Reaktor.nix | 132 |
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 |