{ varDir ? "/var/lib/roundcubemail" , roundcube_config ? "/etc/roundcube/config.php" , stdenv, fetchurl }: 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; }; 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); }; }); package = stdenv.mkDerivation rec { version = "1.4-rc1"; name = "roundcubemail-${version}"; src= fetchurl { url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; sha256 = "0p18wffwi2prh6vxhx1bc69qd1vwybggm8gvg3shahfdknxci9i4"; }; buildPhase = '' 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 = { plugins = []; skins = []; inherit withPlugins buildPlugin; }; }; in package