]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - pkgs/webapps/roundcubemail/default.nix
Add Patrick Fodella’s website
[perso/Immae/Config/Nix.git] / pkgs / webapps / roundcubemail / default.nix
index ba85f3720700cfee90536d7ec942f671fc71cccc..2b22b299e2da29bbf728657cef6990f75a1e2d92 100644 (file)
@@ -1,6 +1,6 @@
 { varDir ? "/var/lib/roundcubemail"
 , roundcube_config ? "/etc/roundcube/config.php"
-, stdenv, fetchurl }:
+, stdenv, fetchurl, jre, unzip, lib, callPackage }:
 let
   defaultInstall = ''
     mkdir -p $out
@@ -19,28 +19,56 @@ let
       src = fetchurl { inherit url sha256; };
       passthru.pluginName = appName;
     };
-  withPlugins = plugins: skins: package.overrideAttrs(old: {
-    name = "${old.name}${if builtins.length skins > 0 then "-with-skins" else ""}${if builtins.length plugins > 0 then "-with-plugins" else ""}";
-    installPhase = old.installPhase +
-      builtins.concatStringsSep "\n" (
-        map (value: "ln -s ${value} $out/plugins/${value.pluginName}") plugins
-      ) +
-      builtins.concatStringsSep "\n" (
-        map (value: "ln -s ${value} $out/skins/${value.skinName}") skins
-      );
-    passthru = old.passthru // {
-      inherit plugins skins;
-      withPlugins = morePlugins: moreSkins: old.withPlugins (morePlugins ++ plugins) (morePlugins ++ skins);
-    };
-  });
+  skinNames = [];
+  allSkins = lib.attrsets.genAttrs skinNames
+    (name: callPackage (./skins + "/${name}") {});
+  pluginNames = [
+    "automatic_addressbook" "carddav" "contextmenu"
+    "contextmenu_folder" "html5_notifier" "ident_switch"
+    "message_highlight" "thunderbird_labels"
+  ];
+  allPlugins = lib.attrsets.genAttrs pluginNames
+    (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; });
+  toPassthru = pkg: plugins: skins: {
+    inherit plugins skins allSkins allPlugins;
+    withSkins = withSkins pkg;
+    withPlugins = withPlugins pkg;
+  };
+  withPlugins = pkg: toPlugins:
+    let
+      plugins = toPlugins allPlugins;
+      toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}";
+      newRoundcube = pkg.overrideAttrs(old: {
+        installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
+        passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins;
+      });
+    in newRoundcube;
+  withSkins = pkg: toSkins:
+    let
+      skins = toSkins allSkins;
+      toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}";
+      newRoundcube = pkg.overrideAttrs(old: {
+        installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins);
+        passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins);
+      });
+    in newRoundcube;
+  shrinker = fetchurl {
+    url = "http://dl.google.com/closure-compiler/compiler-latest.zip";
+    sha256 = "0naf3kflhlkm17ls1x7mgddd3b01f8yzbbbdjqwy5m12jmkzl2d5";
+  };
   package = stdenv.mkDerivation rec {
-    version = "1.4-rc1";
+    version = "1.4.4";
     name = "roundcubemail-${version}";
     src= fetchurl {
       url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz";
-      sha256 = "0p18wffwi2prh6vxhx1bc69qd1vwybggm8gvg3shahfdknxci9i4";
+      sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b";
     };
+    patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below
+    buildInputs = [ unzip jre ];
     buildPhase = ''
+      mkdir -p /tmp
+      unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar"
+      ./bin/jsshrink.sh
       sed -i \
         -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \
         config/defaults.inc.php
@@ -52,10 +80,6 @@ let
       cp -a . $out
       ln -s ${roundcube_config} $out/config/config.inc.php
     '';
-    passthru = {
-      plugins = [];
-      skins = [];
-      inherit withPlugins buildPlugin;
-    };
+    passthru = toPassthru package [] [];
   };
 in package