-{ lib, env, writeText, stdenv, fetchurl, fetchedGithub }:
+{ lib, env, writeText, stdenv, fetchurl, fetchedGithub, phpPackages, apacheHttpd }:
let
roundcubemail = let
- plugins = {};
+ 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; };
+ };
+ plugins = {
+ carddav = buildPlugin rec {
+ appName = "carddav";
+ version = "3.0.3";
+ url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2";
+ sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal";
+ };
+ contextmenu = buildPlugin rec {
+ appName = "contextmenu";
+ version = "2.3";
+ url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz";
+ sha256 = "1rb8n821ylfniiiccfskc534vd6rczhk3g82455ks3m09q6l8hif";
+ };
+ contextmenu_folder = buildPlugin rec {
+ appName = "contextmenu_folder";
+ version = "1.3.3";
+ url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz";
+ sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57";
+ };
+ automatic_addressbook = buildPlugin rec {
+ appName = "automatic_addressbook";
+ version = "0.4.3";
+ url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz";
+ sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc";
+ };
+ message_highlight = buildPlugin rec {
+ appName = "message_highlight";
+ version = "4.4";
+ url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz";
+ sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j";
+ };
+ thunderbird_labels = buildPlugin rec {
+ appName = "thunderbird_labels";
+ version = "v1.3.2";
+ url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz";
+ sha256 = "1q4x30w66m02v3lw2n8020g0158rmyfzs6gydfk89pa1hs28k9bg";
+ };
+ html5_notifier = buildPlugin rec {
+ appName = "html5_notifier";
+ version = "v0.6.2";
+ url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz";
+ sha256 = "0s1wq9ira4bcd8jvhn93nhxiqzpp92i0za2kw37kf7ksyhr0xslq";
+ };
+ ident_switch = buildPlugin rec {
+ appName = "ident_switch";
+ version = "4.0.1";
+ url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz";
+ sha256 = "1zyy40lfq2kn7hkghbl8lgp18fb634zr4fxmmxvb1wqyvqdpdpyk";
+ };
+ };
skins = {};
in rec {
varDir = "/var/lib/roundcubemail";
deps = [ "wrappers" ];
text = ''
install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
- ${varDir}/cache
+ ${varDir}/cache ${varDir}/logs
install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions
'';
};
- config = writeText "config.php" ''
- <?php
- $config['db_dsnw'] = '${env.psql_url}';
- $config['default_host'] = 'ssl://mail.immae.eu';
- $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false));
- $config['smtp_server'] = 'tls://mail.immae.eu';
+ keys = [{
+ dest = "webapps/tools-roundcube";
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ <?php
+ $config['db_dsnw'] = '${env.psql_url}';
+ $config['default_host'] = 'ssl://mail.immae.eu';
+ $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false));
+ $config['smtp_server'] = 'tls://mail.immae.eu';
+ $config['smtp_port'] = '25';
+ $config['managesieve_host'] = 'mail.immae.eu';
+ $config['managesieve_port'] = '4190';
+ $config['managesieve_usetls'] = true;
+ $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false));
- $config['imap_cache'] = 'db';
- $config['messages_cache'] = 'db';
+ $config['imap_cache'] = 'db';
+ $config['messages_cache'] = 'db';
- $config['support_url'] = ''';
+ $config['support_url'] = ''';
- $config['des_key'] = '${env.secret}';
+ $config['des_key'] = '${env.secret}';
- $config['plugins'] = array();
+ $config['skin'] = 'elastic';
+ $config['plugins'] = array(
+ 'attachment_reminder',
+ 'emoticons',
+ 'filesystem_attachments',
+ 'hide_blockquote',
+ 'identicon',
+ 'identity_select',
+ 'jqueryui',
+ 'managesieve',
+ 'newmail_notifier',
+ 'vcard_attachments',
+ 'zipdownload',
- $config['language'] = 'fr_FR';
+ 'automatic_addressbook',
+ 'message_highlight',
+ 'carddav',
+ // Ne marche pas ?: 'ident_switch',
+ // Ne marche pas ?: 'thunderbird_labels',
+ );
- $config['drafts_mbox'] = 'Mail/Drafts';
- $config['junk_mbox'] = 'Mail/Spam';
- $config['sent_mbox'] = 'Mail/sent';
- $config['trash_mbox'] = ''';
- $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', ''');
- $config['draft_autosave'] = 60;
- $config['enable_installer'] = false;
- $config['log_driver'] = 'stdout';
- $config['temp_dir'] = '${varDir}/cache';
- $config['debug_level'] = 1;
+ $config['language'] = 'fr_FR';
+
+ $config['drafts_mbox'] = 'Mail/Drafts';
+ $config['junk_mbox'] = 'Mail/Spam';
+ $config['sent_mbox'] = 'Mail/sent';
+ $config['trash_mbox'] = ''';
+ $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', ''');
+ $config['draft_autosave'] = 60;
+ $config['enable_installer'] = false;
+ $config['log_driver'] = 'file';
+ $config['temp_dir'] = '${varDir}/cache';
+ $config['mime_types'] = '${apacheHttpd}/conf/mime.types';
'';
+ }];
webRoot = stdenv.mkDerivation rec {
- version = "1.3.8";
+ version = "1.4-rc1";
name = "roundcubemail-${version}";
src= fetchurl {
url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz";
- sha256 = "018djad7ygfl9c9f2l2j42qkg31ml3hs2f01f0dk361zckwk77n4";
+ 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 ${config} $out/config/config.inc.php
+ ln -s /var/secrets/webapps/tools-roundcube $out/config/config.inc.php
${builtins.concatStringsSep "\n" (
lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/plugins/${name}") plugins
)}
'';
};
phpFpm = rec {
+ serviceDeps = [ "postgresql.service" ];
basedir = builtins.concatStringsSep ":" (
- [ webRoot config varDir ]
+ [ webRoot "/var/secrets/webapps/tools-roundcube" varDir ]
++ lib.attrsets.mapAttrsToList (name: value: value) plugins
++ lib.attrsets.mapAttrsToList (name: value: value) skins);
+ phpConfig = ''
+ date.timezone = 'CET'
+ extension=${phpPackages.imagick}/lib/php/extensions/imagick.so
+ '';
socket = "/var/run/phpfpm/roundcubemail.sock";
pool = ''
listen = ${socket}
; Needed to avoid clashes in browser cookies (same domain)
php_value[session.name] = RoundcubemailPHPSESSID
- php_admin_value[open_basedir] = "${basedir}:/tmp"
+ php_admin_value[upload_max_filesize] = 200M
+ php_admin_value[post_max_size] = 200M
+ php_admin_value[open_basedir] = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp"
php_admin_value[session.save_path] = "${varDir}/phpSessions"
'';
};