{ varDir ? "/var/lib/roundcubemail" , roundcube_config ? "/etc/roundcube/config.php" , stdenv, fetchurl, jre, unzip, lib, callPackage }: let defaultInstall = '' mkdir -p $out cp -R . $out/ cd $out if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then ln -s larry skins/elastic fi ''; buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: stdenv.mkDerivation rec { name = "roundcube-${appName}-${version}"; inherit version; phases = "unpackPhase installPhase"; inherit installPhase; src = fetchurl { inherit url sha256; }; passthru.pluginName = appName; }; 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 = "https://dl.google.com/closure-compiler/compiler-20200719.zip"; sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3"; }; package = stdenv.mkDerivation rec { version = "1.4.4"; name = "roundcubemail-${version}"; src= fetchurl { url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; 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 sed -i \ -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ config/defaults.inc.php ''; installPhase = '' cp -a . $out ln -s ${roundcube_config} $out/config/config.inc.php ''; passthru = toPassthru package [] []; }; in package