diff --git a/options/mailman3/core.nix b/options/mailman3/core.nix
deleted file mode 100644
index d7185ba..0000000
--- a/options/mailman3/core.nix
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- stdenv,
- buildPythonPackage,
- fetchgit,
- aiosmtpd,
- alembic,
- atpublic,
- click,
- dnspython,
- falcon,
- flufl_bounce,
- flufl_i18n,
- flufl_lock,
- importlib-resources,
- lazr_config,
- passlib,
- requests,
- sqlalchemy,
- zope_component,
- zope_configuration,
- zope_event,
- zope_interface,
- # optional database dependencies
- pymysql,
- psycopg2,
-}:
-buildPythonPackage rec {
- name = "mailman3_core-${version}";
- version = "3.2.2";
- src = fetchgit {
- url = "https://gitlab.com/mailman/mailman.git";
- rev = version;
- sha256 = "0p1z2i2x6f0g05lx5mymiiw2ij1bsycvbxwabb52nisdddcfhhzp";
- };
-
- propagatedBuildInputs = [
- aiosmtpd
- alembic
- atpublic
- click
- dnspython
- falcon
- flufl_bounce
- flufl_i18n
- flufl_lock
- importlib-resources
- lazr_config
- passlib
- requests
- sqlalchemy
- zope_component
- zope_configuration
- zope_event
- zope_interface
- pymysql
- psycopg2
- ];
-
- doCheck = false;
-
- # mailman imports master and runner
- # -> only wrap $out/bin/mailman
- dontWrapPythonPrograms = true;
- postFixup = ''
- wrapProgram $out/bin/mailman --prefix PYTHONPATH : "$PYTHONPATH"
- '';
-
- meta = with stdenv.lib; {
- description = "GNU Mailman, a mailing list management system";
- license = licenses.gpl3;
- maintainers = with maintainers; [ ];
- homepage = "http://list.org/";
- };
-}
diff --git a/options/mailman3/extraPackages/aiosmtpd.nix b/options/mailman3/extraPackages/aiosmtpd.nix
deleted file mode 100644
index 273edae..0000000
--- a/options/mailman3/extraPackages/aiosmtpd.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- atpublic,
-}:
-buildPythonPackage rec {
- pname = "aiosmtpd";
- version = "1.2";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "1xdfk741pjmz1cm8dsi4n5vq4517i175rm94696m3f7kcgk7xsmp";
- };
- doCheck = false;
- propagatedBuildInputs = [ atpublic ];
-}
diff --git a/options/mailman3/extraPackages/atpublic.nix b/options/mailman3/extraPackages/atpublic.nix
deleted file mode 100644
index a23a8a2..0000000
--- a/options/mailman3/extraPackages/atpublic.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
-}:
-buildPythonPackage rec {
- pname = "atpublic";
- version = "1.0";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "0i3sbxkdlbb4560rrlmwwd5y4ps7k73lp4d8wnmd7ag9k426gjkx";
- };
- doCheck = false;
- # propagatedBuildInputs = [];
-}
diff --git a/options/mailman3/extraPackages/flufl_bounce.nix b/options/mailman3/extraPackages/flufl_bounce.nix
deleted file mode 100644
index 1a05bb2..0000000
--- a/options/mailman3/extraPackages/flufl_bounce.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- atpublic,
- zope_interface,
-}:
-buildPythonPackage rec {
- name = "${pname}-${version}";
- pname = "flufl.bounce";
- version = "3.0";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "0k5kjqa3x6gvwwxyzb2vwi1g1i6asm1zw5fivylxz3d583y4kid2";
- };
-
- propagatedBuildInputs = [
- atpublic
- zope_interface
- ];
-
- doCheck = false;
-}
diff --git a/options/mailman3/extraPackages/flufl_i18n.nix b/options/mailman3/extraPackages/flufl_i18n.nix
deleted file mode 100644
index 99d5ae6..0000000
--- a/options/mailman3/extraPackages/flufl_i18n.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- atpublic,
-}:
-buildPythonPackage rec {
- name = "${pname}-${version}";
- pname = "flufl.i18n";
- version = "2.0.2";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "1csgds59nx0ann9v2alqr69lakp1cnc1ikmbgn96l6n23js7c2ah";
- };
-
- propagatedBuildInputs = [ atpublic ];
-
- doCheck = false;
-}
diff --git a/options/mailman3/extraPackages/flufl_lock.nix b/options/mailman3/extraPackages/flufl_lock.nix
deleted file mode 100644
index 70cb023..0000000
--- a/options/mailman3/extraPackages/flufl_lock.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- atpublic,
-}:
-buildPythonPackage rec {
- name = "${pname}-${version}";
- pname = "flufl.lock";
- version = "3.2";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "0nzzd6l30ff6cwsrlrb94xzfja4wkyrqv3ydc6cz0hdbr766mmm8";
- };
-
- propagatedBuildInputs = [ atpublic ];
-
- doCheck = false;
-}
diff --git a/options/mailman3/extraPackages/lazr_config.nix b/options/mailman3/extraPackages/lazr_config.nix
deleted file mode 100644
index cd8d431..0000000
--- a/options/mailman3/extraPackages/lazr_config.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- lazr_delegates,
-}:
-buildPythonPackage rec {
- name = "${pname}-${version}";
- pname = "lazr.config";
- version = "2.2.1";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "1s7pyvlq06qjrkaw9r6nc290lb095n25ybzgavvy51ygpxkgqxwn";
- };
-
- propagatedBuildInputs = [ lazr_delegates ];
-
- doCheck = false;
-}
diff --git a/options/mailman3/extraPackages/lazr_delegates.nix b/options/mailman3/extraPackages/lazr_delegates.nix
deleted file mode 100644
index b658322..0000000
--- a/options/mailman3/extraPackages/lazr_delegates.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- stdenv,
- lib,
- fetchPypi,
- buildPythonPackage,
- nose,
- zope_interface,
-}:
-buildPythonPackage rec {
- name = "${pname}-${version}";
- pname = "lazr.delegates";
- version = "2.0.4";
-
- src = fetchPypi {
- inherit pname version;
- sha256 = "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx";
- };
-
- propagatedBuildInputs = [
- nose
- zope_interface
- ];
-
- doCheck = false;
-}
diff --git a/options/mailman3/options.nix b/options/mailman3/options.nix
deleted file mode 100644
index dcae3b6..0000000
--- a/options/mailman3/options.nix
+++ /dev/null
@@ -1,444 +0,0 @@
-{
- pkgs,
- lib,
- config,
- ...
-}:
-with lib;
-let
- mailman3 = import ./release.nix { };
- cfg = config.services.mailman3;
- usePostgresql = cfg.database.type == "postgresql";
- useSqlite = cfg.database.type == "sqlite3";
- useMysql = cfg.database.type == "mysql";
- usePostfix = cfg.mta.type == "postfix";
- configFile_postfix = pkgs.writeText "postfix.cfg" ''
- [postfix]
- transport_file_type: hash
- postmap_command: ${pkgs.postfix}/bin/postmap
- '';
- configFile = pkgs.writeText "mailman.cfg" ''
- # This File was automatically generated by the mailman3 nixos submodule.
- # Do not manually edit this file.
-
- [mailman]
- site_owner: ${cfg.site_owner}
- layout: custom
-
- [paths.custom]
- archive_dir: ${cfg.paths.archive_dir}
- bin_dir: ${cfg.paths.bin_dir}
- cache_dir: ${cfg.paths.cache_dir}
- data_dir: ${cfg.paths.data_dir}
- etc_dir: ${cfg.paths.etc_dir}
- lock_dir: ${cfg.paths.lock_dir}
- log_dir: ${cfg.paths.log_dir}
- messages_dir: ${cfg.paths.messages_dir}
- template_dir: ${cfg.paths.template_dir}
- var_dir: ${cfg.paths.var_dir}
- lock_file: ${cfg.paths.lock_file}
- pid_file: ${cfg.paths.pid_file}
-
- # The Database Documentation can be found here:
- # https://mailman.readthedocs.io/en/latest/src/mailman/docs/database.html
- # https://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls
- [database]
- ${optionalString useSqlite ''
- [database]
- url: sqlite:///${cfg.database.socket}
- ''}
- ${optionalString usePostgresql ''
- class: mailman.database.postgresql.PostgreSQLDatabase
- url: postgres://${cfg.database.user}:#dbpass#@${database.host}:${toString cfg.database.port}/${cfg.database.name}
- ''}
- ${optionalString useMysql ''
- class: mailman.database.mysql.MySQLDatabase
- url: mysql+pymysql://${cfg.database.user}:#dbpass#@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.name}?charset=utf8&use_unicode=1
- ''}
-
- [mta]
- incoming: ${cfg.mta.incoming}
- outgoing: ${cfg.mta.outgoing}
- lmtp_host: ${cfg.mta.lmtp_host}
- lmtp_port: ${toString cfg.mta.lmtp_port}
- smtp_host: ${cfg.mta.smtp_host}
- smtp_port: ${toString cfg.mta.smtp_port}
- smtp_user: ${cfg.mta.smtp_user}
- smtp_pass: #smtppass#
- # One of smtp/smtps/starttls, specifies the protocol Mailman will use when
- # connecting. Typically will correspond to smtp_port: 25 -> smtp, 465 -> smtps,
- # 587 -> starttls.
- smtp_secure_mode: smtp
- configuration: ${configFile_postfix}
-
- [ARC]
- enabled: no
-
- ${cfg.extraConfig}
- '';
-in
-{
- options.services.mailman3 = {
- enable = mkOption {
- type = types.bool;
- default = false;
- example = true;
- description = ''
- Wether to enable mailman3 mailing list management system (core).
- '';
- };
-
- site_owner = mkOption {
- type = types.str;
- default = "changeme@example.com";
- description = ''
- mailman3 site owner address.
- '';
- };
-
- user = mkOption {
- type = types.str;
- default = "mailman3";
- description = ''
- User account under which mailman runs.
- '';
- };
-
- database = {
- type = mkOption {
- type = types.enum [
- "sqlite3"
- "mysql"
- "postgres"
- ];
- default = "sqlite3";
- example = "mysql";
- description = ''
- Database type to use.
- '';
- };
-
- host = mkOption {
- type = types.str;
- default = "172.0.0.1";
- description = ''
- Database host adress.
- '';
- };
-
- port = mkOption {
- type = types.nullOr types.int;
- default = null;
- description = ''
-
- '';
- };
-
- name = mkOption {
- type = types.str;
- default = "mailman3";
- description = ''
- Database name.
- '';
- };
-
- user = mkOption {
- type = types.str;
- default = "mailman3";
- description = ''
- Database user.
- '';
- };
-
- password = mkOption {
- type = types.str;
- default = "";
- description = ''
- The password corresponding to .
- Warning: this is stored in cleartext in the Nix store!
- Use instead.
- '';
- };
-
- passwordFile = mkOption {
- type = types.nullOr types.path;
- default = null;
- example = "/run/keys/mailman3-dbpassword";
- description = ''
- A file containing the password corresponding to
- .
- '';
- };
-
- socket = mkOption {
- type = types.nullOr types.path;
- default = null;
- example = "/run/mysqld/mysqld.sock";
- description = "Path to the unix socket file to use for authentication.";
- };
- };
-
- paths = {
- archive_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/archives";
- description = ''
-
- '';
- };
-
- bin_dir = mkOption {
- type = types.str;
- default = "${mailman3.core}/bin";
- description = ''
-
- '';
- };
-
- cache_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/cache";
- description = ''
-
- '';
- };
-
- data_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/data";
- description = ''
-
- '';
- };
-
- etc_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/etc";
- description = ''
-
- '';
- };
-
- lock_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/locks";
- description = ''
-
- '';
- };
-
- log_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/logs";
- description = ''
-
- '';
- };
-
- messages_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/messages";
- description = ''
-
- '';
- };
-
- template_dir = mkOption {
- type = types.str;
- default = "${cfg.paths.var_dir}/templates";
- description = ''
-
- '';
- };
-
- var_dir = mkOption {
- type = types.str;
- default = "/var/lib/mailman3";
- description = ''
-
- '';
- };
-
- lock_file = mkOption {
- type = types.path;
- default = "${cfg.paths.lock_dir}/master.lck";
- description = ''
-
- '';
- };
-
- pid_file = mkOption {
- type = types.path;
- default = "${cfg.paths.var_dir}/master.pid";
- description = ''
-
- '';
- };
- };
-
- mta = {
- # TODO: add Sentmail and qmail
- type = mkOption {
- type = types.enum [
- "postfix"
- "exim4"
- ];
- default = "postfix";
- example = "exim4";
- description = ''
- Database type to use.
- '';
- };
- incoming = mkOption {
- type = types.str;
- default = "mailman.mta.${cfg.mta.type}.LMTP";
- description = ''
-
- '';
- };
- outgoing = mkOption {
- type = types.str;
- default = "mailman.mta.deliver.deliver";
- description = ''
-
- '';
- };
- lmtp_host = mkOption {
- type = types.str;
- default = "mail.example.com";
- description = ''
-
- '';
- };
- lmtp_port = mkOption {
- type = types.int;
- default = 8024;
- description = ''
-
- '';
- };
- smtp_host = mkOption {
- type = types.str;
- default = "mail.example.com";
- description = ''
-
- '';
- };
- smtp_port = mkOption {
- type = types.int;
- default = 25;
- description = ''
-
- '';
- };
- smtp_user = mkOption {
- type = types.str;
- default = "";
- description = ''
-
- '';
- };
- smtp_pass = mkOption {
- type = types.str;
- default = "";
- description = ''
-
- '';
- };
- smtp_passFile = mkOption {
- type = types.str;
- default = "";
- description = ''
-
- '';
- };
- };
-
- extraConfig = mkOption {
- type = types.str;
- default = "";
- example = ''
- [devmode]
- enabled: yes
- recipient: your.address@your.domain
- '';
- description = ''
- Configuration lines appended to the generated mailman3 configuration file.
- '';
- };
- };
-
- config = mkIf cfg.enable {
- users = mkIf (cfg.user == "mailman3") {
- users.mailman3 = {
- description = "Mailman3 Service";
- home = cfg.paths.var_dir;
- createHome = true;
- useDefaultShell = true;
- packages = [ mailman3.core ];
- };
- };
-
- services.postfix.recipientDelimiter = mkIf usePostfix (mkDefault "+");
- services.postfix.mapFiles."transport_maps" = mkIf usePostfix (
- mkDefault "${cfg.paths.data_dir}/postfix_lmtp"
- );
- services.postfix.mapFiles."local_recipient_maps" = mkIf usePostfix (
- mkDefault "${cfg.paths.data_dir}/postfix_lmtp"
- );
- services.postfix.mapFiles."relay_domains" = mkIf usePostfix (
- mkDefault "${cfg.paths.data_dir}/postfix_domains"
- );
-
- warnings = optional (cfg.database.password != "") ''
- config.services.mailman3.database.password will be stored as plaintext
- in the Nix store. Use database.passwordFile instead.'';
-
- # Create database passwordFile default when password is configured.
- services.mailman3.database.passwordFile = mkDefault (
- toString (
- pkgs.writeTextFile {
- name = "mailman3-database-password";
- text = cfg.database.password;
- }
- )
- );
-
- systemd.services.mailman3 = {
- description = "GNU Mailing List Manager";
- after = [
- "network.target"
- ] ++ lib.optional usePostgresql "postgresql.service" ++ lib.optional useMysql "mysql.service";
- wantedBy = [ "multi-user.target" ];
-
- preStart =
- let
- dbpass = fileContents cfg.database.passwordFile;
- smtppass = fileContents cfg.mta.smtp_passFile;
- in
- ''
- mkdir -p ${cfg.paths.etc_dir}
- cp ${configFile} ${cfg.paths.etc_dir}/mailman.cfg
- ${optionalString (useMysql || usePostgresql) ''
- sed -e "s/#dbpass#/${dbpass}/g" -e "s/#smtppass#/${smtppass}/g" -i ${cfg.paths.etc_dir}/mailman.cfg
- ''}
- chmod 640 ${cfg.paths.etc_dir}/mailman.cfg
- '';
-
- serviceConfig = {
- Type = "forking";
- User = cfg.user;
- WorkingDirectory = cfg.paths.var_dir;
- ExecStart = "${mailman3.core}/bin/mailman start -f";
- ExecReload = "${mailman3.core}/bin/mailman restart";
- ExecStop = "${mailman3.core}/bin/mailman stop";
- };
-
- environment = {
- USER = cfg.user;
- HOME = cfg.paths.var_dir;
- MAILMAN_CONFIG_FILE = "${cfg.paths.etc_dir}/mailman.cfg";
- };
- };
- };
-}
diff --git a/options/mailman3/release.nix b/options/mailman3/release.nix
deleted file mode 100644
index 14b1ed8..0000000
--- a/options/mailman3/release.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- pkgs ? import { },
- python3Packages ? pkgs.python3Packages,
-}:
-let
- mailman3 = {
- core = python3Packages.callPackage ./core.nix (
- with deps;
- {
- inherit
- aiosmtpd
- atpublic
- flufl_bounce
- flufl_i18n
- flufl_lock
- lazr_config
- ;
- }
- );
- };
- deps = rec {
- aiosmtpd = python3Packages.callPackage ./extraPackages/aiosmtpd.nix {
- inherit atpublic;
- };
- atpublic = python3Packages.callPackage ./extraPackages/atpublic.nix { };
- flufl_bounce = python3Packages.callPackage ./extraPackages/flufl_bounce.nix {
- inherit atpublic;
- };
- flufl_i18n = python3Packages.callPackage ./extraPackages/flufl_i18n.nix {
- inherit atpublic;
- };
- flufl_lock = python3Packages.callPackage ./extraPackages/flufl_lock.nix {
- inherit atpublic;
- };
- lazr_config = python3Packages.callPackage ./extraPackages/lazr_config.nix {
- inherit lazr_delegates;
- };
- lazr_delegates = python3Packages.callPackage ./extraPackages/lazr_delegates.nix { };
- };
-in
-mailman3