summary refs log tree commit diff
diff options
context:
space:
mode:
authorEdward Tjörnhammar <ed@cflags.cc>2014-07-09 00:43:26 +0200
committerMichael Raskin <7c6f434c@mail.ru>2014-08-23 12:30:45 +0400
commit1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7 (patch)
tree0fe09ee5d7a06603c83c9a55e97218bc85cc6cc0
parentc0da615c02e2433063e6a249f38eb7d8b84470ae (diff)
downloadnixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar.gz
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar.bz2
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar.lz
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar.xz
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.tar.zst
nixpkgs-1615be91ef522cfc9aaeb4eb37b8d3519cd08ea7.zip
Add mlmmj package and nixos module.
-rw-r--r--nixos/modules/misc/ids.nix2
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/mail/mlmmj.nix128
-rw-r--r--pkgs/servers/mail/mlmmj/default.nix21
-rw-r--r--pkgs/top-level/all-packages.nix2
5 files changed, 154 insertions, 0 deletions
diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix
index 9f509ba8cb9..b49837efd50 100644
--- a/nixos/modules/misc/ids.nix
+++ b/nixos/modules/misc/ids.nix
@@ -142,6 +142,7 @@
       gdm = 132;
       dhcpd = 133;
       siproxd = 134;
+      mlmmj = 135;
 
       # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
 
@@ -258,6 +259,7 @@
       gdm = 132;
       tss = 133;
       siproxd = 134;
+      mlmmj = 135;
 
       # When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
 
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 1fc2959bd8a..c25110fc5b1 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -142,6 +142,7 @@
   ./services/mail/dovecot.nix
   ./services/mail/freepops.nix
   ./services/mail/mail.nix
+  ./services/mail/mlmmj.nix
   ./services/mail/opensmtpd.nix
   ./services/mail/postfix.nix
   ./services/mail/spamassassin.nix
diff --git a/nixos/modules/services/mail/mlmmj.nix b/nixos/modules/services/mail/mlmmj.nix
new file mode 100644
index 00000000000..637974f05cd
--- /dev/null
+++ b/nixos/modules/services/mail/mlmmj.nix
@@ -0,0 +1,128 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+  cfg = config.services.mlmmj;
+  stateDir = "/var/lib/mlmmj";
+  spoolDir = "/var/spool/mlmmj";
+  listDir = domain: list: "${spoolDir}/${domain}/${list}";
+  listCtl = domain: list: "${listDir domain list}/control";
+  transport = domain: list: "${domain}--${list}@local.list.mlmmj mlmmj:${domain}/${list}";
+  virtual = domain: list: "${list}@${domain} ${domain}--${list}@local.list.mlmmj";
+  alias = domain: list: "${list}: \"|${pkgs.mlmmj}/mlmmj-receive -L ${listDir domain list}/\"";
+  subjectPrefix = list: "[${list}]";
+  listAddress = domain: list: "${list}@${domain}";
+  customHeaders = list: domain: [ "List-Id: ${list}" "Reply-To: ${list}@${domain}" ];
+  footer = domain: list: "To unsubscribe send a mail to ${list}+unsubscribe@${domain}";
+  createList = d: l: ''
+    ${pkgs.coreutils}/bin/mkdir -p ${listCtl d l}
+    echo ${listAddress d l} > ${listCtl d l}/listadress
+    echo "${lib.concatStringsSep "\n" (customHeaders d l)}" > ${listCtl d l}/customheaders
+    echo ${footer d l} > ${listCtl d l}/footer
+    echo ${subjectPrefix l} > ${listCtl d l}/prefix
+  '';
+in
+
+{
+
+  ###### interface
+
+  options = {
+
+    services.mlmmj = {
+
+      enable = mkOption {
+        type = types.bool;
+        default = false;
+        description = "Enable mlmmj";
+      };
+
+      user = mkOption {
+        type = types.str;
+        default = "mlmmj";
+        description = "mailinglist local user";
+      };
+
+      group = mkOption {
+        type = types.str;
+        default = "mlmmj";
+        description = "mailinglist local group";
+      };
+
+      listDomain = mkOption {
+        type = types.str;
+        default = "localhost";
+        description = "Set the mailing list domain";
+      };
+
+      mailLists = mkOption {
+        type = types.listOf types.str;
+        default = [];
+        description = "The collection of hosted maillists";
+      };
+
+    };
+
+  };
+
+  ###### implementation
+
+  config = mkIf cfg.enable {
+
+    users.extraUsers = singleton {
+      name = cfg.user;
+      description = "mlmmj user";
+      home = stateDir;
+      createHome = true;
+      uid = config.ids.uids.mlmmj;
+      group = cfg.group;
+      useDefaultShell = true;
+    };
+
+    users.extraGroups = singleton {
+      name = cfg.group;
+      gid = config.ids.gids.mlmmj;
+    };
+
+    services.postfix = {
+      enable = true;
+      recipientDelimiter= "+";
+      extraMasterConf = ''
+        mlmmj unix - n n - - pipe flags=ORhu user=mlmmj argv=${pkgs.mlmmj}/bin/mlmmj-recieve -F -L ${spoolDir}/$nextHop
+      '';
+
+      extraAliases = concatMapStrings (alias cfg.listDomain) cfg.mailLists;
+
+      extraConfig = ''
+        transport = hash:${stateDir}/transports
+        virtual = hash:${stateDir}/virtuals
+      '';
+    };
+
+    environment.systemPackages = [ pkgs.mlmmj ];
+
+    system.activationScripts.mlmmj = ''
+          ${pkgs.coreutils}/bin/mkdir -p ${stateDir} ${spoolDir}/${cfg.listDomain}
+          ${pkgs.coreutils}/bin/chown -R ${cfg.user}:${cfg.group} ${spoolDir}
+          ${lib.concatMapStrings (createList cfg.listDomain) cfg.mailLists}
+          echo ${lib.concatMapStrings (virtual cfg.listDomain) cfg.mailLists} > ${stateDir}/virtuals
+          echo ${cfg.listDomain} mailman: > ${stateDir}/transports
+          echo ${lib.concatMapStrings (transport cfg.listDomain) cfg.mailLists} >> ${stateDir}/transports
+    '';
+
+    systemd.services."mlmmj-maintd" = {
+      description = "mlmmj maintenance daemon";
+      wantedBy = [ "multi-user.target" ];
+
+      serviceConfig = {
+        User = cfg.user;
+        Group = cfg.group;
+        ExecStart = "${pkgs.mlmmj}/bin/mlmmj-maintd -F -d ${spoolDir}/${cfg.listDomain}";
+      };
+    };
+
+  };
+
+}
diff --git a/pkgs/servers/mail/mlmmj/default.nix b/pkgs/servers/mail/mlmmj/default.nix
new file mode 100644
index 00000000000..2ad6dedbf69
--- /dev/null
+++ b/pkgs/servers/mail/mlmmj/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, pkgconfig }:
+
+stdenv.mkDerivation rec {
+
+  name = "mlmmj-${version}";
+  version = "1.2.18.1";
+
+  src = fetchurl {
+    url = "http://mlmmj.org/releases/${name}.tar.gz";
+    sha256 = "336b6b20a6d7f0dcdc7445ecea0fe4bdacee241f624fcc710b4341780f35e383";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://mlmmj.org;
+    description = "Mailing List Management Made Joyful";
+    maintainers = [ maintainers.edwtjo ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+
+}
\ No newline at end of file
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 8f5ce8da047..f353314674f 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6853,6 +6853,8 @@ let
 
   miniHttpd = callPackage ../servers/http/mini-httpd {};
 
+  mlmmj = callPackage ../servers/mail/mlmmj { };
+
   myserver = callPackage ../servers/http/myserver { };
 
   nginx = callPackage ../servers/http/nginx {