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