1{ config, pkgs, lib, serverInfo, ... }: 2let 3 inherit (pkgs) foswiki; 4 inherit (serverInfo.serverConfig) user group; 5 inherit (config) vardir; 6in 7{ 8 options.vardir = lib.mkOption { 9 type = lib.types.path; 10 default = "/var/www/foswiki"; 11 description = "The directory where variable foswiki data will be stored and served from."; 12 }; 13 14 # TODO: this will probably need to be better customizable 15 extraConfig = 16 let httpd-conf = pkgs.runCommand "foswiki-httpd.conf" 17 { preferLocalBuild = true; } 18 '' 19 substitute '${foswiki}/foswiki_httpd_conf.txt' "$out" \ 20 --replace /var/www/foswiki/ "${vardir}/" 21 ''; 22 in 23 '' 24 RewriteEngine on 25 RewriteRule /foswiki/(.*) ${vardir}/$1 26 27 <Directory "${vardir}"> 28 Require all granted 29 </Directory> 30 31 Include ${httpd-conf} 32 <Directory "${vardir}/pub"> 33 Options FollowSymlinks 34 </Directory> 35 ''; 36 37 /** This handles initial setup and updates. 38 It will probably need some tweaking, maybe per-site. */ 39 startupScript = pkgs.writeScript "foswiki_startup.sh" ( 40 let storeLink = "${vardir}/package"; in 41 '' 42 [ -e '${storeLink}' ] || needs_setup=1 43 mkdir -p '${vardir}' 44 cd '${vardir}' 45 ln -sf -T '${foswiki}' '${storeLink}' 46 47 if [ -n "$needs_setup" ]; then # do initial setup 48 mkdir -p bin lib 49 # setup most of data/ as copies only 50 cp -r '${foswiki}'/data '${vardir}/' 51 rm -r '${vardir}'/data/{System,mime.types} 52 ln -sr -t '${vardir}/data/' '${storeLink}'/data/{System,mime.types} 53 54 ln -sr '${storeLink}/locale' . 55 56 mkdir pub 57 ln -sr '${storeLink}/pub/System' pub/ 58 59 mkdir templates 60 ln -sr '${storeLink}'/templates/* templates/ 61 62 ln -sr '${storeLink}/tools' . 63 64 mkdir -p '${vardir}'/working/{logs,tmp} 65 ln -sr '${storeLink}/working/README' working/ # used to check dir validity 66 67 chown -R '${user}:${group}' . 68 chmod +w -R . 69 fi 70 71 # bin/* and lib/* shall always be overwritten, in case files are added 72 ln -srf '${storeLink}'/bin/* '${vardir}/bin/' 73 ln -srf '${storeLink}'/lib/* '${vardir}/lib/' 74 '' 75 /* Symlinking bin/ one-by-one ensures that ${vardir}/lib/LocalSite.cfg 76 is used instead of ${foswiki}/... */ 77 ); 78}