summaryrefslogtreecommitdiffstats
path: root/krebs/3modules
diff options
context:
space:
mode:
Diffstat (limited to 'krebs/3modules')
-rw-r--r--krebs/3modules/default.nix1
-rw-r--r--krebs/3modules/ergo.nix136
2 files changed, 137 insertions, 0 deletions
diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix
index e75afad1d..8866e91ae 100644
--- a/krebs/3modules/default.nix
+++ b/krebs/3modules/default.nix
@@ -20,6 +20,7 @@ let
./ci.nix
./current.nix
./dns.nix
+ ./ergo.nix
./exim.nix
./exim-retiolum.nix
./exim-smarthost.nix
diff --git a/krebs/3modules/ergo.nix b/krebs/3modules/ergo.nix
new file mode 100644
index 000000000..14f85c4d7
--- /dev/null
+++ b/krebs/3modules/ergo.nix
@@ -0,0 +1,136 @@
+{ config, lib, pkgs, ... }:
+
+let
+ inherit (lib) mkEnableOption mkIf mkOption types;
+ inherit (pkgs) coreutils ergo;
+ cfg = config.krebs.ergo;
+
+ configFile = pkgs.writeText "ergo.conf" (builtins.toJSON cfg.config);
+in
+
+{
+
+ ###### interface
+
+ options = {
+
+ krebs.ergo = {
+
+ enable = mkEnableOption "Ergo IRC daemon";
+
+ config = mkOption {
+ type = (pkgs.formats.json {}).type;
+ description = ''
+ Ergo IRC daemon configuration file.
+ '';
+ default = {
+ network = {
+ name = "krebstest";
+ };
+ server = {
+ name = "${config.networking.hostName}.r";
+ listeners = {
+ ":6667" = {};
+ };
+ casemapping = "permissive";
+ enforce-utf = true;
+ lookup-hostnames = false;
+ ip-cloaking = {
+ enabled = false;
+ };
+ forward-confirm-hostnames = false;
+ check-ident = false;
+ relaymsg = {
+ enabled = false;
+ };
+ max-sendq = "1M";
+ ip-limits = {
+ count = false;
+ throttle = false;
+ };
+ };
+ datastore = {
+ path = "${cfg.statedir}/ircd.db";
+ };
+ accounts = {
+ authentication-enabled = true;
+ registration = {
+ enabled = true;
+ email-verification = {
+ enabled = false;
+ };
+ };
+ };
+ channels = {
+ default-modes = "+nt";
+ };
+ limits = {
+ nicklen = 32;
+ identlen = 20;
+ channellen = 64;
+ awaylen = 390;
+ kicklen = 390;
+ topiclen = 390;
+ };
+ };
+ };
+
+ statedir = mkOption {
+ type = types.path;
+ default = "/var/lib/ergo";
+ description = ''
+ Location of the state directory of ergo.
+ '';
+ };
+
+ user = mkOption {
+ type = types.str;
+ default = "ergo";
+ description = ''
+ Ergo IRC daemon user.
+ '';
+ };
+
+ group = mkOption {
+ type = types.str;
+ default = "ergo";
+ description = ''
+ Ergo IRC daemon group.
+ '';
+ };
+
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf cfg.enable ({
+ users.users.${cfg.user} = {
+ description = "Ergo IRC daemon user";
+ uid = config.ids.uids.ircd;
+ group = cfg.group;
+ };
+
+ users.groups.${cfg.group} = {
+ gid = config.ids.gids.ircd;
+ };
+
+ systemd.tmpfiles.rules = [
+ "d ${cfg.statedir} - ${cfg.user} ${cfg.group} - -"
+ ];
+
+ systemd.services.ergo = {
+ description = "Ergo IRC daemon";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ ExecStartPre = "${ergo}/bin/ergo initdb --conf ${configFile}";
+ ExecStart = "${ergo}/bin/ergo run --conf ${configFile}";
+ Group = cfg.group;
+ User = cfg.user;
+ };
+ };
+
+ });
+}