]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - pkgs/webapps/roundcubemail/default.nix
Use new withPlugin system
[perso/Immae/Config/Nix.git] / pkgs / webapps / roundcubemail / default.nix
index 4f288b8882389bd4ed0344b06a226d3ef00f9b57..2b22b299e2da29bbf728657cef6990f75a1e2d92 100644 (file)
@@ -1,6 +1,6 @@
 { varDir ? "/var/lib/roundcubemail"
 , roundcube_config ? "/etc/roundcube/config.php"
-, stdenv, fetchurl, jre, unzip }:
+, stdenv, fetchurl, jre, unzip, lib, callPackage }:
 let
   defaultInstall = ''
     mkdir -p $out
@@ -19,20 +19,39 @@ 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";
@@ -61,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