]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - nixops/modules/websites/tools/tools/default.nix
Move ttrss to pkgs
[perso/Immae/Config/Nix.git] / nixops / modules / websites / tools / tools / default.nix
CommitLineData
9d90e7e2 1{ lib, pkgs, config, myconfig, mylibs, ... }:
10889174
IB
2let
3 adminer = pkgs.callPackage ../../commons/adminer.nix {};
bfe3c9c9
IB
4 ympd = pkgs.callPackage ./ympd.nix {
5 env = myconfig.env.tools.ympd;
6 };
9d90e7e2 7 ttrss = pkgs.callPackage ./ttrss.nix {
86663f17 8 inherit (pkgs.webapps) ttrss ttrss-plugins;
9d90e7e2
IB
9 env = myconfig.env.tools.ttrss;
10 };
8a2ccf84 11 roundcubemail = pkgs.callPackage ./roundcubemail.nix {
fffbbb56 12 inherit (pkgs.webapps) roundcubemail roundcubemail-plugins roundcubemail-skins;
8a2ccf84
IB
13 env = myconfig.env.tools.roundcubemail;
14 };
46f30ecc 15 rainloop = pkgs.callPackage ./rainloop.nix {};
d4ed0eff 16 kanboard = pkgs.callPackage ./kanboard.nix {
d4ed0eff
IB
17 env = myconfig.env.tools.kanboard;
18 };
9d90e7e2 19 wallabag = pkgs.callPackage ./wallabag.nix { env = myconfig.env.tools.wallabag; };
133ebaee 20 yourls = pkgs.callPackage ./yourls.nix {
b44b42a1 21 inherit (pkgs.webapps) yourls yourls-plugins;
133ebaee
IB
22 env = myconfig.env.tools.yourls;
23 };
bfe3c9c9 24 rompr = pkgs.callPackage ./rompr.nix {
5dbe7ba1 25 inherit (pkgs.webapps) rompr;
bfe3c9c9
IB
26 env = myconfig.env.tools.rompr;
27 };
95b20e17
IB
28 shaarli = pkgs.callPackage ./shaarli.nix {
29 env = myconfig.env.tools.shaarli;
30 };
b892dcbe 31 dokuwiki = pkgs.callPackage ./dokuwiki.nix {
c9d13ae3 32 inherit (pkgs.webapps) dokuwiki dokuwiki-plugins;
b892dcbe 33 };
f80772dc 34 ldap = pkgs.callPackage ./ldap.nix {
f5efae0f 35 inherit (pkgs.webapps) phpldapadmin;
f80772dc
IB
36 env = myconfig.env.tools.phpldapadmin;
37 };
10889174
IB
38
39 cfg = config.services.myWebsites.tools.tools;
40in {
41 options.services.myWebsites.tools.tools = {
42 enable = lib.mkEnableOption "enable tools website";
43 };
44
45 config = lib.mkIf cfg.enable {
46 security.acme.certs."eldiron".extraDomains."tools.immae.eu" = null;
46f30ecc
IB
47 security.acme.certs."eldiron".extraDomains."devtools.immae.eu" = null;
48
8db8e666 49 mySecrets.keys =
a840a21c 50 kanboard.keys
8db8e666
IB
51 ++ ldap.keys
52 ++ roundcubemail.keys
53 ++ shaarli.keys
54 ++ ttrss.keys
55 ++ wallabag.keys
56 ++ yourls.keys;
98163486 57
46f30ecc
IB
58 services.myWebsites.integration.modules =
59 rainloop.apache.modules;
10889174
IB
60
61 services.myWebsites.tools.modules =
1922655a
IB
62 [ "proxy_fcgi" ]
63 ++ adminer.apache.modules
10889174
IB
64 ++ ympd.apache.modules
65 ++ ttrss.apache.modules
aebd817b 66 ++ roundcubemail.apache.modules
133ebaee 67 ++ wallabag.apache.modules
bfe3c9c9 68 ++ yourls.apache.modules
95b20e17 69 ++ rompr.apache.modules
b892dcbe 70 ++ shaarli.apache.modules
f80772dc 71 ++ dokuwiki.apache.modules
d4ed0eff
IB
72 ++ ldap.apache.modules
73 ++ kanboard.apache.modules;
10889174 74
914dd76c
IB
75 systemd.services.ympd = {
76 description = "Standalone MPD Web GUI written in C";
77 wantedBy = [ "multi-user.target" ];
78 script = ''
742697c9 79 export MPD_PASSWORD=$(cat /var/secrets/mpd)
914dd76c
IB
80 ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
81 '';
82 };
10889174 83
46f30ecc
IB
84 services.myWebsites.integration.vhostConfs.devtools = {
85 certName = "eldiron";
86 hosts = ["devtools.immae.eu" ];
0aae0181 87 root = "/var/lib/ftp/devtools.immae.eu";
46f30ecc 88 extraConfig = [
0aae0181
IB
89 ''
90 <Directory "/var/lib/ftp/devtools.immae.eu">
91 DirectoryIndex index.php index.htm index.html
92 AllowOverride all
93 Require all granted
94 <FilesMatch "\.php$">
95 SetHandler "proxy:unix:/var/run/phpfpm/devtools.sock|fcgi://localhost"
96 </FilesMatch>
97 </Directory>
98 ''
46f30ecc
IB
99 rainloop.apache.vhostConf
100 ];
101 };
102
10889174
IB
103 services.myWebsites.tools.vhostConfs.tools = {
104 certName = "eldiron";
105 hosts = ["tools.immae.eu" ];
1922655a 106 root = "/var/lib/ftp/tools.immae.eu";
10889174 107 extraConfig = [
1922655a
IB
108 ''
109 <Directory "/var/lib/ftp/tools.immae.eu">
0eaac6ba 110 DirectoryIndex index.php index.htm index.html
1922655a
IB
111 AllowOverride all
112 Require all granted
113 <FilesMatch "\.php$">
114 SetHandler "proxy:unix:/var/run/phpfpm/tools.sock|fcgi://localhost"
115 </FilesMatch>
116 </Directory>
117 ''
10889174
IB
118 adminer.apache.vhostConf
119 ympd.apache.vhostConf
120 ttrss.apache.vhostConf
121 roundcubemail.apache.vhostConf
aebd817b 122 wallabag.apache.vhostConf
133ebaee 123 yourls.apache.vhostConf
bfe3c9c9 124 rompr.apache.vhostConf
95b20e17 125 shaarli.apache.vhostConf
b892dcbe 126 dokuwiki.apache.vhostConf
f80772dc 127 ldap.apache.vhostConf
d4ed0eff 128 kanboard.apache.vhostConf
10889174
IB
129 ];
130 };
131
70606070
IB
132 security.acme.certs."eldiron".extraDomains."outils.immae.eu" = null;
133 services.myWebsites.tools.vhostConfs.outils = {
134 certName = "eldiron";
135 hosts = [ "outils.immae.eu" ];
136 root = null;
137 extraConfig = [
138 ''
139 RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
140
141 RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
142
143 RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
144 RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
145
146 RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
147 RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
148 RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
149 RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
150
151 RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
152
153 RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
154 ''
155 ];
156 };
157
a840a21c
IB
158 services.myPhpfpm.serviceDependencies = {
159 dokuwiki = dokuwiki.phpFpm.serviceDeps;
160 kanboard = kanboard.phpFpm.serviceDeps;
161 ldap = ldap.phpFpm.serviceDeps;
162 rainloop = rainloop.phpFpm.serviceDeps;
163 roundcubemail = roundcubemail.phpFpm.serviceDeps;
5f08b34c 164 shaarli = shaarli.phpFpm.serviceDeps;
a840a21c
IB
165 ttrss = ttrss.phpFpm.serviceDeps;
166 wallabag = wallabag.phpFpm.serviceDeps;
167 yourls = yourls.phpFpm.serviceDeps;
168 };
169
b7d2d4e3 170 services.myPhpfpm.poolPhpConfigs = {
0aae0181
IB
171 devtools = ''
172 extension=${pkgs.phpPackages.redis}/lib/php/extensions/redis.so
173 extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
174 zend_extension=${pkgs.php}/lib/php/extensions/opcache.so
175 '';
b7d2d4e3
IB
176 roundcubemail = roundcubemail.phpFpm.phpConfig;
177 };
8eded9ec
IB
178 services.myPhpfpm.preStart = {
179 wallabag = wallabag.phpFpm.preStart;
180 };
10889174
IB
181 services.myPhpfpm.poolConfigs = {
182 adminer = adminer.phpFpm.pool;
183 ttrss = ttrss.phpFpm.pool;
184 roundcubemail = roundcubemail.phpFpm.pool;
aebd817b 185 wallabag = wallabag.phpFpm.pool;
133ebaee 186 yourls = yourls.phpFpm.pool;
bfe3c9c9 187 rompr = rompr.phpFpm.pool;
95b20e17 188 shaarli = shaarli.phpFpm.pool;
b892dcbe 189 dokuwiki = dokuwiki.phpFpm.pool;
f80772dc 190 ldap = ldap.phpFpm.pool;
46f30ecc 191 rainloop = rainloop.phpFpm.pool;
d4ed0eff 192 kanboard = kanboard.phpFpm.pool;
0aae0181
IB
193 devtools = ''
194 listen = /var/run/phpfpm/devtools.sock
195 user = wwwrun
196 group = wwwrun
197 listen.owner = wwwrun
198 listen.group = wwwrun
199 pm = dynamic
200 pm.max_children = 60
201 pm.start_servers = 2
202 pm.min_spare_servers = 1
203 pm.max_spare_servers = 10
204
205 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/devtools.immae.eu:/tmp"
206 '';
1922655a
IB
207 tools = ''
208 listen = /var/run/phpfpm/tools.sock
209 user = wwwrun
210 group = wwwrun
211 listen.owner = wwwrun
212 listen.group = wwwrun
213 pm = dynamic
214 pm.max_children = 60
215 pm.start_servers = 2
216 pm.min_spare_servers = 1
217 pm.max_spare_servers = 10
218
219 ; Needed to avoid clashes in browser cookies (same domain)
220 php_value[session.name] = ToolsPHPSESSID
221 php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:/var/lib/ftp/tools.immae.eu:/tmp"
222 '';
10889174
IB
223 };
224
225 system.activationScripts = {
226 ttrss = ttrss.activationScript;
227 roundcubemail = roundcubemail.activationScript;
aebd817b 228 wallabag = wallabag.activationScript;
133ebaee 229 yourls = yourls.activationScript;
bfe3c9c9 230 rompr = rompr.activationScript;
95b20e17 231 shaarli = shaarli.activationScript;
b892dcbe 232 dokuwiki = dokuwiki.activationScript;
46f30ecc 233 rainloop = rainloop.activationScript;
d4ed0eff 234 kanboard = kanboard.activationScript;
10889174
IB
235 };
236
a95ab089
IB
237 system.extraSystemBuilderCmds = ''
238 mkdir -p $out/webapps
239 ln -s ${dokuwiki.webRoot} $out/webapps/${dokuwiki.apache.webappName}
240 ln -s ${ldap.webRoot}/htdocs $out/webapps/${ldap.apache.webappName}
241 ln -s ${rompr.webRoot} $out/webapps/${rompr.apache.webappName}
242 ln -s ${roundcubemail.webRoot} $out/webapps/${roundcubemail.apache.webappName}
243 ln -s ${shaarli.webRoot} $out/webapps/${shaarli.apache.webappName}
244 ln -s ${ttrss.webRoot} $out/webapps/${ttrss.apache.webappName}
245 ln -s ${wallabag.webRoot} $out/webapps/${wallabag.apache.webappName}
246 ln -s ${yourls.webRoot} $out/webapps/${yourls.apache.webappName}
46f30ecc 247 ln -s ${rainloop.webRoot} $out/webapps/${rainloop.apache.webappName}
d4ed0eff 248 ln -s ${kanboard.webRoot} $out/webapps/${kanboard.apache.webappName}
a95ab089
IB
249 '';
250
10889174
IB
251 systemd.services.tt-rss = {
252 description = "Tiny Tiny RSS feeds update daemon";
253 serviceConfig = {
254 User = "wwwrun";
255 ExecStart = "${pkgs.php}/bin/php ${ttrss.webRoot}/update.php --daemon";
256 StandardOutput = "syslog";
257 StandardError = "syslog";
258 PermissionsStartOnly = true;
259 };
260
261 wantedBy = [ "multi-user.target" ];
262 requires = ["postgresql.service"];
263 after = ["network.target" "postgresql.service"];
264 };
265
266 };
267}
268