]>
Commit | Line | Data |
---|---|---|
fffbbb56 IB |
1 | { varDir ? "/var/lib/roundcubemail" |
2 | , roundcube_config ? "/etc/roundcube/config.php" | |
34c7b88e | 3 | , stdenv, fetchurl, jre, unzip, lib, callPackage }: |
fffbbb56 IB |
4 | let |
5 | defaultInstall = '' | |
6 | mkdir -p $out | |
7 | cp -R . $out/ | |
8 | cd $out | |
9 | if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then | |
10 | ln -s larry skins/elastic | |
11 | fi | |
12 | ''; | |
13 | buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: | |
14 | stdenv.mkDerivation rec { | |
15 | name = "roundcube-${appName}-${version}"; | |
16 | inherit version; | |
17 | phases = "unpackPhase installPhase"; | |
18 | inherit installPhase; | |
19 | src = fetchurl { inherit url sha256; }; | |
20 | passthru.pluginName = appName; | |
21 | }; | |
34c7b88e IB |
22 | skinNames = []; |
23 | allSkins = lib.attrsets.genAttrs skinNames | |
24 | (name: callPackage (./skins + "/${name}") {}); | |
25 | pluginNames = [ | |
26 | "automatic_addressbook" "carddav" "contextmenu" | |
27 | "contextmenu_folder" "html5_notifier" "ident_switch" | |
28 | "message_highlight" "thunderbird_labels" | |
29 | ]; | |
30 | allPlugins = lib.attrsets.genAttrs pluginNames | |
31 | (name: callPackage (./plugins + "/${name}") { inherit buildPlugin; }); | |
32 | toPassthru = pkg: plugins: skins: { | |
33 | inherit plugins skins allSkins allPlugins; | |
34 | withSkins = withSkins pkg; | |
35 | withPlugins = withPlugins pkg; | |
36 | }; | |
37 | withPlugins = pkg: toPlugins: | |
38 | let | |
39 | plugins = toPlugins allPlugins; | |
40 | toInstallPlugin = n: "ln -s ${n} $out/plugins/${n.pluginName}"; | |
41 | newRoundcube = pkg.overrideAttrs(old: { | |
42 | installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins); | |
43 | passthru = toPassthru newRoundcube (pkg.plugins ++ plugins) pkg.skins; | |
44 | }); | |
45 | in newRoundcube; | |
46 | withSkins = pkg: toSkins: | |
47 | let | |
48 | skins = toSkins allSkins; | |
49 | toInstallSkin = n: "ln -s ${n} $out/skins/${n.skinName}"; | |
50 | newRoundcube = pkg.overrideAttrs(old: { | |
51 | installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallSkin skins); | |
52 | passthru = toPassthru newRoundcube pkg.plugins (pkg.skins ++ skins); | |
53 | }); | |
54 | in newRoundcube; | |
9271611c | 55 | shrinker = fetchurl { |
0c67c584 IB |
56 | url = "https://dl.google.com/closure-compiler/compiler-20200719.zip"; |
57 | sha256 = "0j46y9ack2yq67naca6nfysbmyilwjlkl29dbswidf1lq09yhhj3"; | |
9271611c | 58 | }; |
fffbbb56 | 59 | package = stdenv.mkDerivation rec { |
9271611c | 60 | version = "1.4.4"; |
fffbbb56 IB |
61 | name = "roundcubemail-${version}"; |
62 | src= fetchurl { | |
63 | url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; | |
9271611c | 64 | sha256 = "1my726p0wmsn21nbdsjx02h6hnbh8nidzipzdy0gk0qgda1j729b"; |
fffbbb56 | 65 | }; |
9271611c IB |
66 | patches = [ ./add_all.patch ]; # This patch includes js modification which requires to re-run the jsshrink below |
67 | buildInputs = [ unzip jre ]; | |
fffbbb56 | 68 | buildPhase = '' |
9271611c IB |
69 | mkdir -p /tmp |
70 | unzip -p "${shrinker}" "*.jar" > "/tmp/compiler.jar" | |
71 | ./bin/jsshrink.sh | |
fffbbb56 IB |
72 | sed -i \ |
73 | -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ | |
74 | config/defaults.inc.php | |
75 | sed -i \ | |
76 | -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ | |
77 | config/defaults.inc.php | |
78 | ''; | |
79 | installPhase = '' | |
80 | cp -a . $out | |
81 | ln -s ${roundcube_config} $out/config/config.inc.php | |
82 | ''; | |
34c7b88e | 83 | passthru = toPassthru package [] []; |
fffbbb56 IB |
84 | }; |
85 | in package |