about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDoron Behar <doron.behar@gmail.com>2020-07-30 01:37:54 +0300
committerJon <jonringer@users.noreply.github.com>2020-08-15 10:17:06 -0700
commit7ff82bfee69953546246fe6e8d41778fb0d0da01 (patch)
treedf1f189916f4a969995d8ee97446e263ccdb13f0
parentb7ce309e6c6fbad584df85d9fd62c5185153e8f9 (diff)
mailnag: enable to configure plugins
Add an availablePlugins attrset with all plugins available.
Make mailnag's expression accept a "plugins" argument specifying plugins
to install, from `availablePlugins`.
Prevent double wrapping (nor related to plugins).
Install plugins using xorg.lndir.
-rw-r--r--pkgs/applications/networking/mailreaders/mailnag/default.nix133
-rw-r--r--pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix31
-rw-r--r--pkgs/top-level/all-packages.nix4
3 files changed, 116 insertions, 52 deletions
diff --git a/pkgs/applications/networking/mailreaders/mailnag/default.nix b/pkgs/applications/networking/mailreaders/mailnag/default.nix
index 5747da36b34b5..4766939a42446 100644
--- a/pkgs/applications/networking/mailreaders/mailnag/default.nix
+++ b/pkgs/applications/networking/mailreaders/mailnag/default.nix
@@ -1,8 +1,10 @@
-{ stdenv
+{ lib
+, callPackage
 , fetchFromGitHub
 , gettext
+, xorg # for lndir
 , gtk3
-, pythonPackages
+, python3Packages
 , gdk-pixbuf
 , libnotify
 , gst_all_1
@@ -11,57 +13,90 @@
 , gsettings-desktop-schemas
 , glib
 , gobject-introspection
+# Plugins to install
+, plugins ? [ "goa" ]
 }:
 
-pythonPackages.buildPythonApplication rec {
-  pname = "mailnag";
-  version = "2.0.0";
-
-  src = fetchFromGitHub {
-    owner = "pulb";
-    repo = "mailnag";
-    rev = "v${version}";
-    sha256 = "0q97v9i96br22z3h6r2mz79i68ib8m8x42yxky78szfrf8j60i30";
+let
+  availablePlugins = {
+    # More are listed here: https://github.com/pulb/mailnag/#desktop-integration
+    goa = callPackage ./goa-plugin.nix { };
   };
-  preFixup = ''
-    substituteInPlace $out/${pythonPackages.python.sitePackages}/Mailnag/common/dist_cfg.py \
-      --replace "/usr/" $out/
-    for desktop_file in $out/share/applications/*.desktop; do
-      substituteInPlace "$desktop_file" \
-      --replace "/usr/bin" $out/bin
-    done
-  '';
+  # Get the list of plugins the user wants
+  userPlugins = lib.attrVals plugins availablePlugins;
+  # goa plugin requires gio's gnome-online-accounts which requires making sure
+  # mailnag runs with GI_TYPELIB_PATH containing the path to Goa-1.0.typelib.
+  # This is handled best by adding the plugins' deps to buildInputs and let
+  # wrapGAppsHook handle that.
+  pluginsDeps = lib.flatten (lib.catAttrs "buildInputs" userPlugins);
+in
+  python3Packages.buildPythonApplication rec {
+    pname = "mailnag";
+    version = "2.0.0";
 
-  buildInputs = [
-    gtk3
-    gdk-pixbuf
-    glib
-    libnotify
-    gst_all_1.gstreamer
-    gst_all_1.gst-plugins-base
-    gst_all_1.gst-plugins-good
-    gst_all_1.gst-plugins-bad
-    gobject-introspection
-    libsecret
-  ];
+    src = fetchFromGitHub {
+      owner = "pulb";
+      repo = "mailnag";
+      rev = "v${version}";
+      sha256 = "0q97v9i96br22z3h6r2mz79i68ib8m8x42yxky78szfrf8j60i30";
+    };
 
-  nativeBuildInputs = [
-    gettext
-    wrapGAppsHook
-  ];
+    buildInputs = [
+      gtk3
+      gdk-pixbuf
+      glib
+      libnotify
+      gst_all_1.gstreamer
+      gst_all_1.gst-plugins-base
+      gst_all_1.gst-plugins-good
+      gst_all_1.gst-plugins-bad
+      gobject-introspection
+      libsecret
+    ] ++ pluginsDeps;
 
-  propagatedBuildInputs = with pythonPackages; [
-    gsettings-desktop-schemas
-    pygobject3
-    dbus-python
-    pyxdg
-  ];
+    nativeBuildInputs = [
+      gettext
+      wrapGAppsHook
+      # To later add plugins to 
+      xorg.lndir
+    ];
 
-  meta = with stdenv.lib; {
-    description = "An extensible mail notification daemon";
-    homepage = "https://github.com/pulb/mailnag";
-    license = licenses.gpl2;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ doronbehar ];
-  };
-}
+    propagatedBuildInputs = with python3Packages; [
+      gsettings-desktop-schemas
+      pygobject3
+      dbus-python
+      pyxdg
+    ];
+
+    passthru = {
+      inherit availablePlugins;
+    };
+
+    # See https://nixos.org/nixpkgs/manual/#ssec-gnome-common-issues-double-wrapped
+    dontWrapGApps = true;
+
+    preFixup = ''
+      substituteInPlace $out/${python3Packages.python.sitePackages}/Mailnag/common/dist_cfg.py \
+        --replace "/usr/" $out/
+      for desktop_file in $out/share/applications/*.desktop; do
+        substituteInPlace "$desktop_file" \
+        --replace "/usr/bin" $out/bin
+      done
+      makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+    '';
+
+    # Actually install plugins
+    postInstall = ''
+      for plug in ${builtins.toString userPlugins}; do
+        lndir $plug/${python3Packages.python.sitePackages} $out/${python3Packages.python.sitePackages}
+      done
+    '';
+
+    meta = with lib; {
+      description = "An extensible mail notification daemon";
+      homepage = "https://github.com/pulb/mailnag";
+      license = licenses.gpl2;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ doronbehar ];
+    };
+  }
diff --git a/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix b/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix
new file mode 100644
index 0000000000000..b2eccdc134bc8
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, python3Packages
+, gobject-introspection
+, gnome-online-accounts
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "mailnag-goa-plugin";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "pulb";
+    repo = "mailnag-goa-plugin";
+    rev = "v${version}";
+    sha256 = "0bij6cy96nhq7xzslx0fnhmiac629h0x4wgy67k4i4npwqw10680";
+  };
+
+  buildInputs = [
+    gobject-introspection
+    gnome-online-accounts
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Mailnag GNOME Online Accounts plugin.";
+    homepage = "https://github.com/pulb/mailnag-goa-plugin";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index be744c37843c1..394b72380d93c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5206,9 +5206,7 @@ in
 
   mailhog = callPackage ../servers/mail/mailhog {};
 
-  mailnag = callPackage ../applications/networking/mailreaders/mailnag {
-    pythonPackages = python3Packages;
-  };
+  mailnag = callPackage ../applications/networking/mailreaders/mailnag { };
 
   mailsend = callPackage ../tools/networking/mailsend { };