]>
Commit | Line | Data |
---|---|---|
e2ca51b2 | 1 | { lib, env, writeText, stdenv, fetchurl, fetchedGithub, phpPackages, apacheHttpd }: |
d252d718 IB |
2 | let |
3 | roundcubemail = let | |
e2ca51b2 IB |
4 | defaultInstall = '' |
5 | mkdir -p $out | |
6 | cp -R . $out/ | |
7 | cd $out | |
8 | if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then | |
9 | ln -s larry skins/elastic | |
10 | fi | |
11 | ''; | |
12 | buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: | |
13 | stdenv.mkDerivation rec { | |
14 | name = "roundcube-${appName}-${version}"; | |
15 | inherit version; | |
16 | phases = "unpackPhase installPhase"; | |
17 | inherit installPhase; | |
18 | src = fetchurl { inherit url sha256; }; | |
19 | }; | |
20 | plugins = { | |
21 | carddav = buildPlugin rec { | |
22 | appName = "carddav"; | |
23 | version = "3.0.3"; | |
24 | url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2"; | |
25 | sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal"; | |
26 | }; | |
27 | contextmenu = buildPlugin rec { | |
28 | appName = "contextmenu"; | |
29 | version = "2.3"; | |
30 | url = "https://github.com/johndoh/roundcube-${appName}/archive/${version}.tar.gz"; | |
31 | sha256 = "1rb8n821ylfniiiccfskc534vd6rczhk3g82455ks3m09q6l8hif"; | |
32 | }; | |
33 | contextmenu_folder = buildPlugin rec { | |
34 | appName = "contextmenu_folder"; | |
35 | version = "1.3.3"; | |
36 | url = "https://github.com/random-cuber/${appName}/archive/${version}.tar.gz"; | |
37 | sha256 = "1ngfws1v8qrpa52rjh7kirc98alchk2vbqwra86h00agyjjlcc57"; | |
38 | }; | |
39 | automatic_addressbook = buildPlugin rec { | |
40 | appName = "automatic_addressbook"; | |
41 | version = "0.4.3"; | |
42 | url = "https://github.com/sblaisot/${appName}/archive/${version}.tar.gz"; | |
43 | sha256 = "0bx5qjzp3a3wc72fr295bvgsy5n15949c041hq76n6c7sqdn7inc"; | |
44 | }; | |
45 | message_highlight = buildPlugin rec { | |
46 | appName = "message_highlight"; | |
47 | version = "4.4"; | |
48 | url = "https://github.com/corbosman/${appName}/archive/${version}.tar.gz"; | |
49 | sha256 = "12c4x47y70xdl5pgm8csh5i4yiyhpi232lvjbixmca6di4lkhh9j"; | |
50 | }; | |
51 | thunderbird_labels = buildPlugin rec { | |
52 | appName = "thunderbird_labels"; | |
53 | version = "v1.3.2"; | |
54 | url = "https://github.com/mike-kfed/roundcube-${appName}/archive/${version}.tar.gz"; | |
55 | sha256 = "1q4x30w66m02v3lw2n8020g0158rmyfzs6gydfk89pa1hs28k9bg"; | |
56 | }; | |
57 | html5_notifier = buildPlugin rec { | |
58 | appName = "html5_notifier"; | |
59 | version = "v0.6.2"; | |
60 | url = "https://github.com/stremlau/${appName}/archive/${version}.tar.gz"; | |
61 | sha256 = "0s1wq9ira4bcd8jvhn93nhxiqzpp92i0za2kw37kf7ksyhr0xslq"; | |
62 | }; | |
63 | ident_switch = buildPlugin rec { | |
64 | appName = "ident_switch"; | |
65 | version = "4.0.1"; | |
66 | url = "https://bitbucket.org/BoresExpress/${appName}/get/${version}.tar.gz"; | |
67 | sha256 = "1zyy40lfq2kn7hkghbl8lgp18fb634zr4fxmmxvb1wqyvqdpdpyk"; | |
68 | }; | |
69 | }; | |
8a2ccf84 | 70 | skins = {}; |
d252d718 IB |
71 | in rec { |
72 | varDir = "/var/lib/roundcubemail"; | |
d252d718 IB |
73 | activationScript = { |
74 | deps = [ "wrappers" ]; | |
75 | text = '' | |
76 | install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ | |
e2ca51b2 | 77 | ${varDir}/cache ${varDir}/logs |
d252d718 IB |
78 | install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions |
79 | ''; | |
80 | }; | |
9d90e7e2 | 81 | config = writeText "config.php" '' |
d252d718 | 82 | <?php |
9d90e7e2 | 83 | $config['db_dsnw'] = '${env.psql_url}'; |
d252d718 IB |
84 | $config['default_host'] = 'ssl://mail.immae.eu'; |
85 | $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false)); | |
86 | $config['smtp_server'] = 'tls://mail.immae.eu'; | |
87 | ||
88 | $config['imap_cache'] = 'db'; | |
89 | $config['messages_cache'] = 'db'; | |
90 | ||
91 | $config['support_url'] = '''; | |
92 | ||
9d90e7e2 | 93 | $config['des_key'] = '${env.secret}'; |
d252d718 | 94 | |
e2ca51b2 IB |
95 | $config['skin'] = 'elastic'; |
96 | $config['plugins'] = array( | |
97 | // 'acl', | |
98 | // 'additional_message_headers', | |
99 | // 'archive', | |
100 | 'attachment_reminder', | |
101 | // 'autologon', | |
102 | // 'database_attachments', | |
103 | // 'debug_logger', | |
104 | // 'emoticons', | |
105 | // 'enigma', | |
106 | // 'example_addressbook', | |
107 | // 'filesystem_attachments', | |
108 | // 'help', | |
109 | // 'hide_blockquote', | |
110 | // 'http_authentication', | |
111 | // 'identicon', | |
112 | // 'identity_select', | |
113 | // 'jqueryui', | |
114 | // 'krb_authentication', | |
115 | // 'managesieve', | |
116 | // 'markasjunk', | |
117 | // 'new_user_dialog', | |
118 | // 'new_user_identity', | |
119 | // 'newmail_notifier', | |
120 | // 'password', | |
121 | // 'redundant_attachments', | |
122 | // 'show_additional_headers', | |
123 | // 'squirrelmail_usercopy', | |
124 | // 'subscriptions_option', | |
125 | // 'userinfo', | |
126 | // 'vcard_attachments', | |
127 | // 'virtuser_file', | |
128 | // 'virtuser_query', | |
129 | // 'zipdownload', | |
130 | ||
131 | // 'automatic_addressbook', | |
132 | // 'carddav', | |
133 | // 'contextmenu', | |
134 | // 'contextmenu_folder', | |
135 | // 'html5_notifier', | |
136 | // 'ident_switch', | |
137 | // 'message_highlight', | |
138 | // 'thunderbird_labels', | |
139 | ); | |
d252d718 IB |
140 | |
141 | $config['language'] = 'fr_FR'; | |
142 | ||
143 | $config['drafts_mbox'] = 'Mail/Drafts'; | |
144 | $config['junk_mbox'] = 'Mail/Spam'; | |
145 | $config['sent_mbox'] = 'Mail/sent'; | |
146 | $config['trash_mbox'] = '''; | |
147 | $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', '''); | |
148 | $config['draft_autosave'] = 60; | |
149 | $config['enable_installer'] = false; | |
150 | $config['log_driver'] = 'stdout'; | |
151 | $config['temp_dir'] = '${varDir}/cache'; | |
e2ca51b2 | 152 | $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; |
d252d718 IB |
153 | ''; |
154 | webRoot = stdenv.mkDerivation rec { | |
e2ca51b2 | 155 | version = "1.4-rc1"; |
d252d718 IB |
156 | name = "roundcubemail-${version}"; |
157 | src= fetchurl { | |
158 | url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; | |
e2ca51b2 | 159 | sha256 = "0p18wffwi2prh6vxhx1bc69qd1vwybggm8gvg3shahfdknxci9i4"; |
d252d718 IB |
160 | }; |
161 | buildPhase = '' | |
162 | sed -i \ | |
163 | -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ | |
164 | config/defaults.inc.php | |
e2ca51b2 IB |
165 | sed -i \ |
166 | -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ | |
167 | config/defaults.inc.php | |
d252d718 IB |
168 | ''; |
169 | installPhase = '' | |
170 | cp -a . $out | |
171 | ln -s ${config} $out/config/config.inc.php | |
172 | ${builtins.concatStringsSep "\n" ( | |
173 | lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/plugins/${name}") plugins | |
174 | )} | |
8a2ccf84 IB |
175 | ${builtins.concatStringsSep "\n" ( |
176 | lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/skins/${name}") skins | |
177 | )} | |
d252d718 IB |
178 | ''; |
179 | }; | |
a95ab089 | 180 | apache = rec { |
d252d718 IB |
181 | user = "wwwrun"; |
182 | group = "wwwrun"; | |
183 | modules = [ "proxy_fcgi" ]; | |
a95ab089 IB |
184 | webappName = "tools_roundcubemail"; |
185 | root = "/run/current-system/webapps/${webappName}"; | |
d252d718 | 186 | vhostConf = '' |
a95ab089 IB |
187 | Alias /roundcube "${root}" |
188 | <Directory "${root}"> | |
d252d718 IB |
189 | DirectoryIndex index.php |
190 | AllowOverride All | |
191 | Options FollowSymlinks | |
192 | Require all granted | |
193 | ||
194 | <FilesMatch "\.php$"> | |
195 | SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" | |
196 | </FilesMatch> | |
197 | </Directory> | |
198 | ''; | |
199 | }; | |
200 | phpFpm = rec { | |
201 | basedir = builtins.concatStringsSep ":" ( | |
202 | [ webRoot config varDir ] | |
8a2ccf84 IB |
203 | ++ lib.attrsets.mapAttrsToList (name: value: value) plugins |
204 | ++ lib.attrsets.mapAttrsToList (name: value: value) skins); | |
e2ca51b2 IB |
205 | phpConfig = '' |
206 | date.timezone = 'CET' | |
207 | extension=${phpPackages.imagick}/lib/php/extensions/imagick.so | |
208 | ''; | |
d252d718 IB |
209 | socket = "/var/run/phpfpm/roundcubemail.sock"; |
210 | pool = '' | |
211 | listen = ${socket} | |
212 | user = ${apache.user} | |
213 | group = ${apache.group} | |
214 | listen.owner = ${apache.user} | |
215 | listen.group = ${apache.group} | |
216 | pm = ondemand | |
217 | pm.max_children = 60 | |
218 | pm.process_idle_timeout = 60 | |
219 | ||
220 | ; Needed to avoid clashes in browser cookies (same domain) | |
221 | php_value[session.name] = RoundcubemailPHPSESSID | |
e2ca51b2 IB |
222 | php_admin_value[upload_max_filesize] = 200M |
223 | php_admin_value[post_max_size] = 200M | |
224 | php_admin_value[open_basedir] = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp" | |
d252d718 IB |
225 | php_admin_value[session.save_path] = "${varDir}/phpSessions" |
226 | ''; | |
227 | }; | |
228 | }; | |
229 | in | |
230 | roundcubemail |