summaryrefslogtreecommitdiff
path: root/pkgs/msmtp/default.nix
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-07-31 20:15:44 -0600
committerAlejandro Soto <alejandro@34project.org>2024-08-02 14:15:44 -0600
commit951025ec921a83d9ade36252b2fdc6da9f469c03 (patch)
treecbf5f4e701b170bb33f22e8ab2a7be047bdca38f /pkgs/msmtp/default.nix
parent0e909bbfae0f5b83a378f0c6af9772ab55b154b9 (diff)
home/mail: patch msmtp to support YKCS12
Diffstat (limited to 'pkgs/msmtp/default.nix')
-rw-r--r--pkgs/msmtp/default.nix140
1 files changed, 140 insertions, 0 deletions
diff --git a/pkgs/msmtp/default.nix b/pkgs/msmtp/default.nix
new file mode 100644
index 0000000..18036f5
--- /dev/null
+++ b/pkgs/msmtp/default.nix
@@ -0,0 +1,140 @@
+{ resholve
+, stdenv
+, symlinkJoin
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, bash
+, coreutils
+, gnugrep
+, gnutls
+, gsasl
+, libidn2
+, netcat-gnu
+, texinfo
+, which
+, Security
+, withKeyring ? true
+, libsecret
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+, withScripts ? true
+}:
+
+let
+ inherit (lib) getBin getExe optionals;
+
+ version = "1.8.22";
+
+ src = fetchFromGitHub {
+ owner = "marlam";
+ repo = "msmtp-mirror";
+ rev = "msmtp-${version}";
+ hash = "sha256-Jt/uvGBrYYr6ua6LVPiP0nuRiIkxBJASdgHBNHivzxQ=";
+ };
+
+ meta = with lib; {
+ description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
+ homepage = "https://marlam.de/msmtp/";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ peterhoeg ];
+ platforms = platforms.unix;
+ mainProgram = "msmtp";
+ };
+
+ binaries = stdenv.mkDerivation {
+ pname = "msmtp-binaries";
+ inherit version src meta;
+
+ patches = [
+ ./0001-msmtp-run-passwordeval-if-tls_key_file-is-provided-e.patch
+ ];
+
+ configureFlags = [ "--sysconfdir=/etc" "--with-libgsasl" ]
+ ++ optionals stdenv.isDarwin [ "--with-macosx-keyring" ];
+
+ buildInputs = [ gnutls gsasl libidn2 ]
+ ++ optionals stdenv.isDarwin [ Security ]
+ ++ optionals withKeyring [ libsecret ];
+
+ nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
+
+ enableParallelBuilding = true;
+
+ postInstall = ''
+ install -Dm444 -t $out/share/doc/msmtp doc/*.example
+ ln -s msmtp $out/bin/sendmail
+ '';
+ };
+
+ scripts = resholve.mkDerivation {
+ pname = "msmtp-scripts";
+ inherit version src meta;
+
+ patches = [ ./paths.patch ];
+
+ postPatch = ''
+ substituteInPlace scripts/msmtpq/msmtpq \
+ --replace @journal@ ${if withSystemd then "Y" else "N"}
+ '';
+
+ dontConfigure = true;
+ dontBuild = true;
+
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm555 -t $out/bin scripts/msmtpq/msmtp*
+ install -Dm444 -t $out/share/doc/msmtp/scripts scripts/msmtpq/README*
+ install -Dm444 -t $out/share/doc/msmtp/scripts scripts/{find_alias,msmtpqueue,set_sendmail}/*
+
+ if grep --quiet -E '@.+@' $out/bin/*; then
+ echo "Unsubstituted variables found. Aborting!"
+ grep -E '@.+@' $out/bin/*
+ exit 1
+ fi
+
+ runHook postInstall
+ '';
+
+ solutions = {
+ msmtpq = {
+ scripts = [ "bin/msmtpq" ];
+ interpreter = getExe bash;
+ inputs = [
+ binaries
+ coreutils
+ gnugrep
+ netcat-gnu
+ which
+ ] ++ optionals withSystemd [ systemd ];
+ execer = [
+ "cannot:${getBin binaries}/bin/msmtp"
+ "cannot:${getBin netcat-gnu}/bin/nc"
+ ] ++ optionals withSystemd [
+ "cannot:${getBin systemd}/bin/systemd-cat"
+ ];
+ fix."$MSMTP" = [ "msmtp" ];
+ fake.external = [ "ping" ]
+ ++ optionals (!withSystemd) [ "systemd-cat" ];
+ };
+
+ msmtp-queue = {
+ scripts = [ "bin/msmtp-queue" ];
+ interpreter = getExe bash;
+ inputs = [ "${placeholder "out"}/bin" ];
+ execer = [ "cannot:${placeholder "out"}/bin/msmtpq" ];
+ };
+ };
+ };
+
+in
+if withScripts then
+ symlinkJoin
+ {
+ name = "msmtp-${version}";
+ inherit version meta;
+ paths = [ binaries scripts ];
+ passthru = { inherit binaries scripts; };
+ } else binaries