Initial commit.
This commit is contained in:
commit
ed7fc0d860
7 changed files with 1054 additions and 0 deletions
715
conf.py
Normal file
715
conf.py
Normal file
|
|
@ -0,0 +1,715 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import time
|
||||
|
||||
#!! This is the configuration of Nikola. !!#
|
||||
#!! You should edit it to your liking. !!#
|
||||
|
||||
|
||||
# Data about this site
|
||||
BLOG_AUTHOR = "Jonathan Harker"
|
||||
BLOG_TITLE = "Pukerua Bay Community Garden"
|
||||
# This is the main URL for your site. It will be used
|
||||
# in a prominent link
|
||||
SITE_URL = "http://gardens.pukeruabay.org.nz/"
|
||||
# This is the URL where nikola's output will be deployed.
|
||||
# If not set, defaults to SITE_URL
|
||||
# BASE_URL = "http://getnikola.com/"
|
||||
BLOG_EMAIL = "jonathan@harker.kiwi.nz"
|
||||
BLOG_DESCRIPTION = "The Pukerua Bay community garden and food forest project."
|
||||
|
||||
# Nikola is multilingual!
|
||||
#
|
||||
# Currently supported languages are:
|
||||
# bg Bulgarian
|
||||
# ca Catalan
|
||||
# cs Czech [ALTERNATIVELY cz]
|
||||
# de German
|
||||
# el Greek [NOT gr!]
|
||||
# en English
|
||||
# eo Esperanto
|
||||
# es Spanish
|
||||
# et Estonian
|
||||
# eu Basque
|
||||
# fa Persian
|
||||
# fi Finnish
|
||||
# fr French
|
||||
# hi Hindi
|
||||
# hr Croatian
|
||||
# it Italian
|
||||
# ja Japanese [NOT jp!]
|
||||
# nb Norwegian Bokmål
|
||||
# nl Dutch
|
||||
# pt_br Portuguese (Brasil)
|
||||
# pl Polish
|
||||
# ru Russian
|
||||
# sl Slovenian [NOT sl_si!]
|
||||
# tr Turkish (Turkey) [NOT tr_tr!]
|
||||
# ur Urdu
|
||||
# zh_cn Chinese (Simplified)
|
||||
#
|
||||
# If you want to use Nikola with a non-supported language you have to provide
|
||||
# a module containing the necessary translations
|
||||
# (cf. the modules at nikola/data/themes/base/messages/).
|
||||
# If a specific post is not translated to a language, then the version
|
||||
# in the default language will be shown instead.
|
||||
|
||||
# What is the default language?
|
||||
DEFAULT_LANG = "en"
|
||||
|
||||
# What other languages do you have?
|
||||
# The format is {"translationcode" : "path/to/translation" }
|
||||
# the path will be used as a prefix for the generated pages location
|
||||
TRANSLATIONS = {
|
||||
DEFAULT_LANG: "",
|
||||
# Example for another language:
|
||||
# "es": "./es",
|
||||
}
|
||||
|
||||
# What will translated input files be named like?
|
||||
|
||||
# If you have a page something.rst, then something.rst.pl will be considered
|
||||
# its Polish translation.
|
||||
# (in the above example: path == "something", lang == "pl", ext == "rst")
|
||||
# this pattern is also used for metadata:
|
||||
# something.meta -> something.meta.pl
|
||||
|
||||
TRANSLATIONS_PATTERN = "{path}.{ext}.{lang}"
|
||||
|
||||
# If you don't want your Polish files to be considered Perl code, use this:
|
||||
# TRANSLATIONS_PATTERN = "{path}.{lang}.{ext}"
|
||||
# Note that this pattern will become the default in v7.0.0.
|
||||
|
||||
# Links for the sidebar / navigation bar.
|
||||
# You should provide a key-value pair for each used language.
|
||||
NAVIGATION_LINKS = {
|
||||
DEFAULT_LANG: (
|
||||
('/archive.html', 'Archives'),
|
||||
('/categories/index.html', 'Tags'),
|
||||
('/rss.xml', 'RSS'),
|
||||
),
|
||||
}
|
||||
|
||||
# Below this point, everything is optional
|
||||
|
||||
# While nikola can select a sensible locale for each language,
|
||||
# sometimes explicit control can come handy.
|
||||
# In this file we express locales in the string form that
|
||||
# python's locales will accept in your OS, by example
|
||||
# "en_US.utf8" in unix-like OS, "English_United States" in Windows.
|
||||
# LOCALES = dict mapping language --> explicit locale for the languages
|
||||
# in TRANSLATIONS. You can ommit one or more keys.
|
||||
# LOCALE_FALLBACK = locale to use when an explicit locale is unavailable
|
||||
# LOCALE_DEFAULT = locale to use for languages not mentioned in LOCALES; if
|
||||
# not set the default Nikola mapping is used.
|
||||
|
||||
# POSTS and PAGES contains (wildcard, destination, template) tuples.
|
||||
#
|
||||
# The wildcard is used to generate a list of reSt source files
|
||||
# (whatever/thing.txt).
|
||||
#
|
||||
# That fragment could have an associated metadata file (whatever/thing.meta),
|
||||
# and optionally translated files (example for spanish, with code "es"):
|
||||
# whatever/thing.txt.es and whatever/thing.meta.es
|
||||
#
|
||||
# This assumes you use the default TRANSLATIONS_PATTERN.
|
||||
#
|
||||
# From those files, a set of HTML fragment files will be generated:
|
||||
# cache/whatever/thing.html (and maybe cache/whatever/thing.html.es)
|
||||
#
|
||||
# These files are combinated with the template to produce rendered
|
||||
# pages, which will be placed at
|
||||
# output / TRANSLATIONS[lang] / destination / pagename.html
|
||||
#
|
||||
# where "pagename" is the "slug" specified in the metadata file.
|
||||
#
|
||||
# The difference between POSTS and PAGES is that POSTS are added
|
||||
# to feeds and are considered part of a blog, while PAGES are
|
||||
# just independent HTML pages.
|
||||
#
|
||||
|
||||
POSTS = (
|
||||
("posts/*.rst", "posts", "post.tmpl"),
|
||||
("posts/*.txt", "posts", "post.tmpl"),
|
||||
)
|
||||
PAGES = (
|
||||
("stories/*.rst", "stories", "story.tmpl"),
|
||||
("stories/*.txt", "stories", "story.tmpl"),
|
||||
)
|
||||
|
||||
# One or more folders containing files to be copied as-is into the output.
|
||||
# The format is a dictionary of "source" "relative destination".
|
||||
# Default is:
|
||||
# FILES_FOLDERS = {'files': '' }
|
||||
# Which means copy 'files' into 'output'
|
||||
|
||||
# A mapping of languages to file-extensions that represent that language.
|
||||
# Feel free to add or delete extensions to any list, but don't add any new
|
||||
# compilers unless you write the interface for it yourself.
|
||||
#
|
||||
# 'rest' is reStructuredText
|
||||
# 'markdown' is MarkDown
|
||||
# 'html' assumes the file is html and just copies it
|
||||
COMPILERS = {
|
||||
"rest": ('.rst', '.txt'),
|
||||
"markdown": ('.md', '.mdown', '.markdown'),
|
||||
"textile": ('.textile',),
|
||||
"txt2tags": ('.t2t',),
|
||||
"bbcode": ('.bb',),
|
||||
"wiki": ('.wiki',),
|
||||
"ipynb": ('.ipynb',),
|
||||
"html": ('.html', '.htm'),
|
||||
# PHP files are rendered the usual way (i.e. with the full templates).
|
||||
# The resulting files have .php extensions, making it possible to run
|
||||
# them without reconfiguring your server to recognize them.
|
||||
"php": ('.php',),
|
||||
# Pandoc detects the input from the source filename
|
||||
# but is disabled by default as it would conflict
|
||||
# with many of the others.
|
||||
# "pandoc": ('.rst', '.md', '.txt'),
|
||||
}
|
||||
|
||||
# Create by default posts in one file format?
|
||||
# Set to False for two-file posts, with separate metadata.
|
||||
# ONE_FILE_POSTS = True
|
||||
|
||||
# If this is set to True, then posts that are not translated to a language
|
||||
# LANG will not be visible at all in the pages in that language.
|
||||
# If set to False, the DEFAULT_LANG version will be displayed for
|
||||
# untranslated posts.
|
||||
# HIDE_UNTRANSLATED_POSTS = False
|
||||
|
||||
# Paths for different autogenerated bits. These are combined with the
|
||||
# translation paths.
|
||||
|
||||
# Final locations are:
|
||||
# output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags)
|
||||
# output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag)
|
||||
# output / TRANSLATION[lang] / TAG_PATH / tag.xml (RSS feed for a tag)
|
||||
# TAG_PATH = "categories"
|
||||
|
||||
# If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain
|
||||
# the posts themselves. If set to False, it will be just a list of links.
|
||||
# TAG_PAGES_ARE_INDEXES = True
|
||||
|
||||
# Final location for the main blog page and sibling paginated pages is
|
||||
# output / TRANSLATION[lang] / INDEX_PATH / index-*.html
|
||||
# INDEX_PATH = ""
|
||||
|
||||
# Create per-month archives instead of per-year
|
||||
# CREATE_MONTHLY_ARCHIVE = False
|
||||
# Create one large archive instead of per-year
|
||||
# CREATE_SINGLE_ARCHIVE = False
|
||||
# Final locations for the archives are:
|
||||
# output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME
|
||||
# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html
|
||||
# output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html
|
||||
# ARCHIVE_PATH = ""
|
||||
# ARCHIVE_FILENAME = "archive.html"
|
||||
|
||||
# URLs to other posts/pages can take 3 forms:
|
||||
# rel_path: a relative URL to the current page/post (default)
|
||||
# full_path: a URL with the full path from the root
|
||||
# absolute: a complete URL (that includes the SITE_URL)
|
||||
# URL_TYPE = 'rel_path'
|
||||
|
||||
# Final location for the blog main RSS feed is:
|
||||
# output / TRANSLATION[lang] / RSS_PATH / rss.xml
|
||||
# RSS_PATH = ""
|
||||
|
||||
# Number of posts in RSS feeds
|
||||
# FEED_LENGTH = 10
|
||||
|
||||
# Slug the Tag URL easier for users to type, special characters are
|
||||
# often removed or replaced as well.
|
||||
# SLUG_TAG_PATH = True
|
||||
|
||||
# A list of redirection tuples, [("foo/from.html", "/bar/to.html")].
|
||||
#
|
||||
# A HTML file will be created in output/foo/from.html that redirects
|
||||
# to the "/bar/to.html" URL. notice that the "from" side MUST be a
|
||||
# relative URL.
|
||||
#
|
||||
# If you don't need any of these, just set to []
|
||||
# REDIRECTIONS = []
|
||||
|
||||
# Commands to execute to deploy. Can be anything, for example,
|
||||
# you may use rsync:
|
||||
# "rsync -rav --delete output/ joe@my.site:/srv/www/site"
|
||||
# And then do a backup, or run `nikola ping` from the `ping`
|
||||
# plugin (`nikola install_plugin ping`).
|
||||
# To do manual deployment, set it to []
|
||||
DEPLOY_COMMANDS = ['rsync -avz --delete output/* tauceti.openblue.co.nz:sites/pukeruabay/gardens/www/']
|
||||
|
||||
# Where the output site should be located
|
||||
# If you don't use an absolute path, it will be considered as relative
|
||||
# to the location of conf.py
|
||||
# OUTPUT_FOLDER = 'output'
|
||||
|
||||
# where the "cache" of partial generated content should be located
|
||||
# default: 'cache'
|
||||
# CACHE_FOLDER = 'cache'
|
||||
|
||||
# Filters to apply to the output.
|
||||
# A directory where the keys are either: a file extensions, or
|
||||
# a tuple of file extensions.
|
||||
#
|
||||
# And the value is a list of commands to be applied in order.
|
||||
#
|
||||
# Each command must be either:
|
||||
#
|
||||
# A string containing a '%s' which will
|
||||
# be replaced with a filename. The command *must* produce output
|
||||
# in place.
|
||||
#
|
||||
# Or:
|
||||
#
|
||||
# A python callable, which will be called with the filename as
|
||||
# argument.
|
||||
#
|
||||
# By default, there are no filters.
|
||||
#
|
||||
# Many filters are shipped with Nikola. A list is available in the manual:
|
||||
# <http://getnikola.com/handbook.html#post-processing-filters>
|
||||
# FILTERS = {
|
||||
# ".jpg": ["jpegoptim --strip-all -m75 -v %s"],
|
||||
# }
|
||||
|
||||
# Expert setting! Create a gzipped copy of each generated file. Cheap server-
|
||||
# side optimization for very high traffic sites or low memory servers.
|
||||
# GZIP_FILES = False
|
||||
# File extensions that will be compressed
|
||||
# GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.xml')
|
||||
# Use an external gzip command? None means no.
|
||||
# Example: GZIP_COMMAND = "pigz -k {filename}"
|
||||
# GZIP_COMMAND = None
|
||||
# Make sure the server does not return a "Accept-Ranges: bytes" header for
|
||||
# files compressed by this option! OR make sure that a ranged request does not
|
||||
# return partial content of another representation for these resources. Do not
|
||||
# use this feature if you do not understand what this means.
|
||||
|
||||
# Compiler to process LESS files.
|
||||
# LESS_COMPILER = 'lessc'
|
||||
|
||||
# A list of options to pass to the LESS compiler.
|
||||
# Final command is: LESS_COMPILER LESS_OPTIONS file.less
|
||||
# LESS_OPTIONS = []
|
||||
|
||||
# Compiler to process Sass files.
|
||||
# SASS_COMPILER = 'sass'
|
||||
|
||||
# A list of options to pass to the Sass compiler.
|
||||
# Final command is: SASS_COMPILER SASS_OPTIONS file.s(a|c)ss
|
||||
# SASS_OPTIONS = []
|
||||
|
||||
# #############################################################################
|
||||
# Image Gallery Options
|
||||
# #############################################################################
|
||||
|
||||
# Galleries are folders in galleries/
|
||||
# Final location of galleries will be output / GALLERY_PATH / gallery_name
|
||||
GALLERY_PATH = "galleries"
|
||||
THUMBNAIL_SIZE = 180
|
||||
MAX_IMAGE_SIZE = 1280
|
||||
USE_FILENAME_AS_TITLE = True
|
||||
EXTRA_IMAGE_EXTENSIONS = []
|
||||
#
|
||||
# If set to False, it will sort by filename instead. Defaults to True
|
||||
GALLERY_SORT_BY_DATE = True
|
||||
|
||||
# #############################################################################
|
||||
# HTML fragments and diverse things that are used by the templates
|
||||
# #############################################################################
|
||||
|
||||
# Data about post-per-page indexes.
|
||||
# INDEXES_PAGES defaults to 'old posts, page %d' or 'page %d' (translated),
|
||||
# depending on the value of INDEXES_PAGES_MAIN.
|
||||
# INDEXES_TITLE = "" # If this is empty, defaults to BLOG_TITLE
|
||||
# INDEXES_PAGES = "" # If this is empty, defaults to '[old posts,] page %d' (see above)
|
||||
# INDEXES_PAGES_MAIN = False # If True, INDEXES_PAGES is also displayed on
|
||||
# the main (the newest) index page (index.html)
|
||||
|
||||
# Name of the theme to use.
|
||||
THEME = "bootstrap3"
|
||||
|
||||
# Color scheme to be used for code blocks. If your theme provides
|
||||
# "assets/css/code.css" this is ignored.
|
||||
# Can be any of autumn borland bw colorful default emacs friendly fruity manni
|
||||
# monokai murphy native pastie perldoc rrt tango trac vim vs
|
||||
# CODE_COLOR_SCHEME = 'default'
|
||||
|
||||
# If you use 'site-reveal' theme you can select several subthemes
|
||||
# THEME_REVEAL_CONFIG_SUBTHEME = 'sky'
|
||||
# You can also use: beige/serif/simple/night/default
|
||||
|
||||
# Again, if you use 'site-reveal' theme you can select several transitions
|
||||
# between the slides
|
||||
# THEME_REVEAL_CONFIG_TRANSITION = 'cube'
|
||||
# You can also use: page/concave/linear/none/default
|
||||
|
||||
# date format used to display post dates.
|
||||
# (str used by datetime.datetime.strftime)
|
||||
# DATE_FORMAT = '%Y-%m-%d %H:%M'
|
||||
|
||||
# FAVICONS contains (name, file, size) tuples.
|
||||
# Used for create favicon link like this:
|
||||
# <link rel="name" href="file" sizes="size"/>
|
||||
# For creating favicons, take a look at:
|
||||
# http://www.netmagazine.com/features/create-perfect-favicon
|
||||
# FAVICONS = {
|
||||
# ("icon", "/favicon.ico", "16x16"),
|
||||
# ("icon", "/icon_128x128.png", "128x128"),
|
||||
# }
|
||||
|
||||
# Show only teasers in the index pages? Defaults to False.
|
||||
# INDEX_TEASERS = False
|
||||
|
||||
# A HTML fragment with the Read more... link.
|
||||
# The following tags exist and are replaced for you:
|
||||
# {link} A link to the full post page.
|
||||
# {read_more} The string “Read more” in the current language.
|
||||
# {{ A literal { (U+007B LEFT CURLY BRACKET)
|
||||
# }} A literal } (U+007D RIGHT CURLY BRACKET)
|
||||
# READ_MORE_LINK = '<p class="more"><a href="{link}">{read_more}…</a></p>'
|
||||
|
||||
# A HTML fragment describing the license, for the sidebar.
|
||||
LICENSE = ""
|
||||
# I recommend using the Creative Commons' wizard:
|
||||
# http://creativecommons.org/choose/
|
||||
# LICENSE = """
|
||||
# <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/ar/">
|
||||
# <img alt="Creative Commons License BY-NC-SA"
|
||||
# style="border-width:0; margin-bottom:12px;"
|
||||
# src="http://i.creativecommons.org/l/by-nc-sa/2.5/ar/88x31.png"></a>"""
|
||||
|
||||
# A small copyright notice for the page footer (in HTML).
|
||||
CONTENT_FOOTER = 'Contents © {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="http://getnikola.com" rel="nofollow">Nikola</a> {license}'
|
||||
CONTENT_FOOTER = CONTENT_FOOTER.format(email=BLOG_EMAIL,
|
||||
author=BLOG_AUTHOR,
|
||||
date=time.gmtime().tm_year,
|
||||
license=LICENSE)
|
||||
|
||||
# To use comments, you can choose between different third party comment
|
||||
# systems, one of "disqus", "livefyre", "intensedebate", "moot",
|
||||
# "googleplus", "facebook" or "isso"
|
||||
COMMENT_SYSTEM = "disqus"
|
||||
# And you also need to add your COMMENT_SYSTEM_ID which
|
||||
# depends on what comment system you use. The default is
|
||||
# "nikolademo" which is a test account for Disqus. More information
|
||||
# is in the manual.
|
||||
COMMENT_SYSTEM_ID = "pukeruabaygardens"
|
||||
|
||||
# Enable annotations using annotateit.org?
|
||||
# If set to False, you can still enable them for individual posts and pages
|
||||
# setting the "annotations" metadata.
|
||||
# If set to True, you can disable them for individual posts and pages using
|
||||
# the "noannotations" metadata.
|
||||
# ANNOTATIONS = False
|
||||
|
||||
# Create index.html for story folders?
|
||||
# STORY_INDEX = False
|
||||
# Enable comments on story pages?
|
||||
# COMMENTS_IN_STORIES = False
|
||||
# Enable comments on picture gallery pages?
|
||||
# COMMENTS_IN_GALLERIES = False
|
||||
|
||||
# What file should be used for directory indexes?
|
||||
# Defaults to index.html
|
||||
# Common other alternatives: default.html for IIS, index.php
|
||||
# INDEX_FILE = "index.html"
|
||||
|
||||
# If a link ends in /index.html, drop the index.html part.
|
||||
# http://mysite/foo/bar/index.html => http://mysite/foo/bar/
|
||||
# (Uses the INDEX_FILE setting, so if that is, say, default.html,
|
||||
# it will instead /foo/default.html => /foo)
|
||||
# (Note: This was briefly STRIP_INDEX_HTML in v 5.4.3 and 5.4.4)
|
||||
# Default = False
|
||||
# STRIP_INDEXES = False
|
||||
|
||||
# Should the sitemap list directories which only include other directories
|
||||
# and no files.
|
||||
# Default to True
|
||||
# If this is False
|
||||
# e.g. /2012 includes only /01, /02, /03, /04, ...: don't add it to the sitemap
|
||||
# if /2012 includes any files (including index.html)... add it to the sitemap
|
||||
# SITEMAP_INCLUDE_FILELESS_DIRS = True
|
||||
|
||||
# Instead of putting files in <slug>.html, put them in
|
||||
# <slug>/index.html. Also enables STRIP_INDEXES
|
||||
# This can be disabled on a per-page/post basis by adding
|
||||
# .. pretty_url: False
|
||||
# to the metadata
|
||||
# PRETTY_URLS = False
|
||||
|
||||
# If True, publish future dated posts right away instead of scheduling them.
|
||||
# Defaults to False.
|
||||
# FUTURE_IS_NOW = False
|
||||
|
||||
# If True, future dated posts are allowed in deployed output
|
||||
# Only the individual posts are published/deployed; not in indexes/sitemap
|
||||
# Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value.
|
||||
# DEPLOY_FUTURE = False
|
||||
# If False, draft posts will not be deployed
|
||||
# DEPLOY_DRAFTS = True
|
||||
|
||||
# Allows scheduling of posts using the rule specified here (new_post -s)
|
||||
# Specify an iCal Recurrence Rule: http://www.kanzaki.com/docs/ical/rrule.html
|
||||
# SCHEDULE_RULE = ''
|
||||
# If True, use the scheduling rule to all posts by default
|
||||
# SCHEDULE_ALL = False
|
||||
# If True, schedules post to today if possible, even if scheduled hour is over
|
||||
# SCHEDULE_FORCE_TODAY = False
|
||||
|
||||
# Do you want a add a Mathjax config file?
|
||||
# MATHJAX_CONFIG = ""
|
||||
|
||||
# If you are using the compile-ipynb plugin, just add this one:
|
||||
#MATHJAX_CONFIG = """
|
||||
#<script type="text/x-mathjax-config">
|
||||
#MathJax.Hub.Config({
|
||||
# tex2jax: {
|
||||
# inlineMath: [ ['$','$'], ["\\\(","\\\)"] ],
|
||||
# displayMath: [ ['$$','$$'], ["\\\[","\\\]"] ]
|
||||
# },
|
||||
# displayAlign: 'left', // Change this to 'center' to center equations.
|
||||
# "HTML-CSS": {
|
||||
# styles: {'.MathJax_Display': {"margin": 0}}
|
||||
# }
|
||||
#});
|
||||
#</script>
|
||||
#"""
|
||||
|
||||
# Do you want to customize the nbconversion of your IPython notebook?
|
||||
# IPYNB_CONFIG = {}
|
||||
# With the following example configuracion you can use a custom jinja template
|
||||
# called `toggle.tpl` which has to be located in your site/blog main folder:
|
||||
# IPYNB_CONFIG = {'Exporter':{'template_file': 'toggle'}}
|
||||
|
||||
# What MarkDown extensions to enable?
|
||||
# You will also get gist, nikola and podcast because those are
|
||||
# done in the code, hope you don't mind ;-)
|
||||
# MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite']
|
||||
|
||||
# Social buttons. This is sample code for AddThis (which was the default for a
|
||||
# long time). Insert anything you want here, or even make it empty.
|
||||
# SOCIAL_BUTTONS_CODE = """
|
||||
# <!-- Social buttons -->
|
||||
# <div id="addthisbox" class="addthis_toolbox addthis_peekaboo_style addthis_default_style addthis_label_style addthis_32x32_style">
|
||||
# <a class="addthis_button_more">Share</a>
|
||||
# <ul><li><a class="addthis_button_facebook"></a>
|
||||
# <li><a class="addthis_button_google_plusone_share"></a>
|
||||
# <li><a class="addthis_button_linkedin"></a>
|
||||
# <li><a class="addthis_button_twitter"></a>
|
||||
# </ul>
|
||||
# </div>
|
||||
# <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4f7088a56bb93798"></script>
|
||||
# <!-- End of social buttons -->
|
||||
# """
|
||||
|
||||
# Hide link to source for the posts?
|
||||
HIDE_SOURCELINK = True
|
||||
# Copy the source files for your pages?
|
||||
# Setting it to False implies HIDE_SOURCELINK = True
|
||||
COPY_SOURCES = False
|
||||
|
||||
# Modify the number of Post per Index Page
|
||||
# Defaults to 10
|
||||
# INDEX_DISPLAY_POST_COUNT = 10
|
||||
|
||||
# RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None,
|
||||
# the base.tmpl will use the feed Nikola generates. However, you may want to
|
||||
# change it for a feedburner feed or something else.
|
||||
# RSS_LINK = None
|
||||
|
||||
# Show only teasers in the RSS feed? Default to True
|
||||
# RSS_TEASERS = True
|
||||
|
||||
# A search form to search this site, for the sidebar. You can use a google
|
||||
# custom search (http://www.google.com/cse/)
|
||||
# Or a duckduckgo search: https://duckduckgo.com/search_box.html
|
||||
# Default is no search form.
|
||||
# SEARCH_FORM = ""
|
||||
#
|
||||
# This search form works for any site and looks good in the "site" theme where
|
||||
# it appears on the navigation bar:
|
||||
#
|
||||
#SEARCH_FORM = """
|
||||
#<!-- Custom search -->
|
||||
#<form method="get" id="search" action="http://duckduckgo.com/"
|
||||
# class="navbar-form pull-left">
|
||||
#<input type="hidden" name="sites" value="%s"/>
|
||||
#<input type="hidden" name="k8" value="#444444"/>
|
||||
#<input type="hidden" name="k9" value="#D51920"/>
|
||||
#<input type="hidden" name="kt" value="h"/>
|
||||
#<input type="text" name="q" maxlength="255"
|
||||
# placeholder="Search…" class="span2" style="margin-top: 4px;"/>
|
||||
#<input type="submit" value="DuckDuckGo Search" style="visibility: hidden;" />
|
||||
#</form>
|
||||
#<!-- End of custom search -->
|
||||
#""" % SITE_URL
|
||||
#
|
||||
# If you prefer a google search form, here's an example that should just work:
|
||||
#SEARCH_FORM = """
|
||||
#<!-- Custom search with google-->
|
||||
#<form id="search" action="http://google.com/search" method="get" class="navbar-form pull-left">
|
||||
#<input type="hidden" name="q" value="site:%s" />
|
||||
#<input type="text" name="q" maxlength="255" results="0" placeholder="Search"/>
|
||||
#</form>
|
||||
#<!-- End of custom search -->
|
||||
#""" % SITE_URL
|
||||
|
||||
# Also, there is a local search plugin you can use, based on Tipue, but it requires setting several
|
||||
# options:
|
||||
|
||||
# SEARCH_FORM = """
|
||||
# <span class="navbar-form pull-left">
|
||||
# <input type="text" id="tipue_search_input">
|
||||
# </span>"""
|
||||
#
|
||||
# BODY_END = """
|
||||
# <script type="text/javascript" src="/assets/js/tipuesearch_set.js"></script>
|
||||
# <script type="text/javascript" src="/assets/js/tipuesearch.js"></script>
|
||||
# <script type="text/javascript">
|
||||
# $(document).ready(function() {
|
||||
# $('#tipue_search_input').tipuesearch({
|
||||
# 'mode': 'json',
|
||||
# 'contentLocation': '/assets/js/tipuesearch_content.json',
|
||||
# 'showUrl': false
|
||||
# });
|
||||
# });
|
||||
# </script>
|
||||
# """
|
||||
|
||||
# EXTRA_HEAD_DATA = """
|
||||
# <link rel="stylesheet" type="text/css" href="/assets/css/tipuesearch.css">
|
||||
# <div id="tipue_search_content" style="margin-left: auto; margin-right: auto; padding: 20px;"></div>
|
||||
# """
|
||||
# ENABLED_EXTRAS = ['local_search']
|
||||
#
|
||||
|
||||
|
||||
# Use content distribution networks for jquery and twitter-bootstrap css and js
|
||||
# If this is True, jquery is served from the Google CDN and twitter-bootstrap
|
||||
# is served from the NetDNA CDN
|
||||
# Set this to False if you want to host your site without requiring access to
|
||||
# external resources.
|
||||
# USE_CDN = False
|
||||
|
||||
# Extra things you want in the pages HEAD tag. This will be added right
|
||||
# before </head>
|
||||
# EXTRA_HEAD_DATA = ""
|
||||
# Google Analytics or whatever else you use. Added to the bottom of <body>
|
||||
# in the default template (base.tmpl).
|
||||
# BODY_END = ""
|
||||
|
||||
# The possibility to extract metadata from the filename by using a
|
||||
# regular expression.
|
||||
# To make it work you need to name parts of your regular expression.
|
||||
# The following names will be used to extract metadata:
|
||||
# - title
|
||||
# - slug
|
||||
# - date
|
||||
# - tags
|
||||
# - link
|
||||
# - description
|
||||
#
|
||||
# An example re is the following:
|
||||
# '(?P<date>\d{4}-\d{2}-\d{2})-(?P<slug>.*)-(?P<title>.*)\.md'
|
||||
# FILE_METADATA_REGEXP = None
|
||||
|
||||
# Additional metadata that is added to a post when creating a new_post
|
||||
# ADDITIONAL_METADATA = {}
|
||||
|
||||
# Nikola supports Twitter Card summaries / Open Graph.
|
||||
# Twitter cards make it possible for you to attach media to Tweets
|
||||
# that link to your content.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# Please note, that you need to opt-in for using Twitter Cards!
|
||||
# To do this please visit
|
||||
# https://dev.twitter.com/form/participate-twitter-cards
|
||||
#
|
||||
# Uncomment and modify to following lines to match your accounts.
|
||||
# Specifying the id for either 'site' or 'creator' will be preferred
|
||||
# over the cleartext username. Specifying an ID is not necessary.
|
||||
# Displaying images is currently not supported.
|
||||
# TWITTER_CARD = {
|
||||
# # 'use_twitter_cards': True, # enable Twitter Cards / Open Graph
|
||||
# # 'site': '@website', # twitter nick for the website
|
||||
# # 'site:id': 123456, # Same as site, but the website's Twitter user ID
|
||||
# # instead.
|
||||
# # 'creator': '@username', # Username for the content creator / author.
|
||||
# # 'creator:id': 654321, # Same as creator, but the Twitter user's ID.
|
||||
# }
|
||||
|
||||
|
||||
# Post's dates are considered in UTC by default, if you want to use
|
||||
# another time zone, please set TIMEZONE to match. Check the available
|
||||
# list from Wikipedia:
|
||||
# http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
# (eg. 'Europe/Zurich')
|
||||
# Also, if you want to use a different time zone in some of your posts,
|
||||
# you can use W3C-DTF Format (ex. 2012-03-30T23:00:00+02:00)
|
||||
#
|
||||
TIMEZONE = 'Pacific/Auckland'
|
||||
|
||||
# If webassets is installed, bundle JS and CSS to make site loading faster
|
||||
# USE_BUNDLES = True
|
||||
|
||||
# Plugins you don't want to use. Be careful :-)
|
||||
# DISABLED_PLUGINS = ["render_galleries"]
|
||||
|
||||
# Add the absolute paths to directories containing plugins to use them.
|
||||
# For example, the `plugins` directory of your clone of the Nikola plugins
|
||||
# repository.
|
||||
# EXTRA_PLUGINS_DIRS = []
|
||||
|
||||
# Experimental plugins - use at your own risk.
|
||||
# They probably need some manual adjustments - please see their respective
|
||||
# readme.
|
||||
# ENABLED_EXTRAS = [
|
||||
# 'planetoid',
|
||||
# 'ipynb',
|
||||
# 'local_search',
|
||||
# 'render_mustache',
|
||||
# ]
|
||||
|
||||
# List of regular expressions, links matching them will always be considered
|
||||
# valid by "nikola check -l"
|
||||
# LINK_CHECK_WHITELIST = []
|
||||
|
||||
# If set to True, enable optional hyphenation in your posts (requires pyphen)
|
||||
# HYPHENATE = False
|
||||
|
||||
# The <hN> tags in HTML generated by certain compilers (reST/Markdown)
|
||||
# will be demoted by that much (1 → h1 will become h2 and so on)
|
||||
# This was a hidden feature of the Markdown and reST compilers in the
|
||||
# past. Useful especially if your post titles are in <h1> tags too, for
|
||||
# example.
|
||||
# (defaults to 1.)
|
||||
# DEMOTE_HEADERS = 1
|
||||
|
||||
# You can configure the logging handlers installed as plugins or change the
|
||||
# log level of the default stdout handler.
|
||||
LOGGING_HANDLERS = {
|
||||
'stderr': {'loglevel': 'WARNING', 'bubble': True},
|
||||
#'smtp': {
|
||||
# 'from_addr': 'test-errors@example.com',
|
||||
# 'recipients': ('test@example.com'),
|
||||
# 'credentials':('testusername', 'password'),
|
||||
# 'server_addr': ('127.0.0.1', 25),
|
||||
# 'secure': (),
|
||||
# 'level': 'DEBUG',
|
||||
# 'bubble': True
|
||||
#}
|
||||
}
|
||||
|
||||
# Templates will use those filters, along with the defaults.
|
||||
# Consult your engine's documentation on filters if you need help defining
|
||||
# those.
|
||||
# TEMPLATE_FILTERS = {}
|
||||
|
||||
# Put in global_context things you want available on all your templates.
|
||||
# It can be anything, data, functions, modules, etc.
|
||||
GLOBAL_CONTEXT = {}
|
||||
BIN
images/communitygarden-map.png
Normal file
BIN
images/communitygarden-map.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
50
plugins/microdata/README.md
Normal file
50
plugins/microdata/README.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
This plugin adds microdata semantic markups in reStructuredText for Nikola static blog generator. The original author is Axel Haustant (noirbizarre). This code is fork from https://github.com/noirbizarre/pelican-microdata. The standalone package will be at https://github.com/ivanteoh/nikola-microdata
|
||||
|
||||
Currently supported in general:
|
||||
|
||||
* `itemscope`
|
||||
* `itemprop`
|
||||
|
||||
### Usage
|
||||
|
||||
```ReST
|
||||
|
||||
.. itemscope:: <Schema type>
|
||||
:tag: element type (default: div)
|
||||
|
||||
Nested content
|
||||
|
||||
|
||||
:itemprop:`Displayed test <itemprop name>`
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
This reStructuredText document:
|
||||
|
||||
```ReST
|
||||
|
||||
.. itemscope: Person
|
||||
:tag: p
|
||||
|
||||
My name is :itemprop:`Bob Smith <name>`
|
||||
but people call me :itemprop:`Smithy <nickanme>`.
|
||||
Here is my home page:
|
||||
:itemprop:`www.exemple.com <url:http://www.example.com>`
|
||||
I live in Albuquerque, NM and work as an :itemprop:`engineer <title>`
|
||||
at :itemprop:`ACME Corp <affiliation>`.
|
||||
```
|
||||
|
||||
will result in:
|
||||
|
||||
```html
|
||||
|
||||
<p itemscope itemtype="http://data-vocabulary.org/Person">
|
||||
My name is <span itemprop="name">Bob Smith</span>
|
||||
but people call me <span itemprop="nickname">Smithy</span>.
|
||||
Here is my home page:
|
||||
<a href="http://www.example.com" itemprop="url">www.example.com</a>
|
||||
I live in Albuquerque, NM and work as an <span itemprop="title">engineer</span>
|
||||
at <span itemprop="affiliation">ACME Corp</span>.
|
||||
</p>
|
||||
```
|
||||
13
plugins/microdata/microdata.plugin
Normal file
13
plugins/microdata/microdata.plugin
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
[Core]
|
||||
Name = rest_microdata
|
||||
Module = microdata
|
||||
Tests = test_microdata
|
||||
|
||||
[Nikola]
|
||||
MinVersion = 6.3.0
|
||||
|
||||
[Documentation]
|
||||
Author = Axel Haustant, Ivan Teoh
|
||||
Version = 0.1
|
||||
Website = http://plugins.getnikola.com/#microdata
|
||||
Description = Microdata semantic markups support for Nikola static blog generator.
|
||||
188
plugins/microdata/microdata.py
Normal file
188
plugins/microdata/microdata.py
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright © 2013-2014 Axel Haustant, Ivan Teoh and others.
|
||||
|
||||
# pelican-microdata is LGPL-licensed.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import re
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives, Directive, roles
|
||||
from nikola.plugin_categories import RestExtension
|
||||
from nikola.plugins.compile.rest import add_node
|
||||
|
||||
RE_ROLE = re.compile(r'(?P<value>.+?)?\s*\<(?P<name>.+)\>')
|
||||
|
||||
|
||||
class Plugin(RestExtension):
|
||||
|
||||
name = "rest_microdata"
|
||||
|
||||
def set_site(self, site):
|
||||
self.site = site
|
||||
directives.register_directive('itemscope', ItemScopeDirective)
|
||||
directives.register_directive('itempropblock', ItemPropDirective)
|
||||
roles.register_canonical_role('itemprop', itemprop_role)
|
||||
|
||||
add_node(ItemProp, visit_ItemProp, depart_ItemProp)
|
||||
add_node(ItemPropBlock, visit_ItemPropBlock, depart_ItemPropBlock)
|
||||
add_node(ItemScope, visit_ItemScope, depart_ItemScope)
|
||||
|
||||
return super(Plugin, self).set_site(site)
|
||||
|
||||
|
||||
class ItemProp(nodes.Inline, nodes.TextElement):
|
||||
pass
|
||||
|
||||
|
||||
def itemprop_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
match = RE_ROLE.match(text)
|
||||
if not match or not match.group('name'):
|
||||
raise ValueError('%s does not match expected itemprop format: :itemprop:`value <name>`')
|
||||
value = ''
|
||||
if match.group('value'):
|
||||
value = match.group('value')
|
||||
name = match.group('name')
|
||||
info = ''
|
||||
tag = 'span'
|
||||
if ':' in name:
|
||||
# depreciated, use | for nikola
|
||||
name, info = name.split(':', 1)
|
||||
elif '|' in name:
|
||||
names = name.split('|', 2)
|
||||
name = names[0]
|
||||
if len(names) > 1:
|
||||
info = names[1]
|
||||
if len(names) > 2:
|
||||
tag = names[2]
|
||||
return [ItemProp(value, value, name=name, info=info, tag=tag)], []
|
||||
|
||||
|
||||
class ItemPropBlock(nodes.Element):
|
||||
def __init__(self, tagname, itemprop, classes=None):
|
||||
kwargs = {
|
||||
'itemprop': itemprop,
|
||||
}
|
||||
if classes:
|
||||
kwargs['class'] = classes
|
||||
super(ItemPropBlock, self).__init__('', **kwargs)
|
||||
self.tagname = tagname
|
||||
|
||||
|
||||
class ItemPropDirective(Directive):
|
||||
required_arguments = 1
|
||||
has_content = True
|
||||
option_spec = {
|
||||
'tag': directives.unchanged,
|
||||
'class': directives.unchanged,
|
||||
}
|
||||
|
||||
def run(self):
|
||||
# Raise an error if the directive does not have contents.
|
||||
self.assert_has_content()
|
||||
itemprop = self.arguments[0]
|
||||
tag = self.options.get('tag', 'div')
|
||||
classes = self.options.get('class', None)
|
||||
node = ItemPropBlock(tag, itemprop, classes)
|
||||
self.add_name(node)
|
||||
self.state.nested_parse(self.content, self.content_offset, node)
|
||||
return [node]
|
||||
|
||||
|
||||
class ItemScope(nodes.Element):
|
||||
def __init__(self, tagname, itemtype, itemprop=None, compact=False, classes=None):
|
||||
kwargs = {
|
||||
'itemscope': None,
|
||||
'itemtype': "http://data-vocabulary.org/%s" % itemtype,
|
||||
}
|
||||
if itemprop:
|
||||
kwargs['itemprop'] = itemprop
|
||||
if classes:
|
||||
kwargs['class'] = classes
|
||||
super(ItemScope, self).__init__('', **kwargs)
|
||||
self.tagname = tagname
|
||||
self.compact = tagname == 'p' or compact
|
||||
|
||||
|
||||
class ItemScopeDirective(Directive):
|
||||
required_arguments = 1
|
||||
has_content = True
|
||||
option_spec = {
|
||||
'tag': directives.unchanged,
|
||||
'itemprop': directives.unchanged,
|
||||
'compact': directives.unchanged,
|
||||
'class': directives.unchanged,
|
||||
}
|
||||
|
||||
def run(self):
|
||||
# Raise an error if the directive does not have contents.
|
||||
self.assert_has_content()
|
||||
itemtype = self.arguments[0]
|
||||
tag = self.options.get('tag', 'div')
|
||||
itemprop = self.options.get('itemprop', None)
|
||||
compact = 'compact' in self.options
|
||||
classes = self.options.get('class', None)
|
||||
node = ItemScope(tag, itemtype, itemprop, compact, classes)
|
||||
self.add_name(node)
|
||||
self.state.nested_parse(self.content, self.content_offset, node)
|
||||
return [node]
|
||||
|
||||
|
||||
def visit_ItemProp(self, node):
|
||||
if not node['tag']:
|
||||
node['tag'] = 'span'
|
||||
|
||||
if node['name'] == 'url':
|
||||
node['tag'] = 'a'
|
||||
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name'], href=node['info']))
|
||||
elif node['tag'] == 'img':
|
||||
self.body.append(self.emptytag(node, node['tag'], '', itemprop=node['name'], src=node['info']))
|
||||
elif node['tag'] == 'time':
|
||||
# TODO: auto convert the time
|
||||
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name'], datetime=node['info']))
|
||||
elif node['tag'] == 'meta':
|
||||
# TODO: auto convert the time
|
||||
self.body.append(self.emptytag(node, node['tag'], '', itemprop=node['name'], content=node['info']))
|
||||
else:
|
||||
self.body.append(self.starttag(node, node['tag'], '', itemprop=node['name']))
|
||||
|
||||
|
||||
def depart_ItemProp(self, node):
|
||||
end_tag = '</' + node['tag'] + '>'
|
||||
if node['tag'] == 'img' or node['tag'] == 'meta':
|
||||
return
|
||||
self.body.append(end_tag)
|
||||
|
||||
|
||||
def visit_ItemPropBlock(self, node):
|
||||
self.body.append(node.starttag())
|
||||
|
||||
|
||||
def depart_ItemPropBlock(self, node):
|
||||
self.body.append(node.endtag())
|
||||
|
||||
|
||||
def visit_ItemScope(self, node):
|
||||
self.context.append(self.compact_simple)
|
||||
self.compact_simple = node.compact
|
||||
self.body.append(node.starttag())
|
||||
|
||||
|
||||
def depart_ItemScope(self, node):
|
||||
self.compact_simple = self.context.pop()
|
||||
self.body.append(node.endtag())
|
||||
BIN
plugins/microdata/microdata.pyc
Normal file
BIN
plugins/microdata/microdata.pyc
Normal file
Binary file not shown.
88
posts/pukerua-bay-school-gala.rst
Normal file
88
posts/pukerua-bay-school-gala.rst
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
.. title: Pukerua Bay Community Garden Food Forest Project
|
||||
.. slug: pukerua-bay-community-garden
|
||||
.. date: 2014/03/29 01:45:23
|
||||
.. tags:
|
||||
.. link:
|
||||
.. description:
|
||||
.. type: restructuredText
|
||||
|
||||
.. image:: /assets/images/communitygarden-map.png
|
||||
:align: right
|
||||
:alt: Map of the proposed community garden site in the Muri Reserve.
|
||||
|
||||
Hi folks! If you're reading this, you've either searched for it on Google,
|
||||
or got here from the URL on the brochure at the School Gala. Either way -
|
||||
welcome to the website! I'd like to use this as a hub for lively discussions,
|
||||
organising events, planning sessions and working bees, and sharing of ideas
|
||||
and hopes and goals.
|
||||
|
||||
This site will change once we get started. I will gather the ideas
|
||||
from the gala day and put them up here, and reorganise things into
|
||||
categories as we go.
|
||||
|
||||
Proposed garden site in Muri Reserve
|
||||
------------------------------------
|
||||
|
||||
The Pukerua Bay Residents' Association have decided on
|
||||
a location for the community garden, in the Muri Reserve behind the closed Muri
|
||||
train station, as indicated on the map. There is a
|
||||
`Google map with more details here <http://goo.gl/Odu8Wx>`_.
|
||||
|
||||
The idea of a community garden in Pukerua Bay has been around for a while, but
|
||||
has gathered steam over the last couple of years. I'd like to really help us
|
||||
get it off the ground by gathering a quorum of interested and willing folks,
|
||||
to plan the next steps.
|
||||
|
||||
Inspirational videos
|
||||
--------------------
|
||||
|
||||
Martin Crawford of the Agroforestry Research Centre in Devon UK, shows us
|
||||
around his forest garden project, and explains some of the science and practical
|
||||
principles behind it:
|
||||
|
||||
.. youtube:: b_fhAch5qiY
|
||||
:height: 315
|
||||
:width: 560
|
||||
|
||||
And in New Zealand, Robert and Robyn Guyton show us around their two acre
|
||||
food forest in Riverton, Southland:
|
||||
|
||||
.. youtube:: L74WkW1rWKU
|
||||
:height: 315
|
||||
:width: 560
|
||||
|
||||
Planning
|
||||
--------
|
||||
|
||||
There are several things that we will need to plan:
|
||||
|
||||
- Site assessments of micro-climate, shelter, layout.
|
||||
- Ground slope and consideration of constructing swales for water retention.
|
||||
- Ground clearance and re-seeding groundcover.
|
||||
- Access to the site for larger equipment.
|
||||
- Orchard planning and plant selection.
|
||||
- Layout and construction of raised beds. Do we want to share the beds, or
|
||||
lease individual allotment space, or both?
|
||||
- Get a compost system started.
|
||||
- Plant and mulch the orchard trees.
|
||||
- Get local beekeepers on board and find a safe spot for some beehives.
|
||||
- Potential space for chicken coops.
|
||||
|
||||
Contact us!
|
||||
-----------
|
||||
|
||||
To get in contact, come along to the next `Residents' Association meeting <http://pukeruabay.org.nz/>`_
|
||||
or email `Jonathan <mailto:jonathan@harker.kiwi.nz>`_. I will set up an email list from
|
||||
people who registered interest at the gala day.
|
||||
|
||||
Links
|
||||
-----
|
||||
|
||||
- The excellent *Manual for creating a community food forest on public land*
|
||||
by Andy Cambeis of the Hawea Flat Food Forest Trust. The manual is very
|
||||
thorough, Creative-Commons licensed and available
|
||||
`online <https://docs.google.com/document/d/1TGhzTV_PdZAkRpxQgKmtzDHg0lcLzat7WXMm5-dvaHg/edit>`_.
|
||||
- Tim and the resources on his site, `Pig in the mud <http://piginthemud.com>`_. Tim helps to run
|
||||
a Wellington community garden at the top of Majoribanks Street.
|
||||
- The national `Permaculture Hui 2014 <http://permaculturehui2014.org.nz/>`_ is on 25-27 April in
|
||||
Island Bay and should be very educational.
|
||||
Loading…
Add table
Reference in a new issue