diff options
Diffstat (limited to 'nixops/modules')
-rw-r--r-- | nixops/modules/websites/tools/tools/default.nix | 2 | ||||
-rw-r--r-- | nixops/modules/websites/tools/tools/roundcubemail.nix | 317 |
2 files changed, 112 insertions, 207 deletions
diff --git a/nixops/modules/websites/tools/tools/default.nix b/nixops/modules/websites/tools/tools/default.nix index 746119b..433927e 100644 --- a/nixops/modules/websites/tools/tools/default.nix +++ b/nixops/modules/websites/tools/tools/default.nix | |||
@@ -9,7 +9,7 @@ let | |||
9 | env = myconfig.env.tools.ttrss; | 9 | env = myconfig.env.tools.ttrss; |
10 | }; | 10 | }; |
11 | roundcubemail = pkgs.callPackage ./roundcubemail.nix { | 11 | roundcubemail = pkgs.callPackage ./roundcubemail.nix { |
12 | inherit (mylibs) fetchedGithub; | 12 | inherit (pkgs.webapps) roundcubemail roundcubemail-plugins roundcubemail-skins; |
13 | env = myconfig.env.tools.roundcubemail; | 13 | env = myconfig.env.tools.roundcubemail; |
14 | }; | 14 | }; |
15 | rainloop = pkgs.callPackage ./rainloop.nix {}; | 15 | rainloop = pkgs.callPackage ./rainloop.nix {}; |
diff --git a/nixops/modules/websites/tools/tools/roundcubemail.nix b/nixops/modules/websites/tools/tools/roundcubemail.nix index 9939b77..6177ff3 100644 --- a/nixops/modules/websites/tools/tools/roundcubemail.nix +++ b/nixops/modules/websites/tools/tools/roundcubemail.nix | |||
@@ -1,217 +1,122 @@ | |||
1 | { lib, env, writeText, stdenv, fetchurl, fetchedGithub, phpPackages, apacheHttpd }: | 1 | { env, roundcubemail, roundcubemail-plugins, roundcubemail-skins, phpPackages, apacheHttpd }: |
2 | let | 2 | rec { |
3 | roundcubemail = let | 3 | varDir = "/var/lib/roundcubemail"; |
4 | defaultInstall = '' | 4 | activationScript = { |
5 | mkdir -p $out | 5 | deps = [ "wrappers" ]; |
6 | cp -R . $out/ | 6 | text = '' |
7 | cd $out | 7 | install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ |
8 | if [ -d skins -a -d skins/larry -a ! -d skins/elastic ]; then | 8 | ${varDir}/cache ${varDir}/logs |
9 | ln -s larry skins/elastic | 9 | install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions |
10 | fi | 10 | ''; |
11 | ''; | 11 | }; |
12 | buildPlugin = { appName, version, url, sha256, installPhase ? defaultInstall }: | 12 | keys = [{ |
13 | stdenv.mkDerivation rec { | 13 | dest = "webapps/tools-roundcube"; |
14 | name = "roundcube-${appName}-${version}"; | 14 | user = apache.user; |
15 | inherit version; | 15 | group = apache.group; |
16 | phases = "unpackPhase installPhase"; | 16 | permissions = "0400"; |
17 | inherit installPhase; | 17 | text = '' |
18 | src = fetchurl { inherit url sha256; }; | 18 | <?php |
19 | }; | 19 | $config['db_dsnw'] = '${env.psql_url}'; |
20 | plugins = { | 20 | $config['default_host'] = 'ssl://mail.immae.eu'; |
21 | carddav = buildPlugin rec { | 21 | $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false)); |
22 | appName = "carddav"; | 22 | $config['smtp_server'] = 'tls://mail.immae.eu'; |
23 | version = "3.0.3"; | 23 | $config['smtp_port'] = '25'; |
24 | url = "https://github.com/blind-coder/rcmcarddav/releases/download/v${version}/${appName}-${version}.tar.bz2"; | 24 | $config['managesieve_host'] = 'mail.immae.eu'; |
25 | sha256 = "0cf5rnqkhhag2vdy808zfpr4l5586fn43nvcia8ac1ha58azrxal"; | 25 | $config['managesieve_port'] = '4190'; |
26 | }; | 26 | $config['managesieve_usetls'] = true; |
27 | contextmenu = buildPlugin rec { | 27 | $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false)); |
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 | }; | ||
70 | skins = {}; | ||
71 | in rec { | ||
72 | varDir = "/var/lib/roundcubemail"; | ||
73 | activationScript = { | ||
74 | deps = [ "wrappers" ]; | ||
75 | text = '' | ||
76 | install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ | ||
77 | ${varDir}/cache ${varDir}/logs | ||
78 | install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/phpSessions | ||
79 | ''; | ||
80 | }; | ||
81 | keys = [{ | ||
82 | dest = "webapps/tools-roundcube"; | ||
83 | user = apache.user; | ||
84 | group = apache.group; | ||
85 | permissions = "0400"; | ||
86 | text = '' | ||
87 | <?php | ||
88 | $config['db_dsnw'] = '${env.psql_url}'; | ||
89 | $config['default_host'] = 'ssl://mail.immae.eu'; | ||
90 | $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false)); | ||
91 | $config['smtp_server'] = 'tls://mail.immae.eu'; | ||
92 | $config['smtp_port'] = '25'; | ||
93 | $config['managesieve_host'] = 'mail.immae.eu'; | ||
94 | $config['managesieve_port'] = '4190'; | ||
95 | $config['managesieve_usetls'] = true; | ||
96 | $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false)); | ||
97 | 28 | ||
98 | $config['imap_cache'] = 'db'; | 29 | $config['imap_cache'] = 'db'; |
99 | $config['messages_cache'] = 'db'; | 30 | $config['messages_cache'] = 'db'; |
100 | 31 | ||
101 | $config['support_url'] = '''; | 32 | $config['support_url'] = '''; |
102 | 33 | ||
103 | $config['des_key'] = '${env.secret}'; | 34 | $config['des_key'] = '${env.secret}'; |
104 | 35 | ||
105 | $config['skin'] = 'elastic'; | 36 | $config['skin'] = 'elastic'; |
106 | $config['plugins'] = array( | 37 | $config['plugins'] = array( |
107 | 'attachment_reminder', | 38 | 'attachment_reminder', |
108 | 'emoticons', | 39 | 'emoticons', |
109 | 'filesystem_attachments', | 40 | 'filesystem_attachments', |
110 | 'hide_blockquote', | 41 | 'hide_blockquote', |
111 | 'identicon', | 42 | 'identicon', |
112 | 'identity_select', | 43 | 'identity_select', |
113 | 'jqueryui', | 44 | 'jqueryui', |
114 | 'managesieve', | 45 | 'managesieve', |
115 | 'newmail_notifier', | 46 | 'newmail_notifier', |
116 | 'vcard_attachments', | 47 | 'vcard_attachments', |
117 | 'zipdownload', | 48 | 'zipdownload', |
118 | 49 | ||
119 | 'automatic_addressbook', | 50 | 'automatic_addressbook', |
120 | 'message_highlight', | 51 | 'message_highlight', |
121 | 'carddav', | 52 | 'carddav', |
122 | // Ne marche pas ?: 'ident_switch', | 53 | // Ne marche pas ?: 'ident_switch', |
123 | // Ne marche pas ?: 'thunderbird_labels', | 54 | // Ne marche pas ?: 'thunderbird_labels', |
124 | ); | 55 | ); |
125 | 56 | ||
126 | $config['language'] = 'fr_FR'; | 57 | $config['language'] = 'fr_FR'; |
127 | 58 | ||
128 | $config['drafts_mbox'] = 'Mail/Drafts'; | 59 | $config['drafts_mbox'] = 'Mail/Drafts'; |
129 | $config['junk_mbox'] = 'Mail/Spam'; | 60 | $config['junk_mbox'] = 'Mail/Spam'; |
130 | $config['sent_mbox'] = 'Mail/sent'; | 61 | $config['sent_mbox'] = 'Mail/sent'; |
131 | $config['trash_mbox'] = '''; | 62 | $config['trash_mbox'] = '''; |
132 | $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', '''); | 63 | $config['default_folders'] = array('INBOX', 'Mail/Drafts', 'Mail/sent', 'Mail/Spam', '''); |
133 | $config['draft_autosave'] = 60; | 64 | $config['draft_autosave'] = 60; |
134 | $config['enable_installer'] = false; | 65 | $config['enable_installer'] = false; |
135 | $config['log_driver'] = 'file'; | 66 | $config['log_driver'] = 'file'; |
136 | $config['temp_dir'] = '${varDir}/cache'; | 67 | $config['temp_dir'] = '${varDir}/cache'; |
137 | $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; | 68 | $config['mime_types'] = '${apacheHttpd}/conf/mime.types'; |
138 | ''; | 69 | ''; |
139 | }]; | 70 | }]; |
140 | webRoot = stdenv.mkDerivation rec { | 71 | webRoot = (roundcubemail.override { roundcube_config = "/var/secrets/webapps/tools-roundcube"; }).withPlugins |
141 | version = "1.4-rc1"; | 72 | (builtins.attrValues roundcubemail-plugins) (builtins.attrValues roundcubemail-skins); |
142 | name = "roundcubemail-${version}"; | 73 | apache = rec { |
143 | src= fetchurl { | 74 | user = "wwwrun"; |
144 | url = "https://github.com/roundcube/roundcubemail/releases/download/${version}/${name}-complete.tar.gz"; | 75 | group = "wwwrun"; |
145 | sha256 = "0p18wffwi2prh6vxhx1bc69qd1vwybggm8gvg3shahfdknxci9i4"; | 76 | modules = [ "proxy_fcgi" ]; |
146 | }; | 77 | webappName = "tools_roundcubemail"; |
147 | buildPhase = '' | 78 | root = "/run/current-system/webapps/${webappName}"; |
148 | sed -i \ | 79 | vhostConf = '' |
149 | -e "s|RCUBE_INSTALL_PATH . 'temp.*|'${varDir}/cache';|" \ | 80 | Alias /roundcube "${root}" |
150 | config/defaults.inc.php | 81 | <Directory "${root}"> |
151 | sed -i \ | 82 | DirectoryIndex index.php |
152 | -e "s|RCUBE_INSTALL_PATH . 'logs.*|'${varDir}/logs';|" \ | 83 | AllowOverride All |
153 | config/defaults.inc.php | 84 | Options FollowSymlinks |
85 | Require all granted | ||
86 | |||
87 | <FilesMatch "\.php$"> | ||
88 | SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" | ||
89 | </FilesMatch> | ||
90 | </Directory> | ||
154 | ''; | 91 | ''; |
155 | installPhase = '' | 92 | }; |
156 | cp -a . $out | 93 | phpFpm = rec { |
157 | ln -s /var/secrets/webapps/tools-roundcube $out/config/config.inc.php | 94 | serviceDeps = [ "postgresql.service" ]; |
158 | ${builtins.concatStringsSep "\n" ( | 95 | basedir = builtins.concatStringsSep ":" ( |
159 | lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/plugins/${name}") plugins | 96 | [ webRoot "/var/secrets/webapps/tools-roundcube" varDir ] |
160 | )} | 97 | ++ webRoot.plugins |
161 | ${builtins.concatStringsSep "\n" ( | 98 | ++ webRoot.skins); |
162 | lib.attrsets.mapAttrsToList (name: value: "ln -sf ${value} $out/skins/${name}") skins | 99 | phpConfig = '' |
163 | )} | 100 | date.timezone = 'CET' |
101 | extension=${phpPackages.imagick}/lib/php/extensions/imagick.so | ||
164 | ''; | 102 | ''; |
165 | }; | 103 | socket = "/var/run/phpfpm/roundcubemail.sock"; |
166 | apache = rec { | 104 | pool = '' |
167 | user = "wwwrun"; | 105 | listen = ${socket} |
168 | group = "wwwrun"; | 106 | user = ${apache.user} |
169 | modules = [ "proxy_fcgi" ]; | 107 | group = ${apache.group} |
170 | webappName = "tools_roundcubemail"; | 108 | listen.owner = ${apache.user} |
171 | root = "/run/current-system/webapps/${webappName}"; | 109 | listen.group = ${apache.group} |
172 | vhostConf = '' | 110 | pm = ondemand |
173 | Alias /roundcube "${root}" | 111 | pm.max_children = 60 |
174 | <Directory "${root}"> | 112 | pm.process_idle_timeout = 60 |
175 | DirectoryIndex index.php | ||
176 | AllowOverride All | ||
177 | Options FollowSymlinks | ||
178 | Require all granted | ||
179 | 113 | ||
180 | <FilesMatch "\.php$"> | 114 | ; Needed to avoid clashes in browser cookies (same domain) |
181 | SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" | 115 | php_value[session.name] = RoundcubemailPHPSESSID |
182 | </FilesMatch> | 116 | php_admin_value[upload_max_filesize] = 200M |
183 | </Directory> | 117 | php_admin_value[post_max_size] = 200M |
184 | ''; | 118 | php_admin_value[open_basedir] = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp" |
185 | }; | 119 | php_admin_value[session.save_path] = "${varDir}/phpSessions" |
186 | phpFpm = rec { | 120 | ''; |
187 | serviceDeps = [ "postgresql.service" ]; | ||
188 | basedir = builtins.concatStringsSep ":" ( | ||
189 | [ webRoot "/var/secrets/webapps/tools-roundcube" varDir ] | ||
190 | ++ lib.attrsets.mapAttrsToList (name: value: value) plugins | ||
191 | ++ lib.attrsets.mapAttrsToList (name: value: value) skins); | ||
192 | phpConfig = '' | ||
193 | date.timezone = 'CET' | ||
194 | extension=${phpPackages.imagick}/lib/php/extensions/imagick.so | ||
195 | ''; | ||
196 | socket = "/var/run/phpfpm/roundcubemail.sock"; | ||
197 | pool = '' | ||
198 | listen = ${socket} | ||
199 | user = ${apache.user} | ||
200 | group = ${apache.group} | ||
201 | listen.owner = ${apache.user} | ||
202 | listen.group = ${apache.group} | ||
203 | pm = ondemand | ||
204 | pm.max_children = 60 | ||
205 | pm.process_idle_timeout = 60 | ||
206 | |||
207 | ; Needed to avoid clashes in browser cookies (same domain) | ||
208 | php_value[session.name] = RoundcubemailPHPSESSID | ||
209 | php_admin_value[upload_max_filesize] = 200M | ||
210 | php_admin_value[post_max_size] = 200M | ||
211 | php_admin_value[open_basedir] = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp" | ||
212 | php_admin_value[session.save_path] = "${varDir}/phpSessions" | ||
213 | ''; | ||
214 | }; | ||
215 | }; | 121 | }; |
216 | in | 122 | } |
217 | roundcubemail | ||