aboutsummaryrefslogblamecommitdiff
path: root/flakes/mypackages/pkgs/webapps/roundcubemail/default.nix
blob: f83e61b39acbb2dcacff4d3519128f4da8e8c1ea (plain) (tree)
1
2
3

                                                
                                                            

















                                                                                 
































                                                                                                              
                                     
                      


                                                                                                              
                                                                     
      




                                                                                                       
                   
                                                          
                       










                                                                 
                                        

          
{ varDir ? "/var/lib/roundcubemail"
, roundcube_config ? "/etc/roundcube/config.php"
, stdenv, fetchurl, which, nodePackages, 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;
  package = stdenv.mkDerivation rec {
    version = "1.6.8";
    name = "roundcubemail-${version}";
    src= fetchurl {
      url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz";
      sha256 = "sha256-hGi+AgSnNMV0re9L4BV4x9xPq5wv40ADvzQaK9IO/So=";
    };
    patches = [
      ./add_all.patch # This patch includes js modification which requires to re-run the jsshrink below
      ./md5.patch
    ];
    buildInputs = [ which nodePackages.uglify-js ];
    buildPhase = ''
      sed -i -e "s/uglify-js/uglifyjs/g" ./bin/jsshrink.sh
      ./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