 1952d5d5f7
			
		
	
	
		1952d5d5f7
		
	
	
	
	
		
			
			Activation is as simple as:
  services.httpd = {
    enable = true;
    adminAddr = "nobody@example.com";
    extraSubservices = [ {
      serviceType = "foswiki";
    } ];
  };
		
	
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, lib, serverInfo, ... }:
 | |
| let
 | |
|   inherit (pkgs) foswiki;
 | |
|   inherit (serverInfo.serverConfig) user group;
 | |
|   inherit (config) vardir;
 | |
| in
 | |
| {
 | |
|   options.vardir = lib.mkOption {
 | |
|     type = lib.types.path;
 | |
|     default = "/var/www/foswiki";
 | |
|     description = "The directory where variable foswiki data will be stored and served from.";
 | |
|   };
 | |
| 
 | |
|   # TODO: this will probably need to be better customizable
 | |
|   extraConfig =
 | |
|     let httpd-conf = pkgs.runCommand "foswiki-httpd.conf"
 | |
|       { preferLocalBuild = true; }
 | |
|       ''
 | |
|         substitute '${foswiki}/foswiki_httpd_conf.txt' "$out" \
 | |
|           --replace /var/www/foswiki/ "${vardir}/"
 | |
|       '';
 | |
|     in
 | |
|       ''
 | |
|         RewriteEngine on
 | |
|         RewriteRule /foswiki/(.*) ${vardir}/$1
 | |
| 
 | |
|         <Directory "${vardir}">
 | |
|           Require all granted
 | |
|         </Directory>
 | |
| 
 | |
|         Include ${httpd-conf}
 | |
|         <Directory "${vardir}/pub">
 | |
|           Options FollowSymlinks
 | |
|         </Directory>
 | |
|       '';
 | |
| 
 | |
|   /** This handles initial setup and updates.
 | |
|       It will probably need some tweaking, maybe per-site.  */
 | |
|   startupScript = pkgs.writeScript "foswiki_startup.sh" (
 | |
|     let storeLink = "${vardir}/package"; in
 | |
|     ''
 | |
|       [ -e '${storeLink}' ] || needs_setup=1
 | |
|       mkdir -p '${vardir}'
 | |
|       cd '${vardir}'
 | |
|       ln -sf -T '${foswiki}' '${storeLink}'
 | |
| 
 | |
|       if [ -n "$needs_setup" ]; then # do initial setup
 | |
|         mkdir -p bin lib
 | |
|         # setup most of data/ as copies only
 | |
|         cp -r '${foswiki}'/data '${vardir}/'
 | |
|         rm -r '${vardir}'/data/{System,mime.types}
 | |
|         ln -sr -t '${vardir}/data/' '${storeLink}'/data/{System,mime.types}
 | |
| 
 | |
|         ln -sr '${storeLink}/locale' .
 | |
| 
 | |
|         mkdir pub
 | |
|         ln -sr '${storeLink}/pub/System' pub/
 | |
| 
 | |
|         mkdir templates
 | |
|         ln -sr '${storeLink}'/templates/* templates/
 | |
| 
 | |
|         ln -sr '${storeLink}/tools' .
 | |
| 
 | |
|         mkdir -p '${vardir}'/working/{logs,tmp}
 | |
|         ln -sr '${storeLink}/working/README' working/ # used to check dir validity
 | |
| 
 | |
|         chown -R '${user}:${group}' .
 | |
|         chmod +w -R .
 | |
|       fi
 | |
| 
 | |
|       # bin/* and lib/* shall always be overwritten, in case files are added
 | |
|       ln -srf '${storeLink}'/bin/* '${vardir}/bin/'
 | |
|       ln -srf '${storeLink}'/lib/* '${vardir}/lib/'
 | |
|     ''
 | |
|     /* Symlinking bin/ one-by-one ensures that ${vardir}/lib/LocalSite.cfg
 | |
|         is used instead of ${foswiki}/... */
 | |
|   );
 | |
| }
 |