From 7ff82bfee69953546246fe6e8d41778fb0d0da01 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 30 Jul 2020 01:37:54 +0300 Subject: [PATCH] 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. --- .../mailreaders/mailnag/default.nix | 133 +++++++++++------- .../mailreaders/mailnag/goa-plugin.nix | 31 ++++ pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 116 insertions(+), 52 deletions(-) create mode 100644 pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix diff --git a/pkgs/applications/networking/mailreaders/mailnag/default.nix b/pkgs/applications/networking/mailreaders/mailnag/default.nix index 5747da36b34b..4766939a4244 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 000000000000..b2eccdc134bc --- /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 be744c37843c..394b72380d93 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 { };