anchor.diff:  
           preStart =
             ''
  -	    # Create the base directory
  -	    mkdir -p ${cfg.baseDir}
  -
  -	    # Create a symlink to the bin directory of the tomcat component
  -	    ln -sfn ${tomcat}/bin ${cfg.baseDir}/bin
  -
  -	    # Create a conf/ directory
  -	    mkdir -p ${cfg.baseDir}/conf
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/conf
  -
  -	    # Symlink the config files in the conf/ directory (except for catalina.properties and server.xml)
  -	    for i in $(ls ${tomcat}/conf | grep -v catalina.properties | grep -v server.xml)
  -	    do
  -	        ln -sfn ${tomcat}/conf/$i ${cfg.baseDir}/conf/`basename $i`
  -	    done
  +            # Create the base directory
  +            mkdir -p ${cfg.baseDir}
  +
  +            # Create a symlink to the bin directory of the tomcat component
  +            ln -sfn ${tomcat}/bin ${cfg.baseDir}/bin
  +
  +            # Create a conf/ directory
  +            mkdir -p ${cfg.baseDir}/conf
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/conf
  +
  +            # Symlink the config files in the conf/ directory (except for catalina.properties and server.xml)
  +            for i in $(ls ${tomcat}/conf | grep -v catalina.properties | grep -v server.xml)
  +            do
  +                ln -sfn ${tomcat}/conf/$i ${cfg.baseDir}/conf/`basename $i`
  +            done
   
               # Create subdirectory for virtual hosts
               mkdir -p ${cfg.baseDir}/virtualhosts
   
  -	    # Create a modified catalina.properties file
  -	    # Change all references from CATALINA_HOME to CATALINA_BASE and add support for shared libraries
  -	    sed -e 's|''${catalina.home}|''${catalina.base}|g' \
  +            # Create a modified catalina.properties file
  +            # Change all references from CATALINA_HOME to CATALINA_BASE and add support for shared libraries
  +            sed -e 's|''${catalina.home}|''${catalina.base}|g' \
                   -e 's|shared.loader=|shared.loader=''${catalina.base}/shared/lib/*.jar|' \
  -		${tomcat}/conf/catalina.properties > ${cfg.baseDir}/conf/catalina.properties
  -
  -	    # Create a modified server.xml which also includes all virtual hosts
  -	    sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\  ${
  +                ${tomcat}/conf/catalina.properties > ${cfg.baseDir}/conf/catalina.properties
  +
  +            # Create a modified server.xml which also includes all virtual hosts
  +            sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\  ${
                            toString (map (virtualHost: ''<Host name=\"${virtualHost.name}\" appBase=\"virtualhosts/${virtualHost.name}/webapps\" unpackWARs=\"true\" autoDeploy=\"true\" xmlValidation=\"false\" xmlNamespaceAware=\"false\" >${if cfg.logPerVirtualHost then ''<Valve className=\"org.apache.catalina.valves.AccessLogValve\" directory=\"logs/${virtualHost.name}\"  prefix=\"${virtualHost.name}_access_log.\" pattern=\"combined\" resolveHosts=\"false\"/>'' else ""}</Host>'') cfg.virtualHosts)}" \
  -	        ${tomcat}/conf/server.xml > ${cfg.baseDir}/conf/server.xml
  -
  -	    # Create a logs/ directory
  -	    mkdir -p ${cfg.baseDir}/logs
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs
  +                ${tomcat}/conf/server.xml > ${cfg.baseDir}/conf/server.xml
  +
  +            # Create a logs/ directory
  +            mkdir -p ${cfg.baseDir}/logs
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs
               ${if cfg.logPerVirtualHost then
                  toString (map (h: ''
                                       mkdir -p ${cfg.baseDir}/logs/${h.name}
                                       chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs/${h.name}
                                    '') cfg.virtualHosts) else ''''}
   
  -	    # Create a temp/ directory
  -	    mkdir -p ${cfg.baseDir}/temp
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/temp
  -
  -	    # Create a lib/ directory
  -	    mkdir -p ${cfg.baseDir}/lib
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/lib
  -
  -	    # Create a shared/lib directory
  -	    mkdir -p ${cfg.baseDir}/shared/lib
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/shared/lib
  -
  -	    # Create a webapps/ directory
  -	    mkdir -p ${cfg.baseDir}/webapps
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps
  -
  -	    # Symlink all the given common libs files or paths into the lib/ directory
  -	    for i in ${tomcat} ${toString cfg.commonLibs}
  -	    do
  -		if [ -f $i ]
  -		then
  -		    # If the given web application is a file, symlink it into the common/lib/ directory
  -		    ln -sfn $i ${cfg.baseDir}/lib/`basename $i`
  -		elif [ -d $i ]
  -		then
  -		    # If the given web application is a directory, then iterate over the files
  -		    # in the special purpose directories and symlink them into the tomcat tree
  -
  -		    for j in $i/lib/*
  -		    do
  -			ln -sfn $j ${cfg.baseDir}/lib/`basename $j`
  -		    done
  -		fi
  -	    done
  -
  -	    # Symlink all the given shared libs files or paths into the shared/lib/ directory
  -	    for i in ${toString cfg.sharedLibs}
  -	    do
  -		if [ -f $i ]
  -		then
  -		    # If the given web application is a file, symlink it into the common/lib/ directory
  -		    ln -sfn $i ${cfg.baseDir}/shared/lib/`basename $i`
  -		elif [ -d $i ]
  -		then
  -		    # If the given web application is a directory, then iterate over the files
  -		    # in the special purpose directories and symlink them into the tomcat tree
  -
  -		    for j in $i/shared/lib/*
  -		    do
  -			ln -sfn $j ${cfg.baseDir}/shared/lib/`basename $j`
  -		    done
  -		fi
  -	    done
  -
  -	    # Symlink all the given web applications files or paths into the webapps/ directory
  -	    for i in ${toString cfg.webapps}
  -	    do
  -		if [ -f $i ]
  -		then
  -		    # If the given web application is a file, symlink it into the webapps/ directory
  -		    ln -sfn $i ${cfg.baseDir}/webapps/`basename $i`
  -		elif [ -d $i ]
  -		then
  -		    # If the given web application is a directory, then iterate over the files
  -		    # in the special purpose directories and symlink them into the tomcat tree
  -
  -		    for j in $i/webapps/*
  -		    do
  -		        ln -sfn $j ${cfg.baseDir}/webapps/`basename $j`
  -		    done
  -
  -		    # Also symlink the configuration files if they are included
  -		    if [ -d $i/conf/Catalina ]
  -		    then
  -			for j in $i/conf/Catalina/*
  -			do
  -			    mkdir -p ${cfg.baseDir}/conf/Catalina/localhost
  -			    ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
  -			done
  -		    fi
  -		fi
  -	    done
  -
  -	    ${toString (map (virtualHost: ''
  -	      # Create webapps directory for the virtual host
  -	      mkdir -p ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
  -
  -	      # Modify ownership
  -	      chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
  -
  -	      # Symlink all the given web applications files or paths into the webapps/ directory
  -	      # of this virtual host
  -	      for i in "${if virtualHost ? webapps then toString virtualHost.webapps else ""}"
  -	      do
  -		  if [ -f $i ]
  -		  then
  -		      # If the given web application is a file, symlink it into the webapps/ directory
  -		      ln -sfn $i ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $i`
  -		  elif [ -d $i ]
  -		  then
  -		      # If the given web application is a directory, then iterate over the files
  -		      # in the special purpose directories and symlink them into the tomcat tree
  -
  -		      for j in $i/webapps/*
  -		      do
  -		          ln -sfn $j ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $j`
  -		      done
  -
  -		      # Also symlink the configuration files if they are included
  -		      if [ -d $i/conf/Catalina ]
  -		      then
  -			  for j in $i/conf/Catalina/*
  -			  do
  -			      mkdir -p ${cfg.baseDir}/conf/Catalina/${virtualHost.name}
  -			      ln -sfn $j ${cfg.baseDir}/conf/Catalina/${virtualHost.name}/`basename $j`
  -			  done
  -		      fi
  +            # Create a temp/ directory
  +            mkdir -p ${cfg.baseDir}/temp
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/temp
  +
  +            # Create a lib/ directory
  +            mkdir -p ${cfg.baseDir}/lib
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/lib
  +
  +            # Create a shared/lib directory
  +            mkdir -p ${cfg.baseDir}/shared/lib
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/shared/lib
  +
  +            # Create a webapps/ directory
  +            mkdir -p ${cfg.baseDir}/webapps
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps
  +
  +            # Symlink all the given common libs files or paths into the lib/ directory
  +            for i in ${tomcat} ${toString cfg.commonLibs}
  +            do
  +                if [ -f $i ]
  +                then
  +                    # If the given web application is a file, symlink it into the common/lib/ directory
  +                    ln -sfn $i ${cfg.baseDir}/lib/`basename $i`
  +                elif [ -d $i ]
  +                then
  +                    # If the given web application is a directory, then iterate over the files
  +                    # in the special purpose directories and symlink them into the tomcat tree
  +
  +                    for j in $i/lib/*
  +                    do
  +                        ln -sfn $j ${cfg.baseDir}/lib/`basename $j`
  +                    done
  +                fi
  +            done
  +
  +            # Symlink all the given shared libs files or paths into the shared/lib/ directory
  +            for i in ${toString cfg.sharedLibs}
  +            do
  +                if [ -f $i ]
  +                then
  +                    # If the given web application is a file, symlink it into the common/lib/ directory
  +                    ln -sfn $i ${cfg.baseDir}/shared/lib/`basename $i`
  +                elif [ -d $i ]
  +                then
  +                    # If the given web application is a directory, then iterate over the files
  +                    # in the special purpose directories and symlink them into the tomcat tree
  +
  +                    for j in $i/shared/lib/*
  +                    do
  +                        ln -sfn $j ${cfg.baseDir}/shared/lib/`basename $j`
  +                    done
  +                fi
  +            done
  +
  +            # Symlink all the given web applications files or paths into the webapps/ directory
  +            for i in ${toString cfg.webapps}
  +            do
  +                if [ -f $i ]
  +                then
  +                    # If the given web application is a file, symlink it into the webapps/ directory
  +                    ln -sfn $i ${cfg.baseDir}/webapps/`basename $i`
  +                elif [ -d $i ]
  +                then
  +                    # If the given web application is a directory, then iterate over the files
  +                    # in the special purpose directories and symlink them into the tomcat tree
  +
  +                    for j in $i/webapps/*
  +                    do
  +                        ln -sfn $j ${cfg.baseDir}/webapps/`basename $j`
  +                    done
  +
  +                    # Also symlink the configuration files if they are included
  +                    if [ -d $i/conf/Catalina ]
  +                    then
  +                        for j in $i/conf/Catalina/*
  +                        do
  +                            mkdir -p ${cfg.baseDir}/conf/Catalina/localhost
  +                            ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
  +                        done
  +                    fi
  +                fi
  +            done
  +
  +            ${toString (map (virtualHost: ''
  +              # Create webapps directory for the virtual host
  +              mkdir -p ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
  +
  +              # Modify ownership
  +              chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps
  +
  +              # Symlink all the given web applications files or paths into the webapps/ directory
  +              # of this virtual host
  +              for i in "${if virtualHost ? webapps then toString virtualHost.webapps else ""}"
  +              do
  +                  if [ -f $i ]
  +                  then
  +                      # If the given web application is a file, symlink it into the webapps/ directory
  +                      ln -sfn $i ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $i`
  +                  elif [ -d $i ]
  +                  then
  +                      # If the given web application is a directory, then iterate over the files
  +                      # in the special purpose directories and symlink them into the tomcat tree
  +
  +                      for j in $i/webapps/*
  +                      do
  +                          ln -sfn $j ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $j`
  +                      done
  +
  +                      # Also symlink the configuration files if they are included
  +                      if [ -d $i/conf/Catalina ]
  +                      then
  +                          for j in $i/conf/Catalina/*
  +                          do
  +                              mkdir -p ${cfg.baseDir}/conf/Catalina/${virtualHost.name}
  +                              ln -sfn $j ${cfg.baseDir}/conf/Catalina/${virtualHost.name}/`basename $j`
  +                          done
  +                      fi
                     fi
  -	      done
  -
  -	      ''
  -	    ) cfg.virtualHosts) }
  -
  -	    # Create a work/ directory
  -	    mkdir -p ${cfg.baseDir}/work
  -	    chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/work
  -
  -	    ${if cfg.axis2.enable then
  -		''
  -		# Copy the Axis2 web application
  -		cp -av ${pkgs.axis2}/webapps/axis2 ${cfg.baseDir}/webapps
  -
  -		# Turn off addressing, which causes many errors
  -		sed -i -e 's%<module ref="addressing"/>%<!-- <module ref="addressing"/> -->%' ${cfg.baseDir}/webapps/axis2/WEB-INF/conf/axis2.xml
  -
  -		# Modify permissions on the Axis2 application
  -		chown -R ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps/axis2
  -
  -		# Symlink all the given web service files or paths into the webapps/axis2/WEB-INF/services directory
  -		for i in ${toString cfg.axis2.services}
  -		do
  -		    if [ -f $i ]
  -		    then
  -			# If the given web service is a file, symlink it into the webapps/axis2/WEB-INF/services
  -			ln -sfn $i ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $i`
  -		    elif [ -d $i ]
  -		    then
  -			# If the given web application is a directory, then iterate over the files
  -		        # in the special purpose directories and symlink them into the tomcat tree
  -
  -			for j in $i/webapps/axis2/WEB-INF/services/*
  -			do
  -			    ln -sfn $j ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $j`
  -			done
  -
  -			# Also symlink the configuration files if they are included
  -		        if [ -d $i/conf/Catalina ]
  -		        then
  -			    for j in $i/conf/Catalina/*
  -			    do
  -			        ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
  -			    done
  -		        fi
  -		    fi
  -		done
  -		''
  -	    else ""}
  +              done
  +
  +              ''
  +            ) cfg.virtualHosts) }
  +
  +            # Create a work/ directory
  +            mkdir -p ${cfg.baseDir}/work
  +            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/work
  +
  +            ${if cfg.axis2.enable then
  +                ''
  +                # Copy the Axis2 web application
  +                cp -av ${pkgs.axis2}/webapps/axis2 ${cfg.baseDir}/webapps
  +
  +                # Turn off addressing, which causes many errors
  +                sed -i -e 's%<module ref="addressing"/>%<!-- <module ref="addressing"/> -->%' ${cfg.baseDir}/webapps/axis2/WEB-INF/conf/axis2.xml
  +
  +                # Modify permissions on the Axis2 application
  +                chown -R ${cfg.user}:${cfg.group} ${cfg.baseDir}/webapps/axis2
  +
  +                # Symlink all the given web service files or paths into the webapps/axis2/WEB-INF/services directory
  +                for i in ${toString cfg.axis2.services}
  +                do
  +                    if [ -f $i ]
  +                    then
  +                        # If the given web service is a file, symlink it into the webapps/axis2/WEB-INF/services
  +                        ln -sfn $i ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $i`
  +                    elif [ -d $i ]
  +                    then
  +                        # If the given web application is a directory, then iterate over the files
  +                        # in the special purpose directories and symlink them into the tomcat tree
  +
  +                        for j in $i/webapps/axis2/WEB-INF/services/*
  +                        do
  +                            ln -sfn $j ${cfg.baseDir}/webapps/axis2/WEB-INF/services/`basename $j`
  +                        done
  +
  +                        # Also symlink the configuration files if they are included
  +                        if [ -d $i/conf/Catalina ]
  +                        then
  +                            for j in $i/conf/Catalina/*
  +                            do
  +                                ln -sfn $j ${cfg.baseDir}/conf/Catalina/localhost/`basename $j`
  +                            done
  +                        fi
  +                    fi
  +                done
  +                ''
  +            else ""}
   
               ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c 'CATALINA_BASE=${cfg.baseDir} JAVA_HOME=${pkgs.jdk} JAVA_OPTS="${cfg.javaOpts}" CATALINA_OPTS="${cfg.catalinaOpts}" ${tomcat}/bin/startup.sh'
             '';
  
positive.code:         uid = config.ids.uids.tomcat;
          description = "Tomcat user";
          home = "/homeless-shelter";
  	extraGroups = cfg.extraGroups;
        };
  
      jobs.tomcat =
  
negative.code: 
        extraGroups = mkOption {
          default = [];
          example = [ "users" ];
          description = "Defines extra groups to which the tomcat user belongs.";
        };
  
        user = mkOption {
  