summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Girol <symphorien@users.noreply.github.com>2021-01-21 19:42:45 +0000
committerGitHub <noreply@github.com>2021-01-21 19:42:45 +0000
commit7ed3d2df76cd1f637c6163858ac0e1db9cdf7b00 (patch)
tree9a2f2f4aa90ee85db401809e848fb13b042c8bf6
parentafa23b8a4be2e536cb6f905833a76f1434dffc65 (diff)
parentf45f22d51901eb85a6bd4628681bcbf2732655af (diff)
Merge pull request #103135 from symphorien/pr/92775
Evolution ews: wrap evolution and evolution data server, fix nixos module.
-rw-r--r--nixos/modules/services/desktops/gnome3/evolution-data-server.nix54
-rw-r--r--pkgs/applications/misc/almanah/default.nix3
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix4
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/default.nix (renamed from pkgs/desktops/gnome-3/apps/evolution/default.nix)10
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch21
-rw-r--r--pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix41
-rw-r--r--pkgs/desktops/gnome-3/default.nix2
-rw-r--r--pkgs/top-level/all-packages.nix2
8 files changed, 108 insertions, 29 deletions
diff --git a/nixos/modules/services/desktops/gnome3/evolution-data-server.nix b/nixos/modules/services/desktops/gnome3/evolution-data-server.nix
index bd62d16f61ce..749f12b86bc8 100644
--- a/nixos/modules/services/desktops/gnome3/evolution-data-server.nix
+++ b/nixos/modules/services/desktops/gnome3/evolution-data-server.nix
@@ -15,31 +15,45 @@ with lib;
options = {
services.gnome3.evolution-data-server = {
-
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Whether to enable Evolution Data Server, a collection of services for
- storing addressbooks and calendars.
- '';
+ enable = mkEnableOption "Evolution Data Server, a collection of services for storing addressbooks and calendars.";
+ plugins = mkOption {
+ type = types.listOf types.package;
+ default = [ ];
+ description = "Plugins for Evolution Data Server.";
};
-
};
+ programs.evolution = {
+ enable = mkEnableOption "Evolution, a Personal information management application that provides integrated mail, calendaring and address book functionality.";
+ plugins = mkOption {
+ type = types.listOf types.package;
+ default = [ ];
+ example = literalExample "[ pkgs.evolution-ews ]";
+ description = "Plugins for Evolution.";
+ };
+ };
};
-
###### implementation
- config = mkIf config.services.gnome3.evolution-data-server.enable {
-
- environment.systemPackages = [ pkgs.gnome3.evolution-data-server ];
-
- services.dbus.packages = [ pkgs.gnome3.evolution-data-server ];
-
- systemd.packages = [ pkgs.gnome3.evolution-data-server ];
-
- };
-
+ config =
+ let
+ bundle = pkgs.evolutionWithPlugins.override { inherit (config.services.gnome3.evolution-data-server) plugins; };
+ in
+ mkMerge [
+ (mkIf config.services.gnome3.evolution-data-server.enable {
+ environment.systemPackages = [ bundle ];
+
+ services.dbus.packages = [ bundle ];
+
+ systemd.packages = [ bundle ];
+ })
+ (mkIf config.programs.evolution.enable {
+ services.gnome3.evolution-data-server = {
+ enable = true;
+ plugins = [ pkgs.evolution ] ++ config.programs.evolution.plugins;
+ };
+ services.gnome3.gnome-keyring.enable = true;
+ })
+ ];
}
diff --git a/pkgs/applications/misc/almanah/default.nix b/pkgs/applications/misc/almanah/default.nix
index 3a5c3756320a..b8029b6229d2 100644
--- a/pkgs/applications/misc/almanah/default.nix
+++ b/pkgs/applications/misc/almanah/default.nix
@@ -4,6 +4,7 @@
, cairo
, desktop-file-utils
, evolution-data-server
+, evolution
, gcr
, gettext
, glib
@@ -48,7 +49,7 @@ stdenv.mkDerivation rec {
evolution-data-server
gcr
glib
- gnome3.evolution
+ evolution
gpgme
gtk3
gtksourceview3
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix b/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
index fbd6d1d924cd..8deb7e84a2c6 100644
--- a/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, gnome3, cmake, gettext, intltool, pkg-config, evolution-data-server
+{ lib, stdenv, fetchurl, gnome3, cmake, gettext, intltool, pkg-config, evolution-data-server, evolution
, sqlite, gtk3, webkitgtk, libgdata, libmspack }:
stdenv.mkDerivation rec {
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ cmake gettext intltool pkg-config ];
buildInputs = [
- evolution-data-server gnome3.evolution
+ evolution-data-server evolution
sqlite libgdata
gtk3 webkitgtk
libmspack
diff --git a/pkgs/desktops/gnome-3/apps/evolution/default.nix b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
index 4bede93ebb70..c9fdbf3a9133 100644
--- a/pkgs/desktops/gnome-3/apps/evolution/default.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
@@ -12,8 +12,6 @@
, libnotify
, gspell
, evolution-data-server
-, adwaita-icon-theme
-, gnome-desktop
, libgdata
, libgweather
, glib-networking
@@ -61,7 +59,7 @@ stdenv.mkDerivation rec {
];
buildInputs = [
- adwaita-icon-theme
+ gnome3.adwaita-icon-theme
bogofilter
db
evolution-data-server
@@ -69,7 +67,7 @@ stdenv.mkDerivation rec {
gdk-pixbuf
glib
glib-networking
- gnome-desktop
+ gnome3.gnome-desktop
gsettings-desktop-schemas
gst_all_1.gst-plugins-base
gst_all_1.gstreamer
@@ -115,6 +113,10 @@ stdenv.mkDerivation rec {
doCheck = true;
+ patches = [
+ ./moduledir_from_env.patch
+ ];
+
passthru = {
updateScript = gnome3.updateScript {
packageName = "evolution";
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch b/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch
new file mode 100644
index 000000000000..2a5edfb9a5a1
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/moduledir_from_env.patch
@@ -0,0 +1,21 @@
+diff --git a/src/shell/main.c b/src/shell/main.c
+index 5d089225ca..030908d684 100644
+--- a/src/shell/main.c
++++ b/src/shell/main.c
+@@ -407,7 +407,15 @@ create_default_shell (void)
+ }
+
+ /* Load all shared library modules. */
+- module_types = e_module_load_all_in_directory (EVOLUTION_MODULEDIR);
++ const gchar *modules_directory = EVOLUTION_MODULEDIR;
++ const gchar *modules_directory_env;
++
++ modules_directory_env = g_getenv ("EVOLUTION_MODULEDIR");
++ if (modules_directory_env &&
++ g_file_test (modules_directory_env, G_FILE_TEST_IS_DIR))
++ modules_directory = g_strdup (modules_directory_env);
++
++ module_types = e_module_load_all_in_directory (modules_directory);
+ g_list_free_full (module_types, (GDestroyNotify) g_type_module_unuse);
+
+ flags = G_APPLICATION_HANDLES_OPEN |
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix b/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
new file mode 100644
index 000000000000..050082c6f933
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
@@ -0,0 +1,41 @@
+{ lib, makeWrapper, symlinkJoin, gnome3, plugins }:
+
+symlinkJoin {
+ name = "evolution-with-plugins";
+ paths = [ gnome3.evolution-data-server ] ++ plugins;
+
+ buildInputs = [ makeWrapper ];
+
+ postBuild = ''
+ for i in $out/bin/* $out/libexec/**; do
+ if [ ! -d $i ]; then
+ echo wrapping $i
+ wrapProgram $i \
+ --set LD_LIBRARY_PATH "$out/lib" \
+ --set EDS_ADDRESS_BOOK_MODULES "$out/lib/evolution-data-server/addressbook-backends/" \
+ --set EDS_CALENDAR_MODULES "$out/lib/evolution-data-server/calendar-backends/" \
+ --set EDS_CAMEL_PROVIDER_DIR "$out/lib/evolution-data-server/camel-providers/" \
+ --set EDS_REGISTRY_MODULES "$out/lib/evolution-data-server/registry-modules/" \
+ --set EVOLUTION_MODULEDIR "$out/lib/evolution/modules"
+ fi
+ done
+
+ fixSymlink () {
+ local link=$1
+ local target=$(readlink $link);
+ local newtarget=$(sed "s@/nix/store/[^/]*/@$out/@" <<< "$target")
+ if [[ $target != $newtarget ]] && [[ -d $newtarget ]]; then
+ echo fixing link to point to $newtarget instead of $target
+ rm $link
+ ln -s $newtarget $link
+ fi
+ }
+
+ fixSymlink $out/share/dbus-1/service
+ fixSymlink $out/lib/systemd/user
+ for i in $out/share/dbus-1/services/*.service $out/lib/systemd/user/*.service; do
+ echo fixing service file $i to point to $out
+ sed -i "s@/nix/store/[^/]*/@$out/@" $i
+ done
+ '';
+}
diff --git a/pkgs/desktops/gnome-3/default.nix b/pkgs/desktops/gnome-3/default.nix
index 2bc825d81490..c4e203913bea 100644
--- a/pkgs/desktops/gnome-3/default.nix
+++ b/pkgs/desktops/gnome-3/default.nix
@@ -158,8 +158,6 @@ lib.makeScope pkgs.newScope (self: with self; {
cheese = callPackage ./apps/cheese { };
- evolution = callPackage ./apps/evolution { };
-
file-roller = callPackage ./apps/file-roller { };
gedit = callPackage ./apps/gedit { };
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index dd61a9eb7bfa..7d13ca561c2a 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -21688,6 +21688,8 @@ in
inherit (gnome3) evince;
evolution-data-server = gnome3.evolution-data-server;
evolution-ews = callPackage ../applications/networking/mailreaders/evolution/evolution-ews { };
+ evolution = callPackage ../applications/networking/mailreaders/evolution/evolution { };
+ evolutionWithPlugins = callPackage ../applications/networking/mailreaders/evolution/evolution/wrapper.nix { plugins = [ evolution evolution-ews ]; };
keepass = callPackage ../applications/misc/keepass { };