+++ /dev/null
-{ 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