├── .gitignore
├── LICENSE
├── README.md
├── conf.py
├── files
└── admin
│ ├── config.yml
│ └── index.html
├── netlify.toml
├── posts
└── your-first-post.md
├── requirements.in
├── requirements.txt
└── runtime.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | env/
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 | lib/
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | *.egg-info/
24 | .installed.cfg
25 | *.egg
26 |
27 | # PyInstaller
28 | # Usually these files are written by a python script from a template
29 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
30 | *.manifest
31 | *.spec
32 |
33 | # Installer logs
34 | pip-log.txt
35 | pip-delete-this-directory.txt
36 |
37 | # Unit test / coverage reports
38 | htmlcov/
39 | .tox/
40 | .coverage
41 | .coverage.*
42 | .cache
43 | nosetests.xml
44 | coverage.xml
45 | *,cover
46 | .hypothesis/
47 |
48 | # Translations
49 | *.mo
50 | *.pot
51 |
52 | # Django stuff:
53 | *.log
54 | local_settings.py
55 |
56 | # Flask stuff:
57 | instance/
58 | .webassets-cache
59 |
60 | # Scrapy stuff:
61 | .scrapy
62 |
63 | # Sphinx documentation
64 | docs/_build/
65 |
66 | # PyBuilder
67 | target/
68 |
69 | # IPython Notebook
70 | .ipynb_checkpoints
71 |
72 | # pyenv
73 | .python-version
74 |
75 | # celery beat schedule file
76 | celerybeat-schedule
77 |
78 | # dotenv
79 | .env
80 |
81 | # virtualenv
82 | venv/
83 | ENV/
84 |
85 | # Spyder project settings
86 | .spyderproject
87 |
88 | # Rope project settings
89 | .ropeproject
90 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Chris Warrick
4 | Copyright (c) 2016 Roberto Alsina
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a sample Nikola blog, compatible with Netlify CMS.
2 |
3 | Hit this one button:
4 |
5 | [](https://app.netlify.com/start/deploy?repository=https://github.com/getnikola/nikola-netlify-cms&stack=cms)
6 |
7 | You will then receive an e-mail, asking you to register at your new site. Consider changing your site name in the General settings, and site URL in `files/admin/config.yml`. You should end up with a site with the Netlify CMS available in `/admin/`. Congratulations!
8 |
9 | *PS.* Netlify CMS can be used without Netlify’s CDN/hosting service, but that requires some extra configuration work. Also, *preview images* require theme support. For bootblog4, if your posts have the status of `featured`, they will be used on the index page as a background of the featured post.
10 |
--------------------------------------------------------------------------------
/conf.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import time
4 |
5 | # !! This is the configuration of Nikola. !! #
6 | # !! You should edit it to your liking. !! #
7 |
8 |
9 | # ! Some settings can be different in different languages.
10 | # ! A comment stating (translatable) is used to denote those.
11 | # ! There are two ways to specify a translatable setting:
12 | # ! (a) BLOG_TITLE = "My Blog"
13 | # ! (b) BLOG_TITLE = {"en": "My Blog", "es": "Mi Blog"}
14 | # ! Option (a) is used when you don't want that setting translated.
15 | # ! Option (b) is used for settings that are different in different languages.
16 |
17 |
18 | # Data about this site
19 | BLOG_AUTHOR = "Your Name" # (translatable)
20 | BLOG_TITLE = "Demo Site" # (translatable)
21 | # This is the main URL for your site. It will be used
22 | # in a prominent link. Don't forget the protocol (http/https)!
23 | SITE_URL = "https://example.com/"
24 | # This is the URL where Nikola's output will be deployed.
25 | # If not set, defaults to SITE_URL
26 | # BASE_URL = "https://example.com/"
27 | BLOG_EMAIL = "joe@demo.site"
28 | BLOG_DESCRIPTION = "This is a demo site for Nikola." # (translatable)
29 |
30 | # Nikola is multilingual!
31 | #
32 | # Currently supported languages are:
33 | #
34 | # en English
35 | # af Afrikaans
36 | # ar Arabic
37 | # az Azerbaijani
38 | # bg Bulgarian
39 | # bs Bosnian
40 | # ca Catalan
41 | # cs Czech [ALTERNATIVELY cz]
42 | # da Danish
43 | # de German
44 | # el Greek [NOT gr]
45 | # eo Esperanto
46 | # es Spanish
47 | # et Estonian
48 | # eu Basque
49 | # fa Persian
50 | # fi Finnish
51 | # fr French
52 | # fur Friulian
53 | # gl Galician
54 | # he Hebrew
55 | # hi Hindi
56 | # hr Croatian
57 | # hu Hungarian
58 | # ia Interlingua
59 | # id Indonesian
60 | # it Italian
61 | # ja Japanese [NOT jp]
62 | # ko Korean
63 | # lt Lithuanian
64 | # ml Malayalam
65 | # nb Norwegian (Bokmål)
66 | # nl Dutch
67 | # pa Punjabi
68 | # pl Polish
69 | # pt Portuguese
70 | # pt_br Portuguese (Brazil)
71 | # ru Russian
72 | # sk Slovak
73 | # sl Slovene
74 | # sq Albanian
75 | # sr Serbian (Cyrillic)
76 | # sr_latin Serbian (Latin)
77 | # sv Swedish
78 | # te Telugu
79 | # th Thai
80 | # tr Turkish [NOT tr_TR]
81 | # uk Ukrainian
82 | # ur Urdu
83 | # vi Vietnamese
84 | # zh_cn Chinese (Simplified)
85 | # zh_tw Chinese (Traditional)
86 | #
87 | # If you want to use Nikola with a non-supported language you have to provide
88 | # a module containing the necessary translations
89 | # (cf. the modules at nikola/data/themes/base/messages/).
90 | # If a specific post is not translated to a language, then the version
91 | # in the default language will be shown instead.
92 |
93 | # What is the default language?
94 | DEFAULT_LANG = "en"
95 |
96 | # What other languages do you have?
97 | # The format is {"translationcode" : "path/to/translation" }
98 | # the path will be used as a prefix for the generated pages location
99 | TRANSLATIONS = {
100 | DEFAULT_LANG: "",
101 | # Example for another language:
102 | # "es": "./es",
103 | }
104 |
105 | # What will translated input files be named like?
106 |
107 | # If you have a page something.rst, then something.pl.rst will be considered
108 | # its Polish translation.
109 | # (in the above example: path == "something", ext == "rst", lang == "pl")
110 | # this pattern is also used for metadata:
111 | # something.meta -> something.pl.meta
112 |
113 | TRANSLATIONS_PATTERN = '{path}.{lang}.{ext}'
114 |
115 | # Links for the sidebar / navigation bar. (translatable)
116 | # This is a dict. The keys are languages, and values are tuples.
117 | #
118 | # For regular links:
119 | # ('https://getnikola.com/', 'Nikola Homepage')
120 | #
121 | # For submenus:
122 | # (
123 | # (
124 | # ('https://apple.com/', 'Apple'),
125 | # ('https://orange.com/', 'Orange'),
126 | # ),
127 | # 'Fruits'
128 | # )
129 | #
130 | # WARNING: Support for submenus is theme-dependent.
131 | # Only one level of submenus is supported.
132 | # WARNING: Some themes, including the default Bootstrap 4 theme,
133 | # may present issues if the menu is too large.
134 | # (in Bootstrap, the navbar can grow too large and cover contents.)
135 | # WARNING: If you link to directories, make sure to follow
136 | # ``STRIP_INDEXES``. If it’s set to ``True``, end your links
137 | # with a ``/``, otherwise end them with ``/index.html`` — or
138 | # else they won’t be highlighted when active.
139 |
140 | NAVIGATION_LINKS = {
141 | DEFAULT_LANG: (
142 | ("/archive.html", "Archive"),
143 | ("/categories/", "Tags"),
144 | ("/rss.xml", "RSS feed"),
145 | ),
146 | }
147 |
148 | # Alternative navigation links. Works the same way NAVIGATION_LINKS does,
149 | # although themes may not always support them. (translatable)
150 | # (Bootstrap 4: right-side of navbar, Bootblog 4: right side of title)
151 | NAVIGATION_ALT_LINKS = {
152 | DEFAULT_LANG: ()
153 | }
154 |
155 | # Name of the theme to use.
156 | THEME = "bootblog4"
157 |
158 | # Primary color of your theme. This will be used to customize your theme.
159 | # Must be a HEX value.
160 | THEME_COLOR = '#5670d4'
161 |
162 | # Theme configuration. Fully theme-dependent. (translatable)
163 | # Examples below are for bootblog4.
164 | # bootblog4 supports: featured_large featured_small featured_on_mobile
165 | # featured_large_image_on_mobile featured_strip_html sidebar
166 | # bootstrap4 supports: navbar_light (defaults to False)
167 | THEME_CONFIG = {
168 | DEFAULT_LANG: {
169 | # Show the latest featured post in a large box, with the previewimage as its background.
170 | 'featured_large': True,
171 | # Show the first (remaining) two featured posts in small boxes.
172 | 'featured_small': False,
173 | # Show featured posts on mobile.
174 | 'featured_on_mobile': True,
175 | # Show image in `featured_large` on mobile.
176 | # `featured_small` displays them only on desktop.
177 | 'featured_large_image_on_mobile': True,
178 | # Strip HTML from featured post text.
179 | 'featured_strip_html': False,
180 | # Contents of the sidebar, If empty, the sidebar is not displayed.
181 | 'sidebar': ''
182 | }
183 | }
184 |
185 | # POSTS and PAGES contains (wildcard, destination, template) tuples.
186 | # (translatable)
187 | #
188 | # The wildcard is used to generate a list of source files
189 | # (whatever/thing.rst, for example).
190 | #
191 | # That fragment could have an associated metadata file (whatever/thing.meta),
192 | # and optionally translated files (example for Spanish, with code "es"):
193 | # whatever/thing.es.rst and whatever/thing.es.meta
194 | #
195 | # This assumes you use the default TRANSLATIONS_PATTERN.
196 | #
197 | # From those files, a set of HTML fragment files will be generated:
198 | # cache/whatever/thing.html (and maybe cache/whatever/thing.html.es)
199 | #
200 | # These files are combined with the template to produce rendered
201 | # pages, which will be placed at
202 | # output/TRANSLATIONS[lang]/destination/pagename.html
203 | #
204 | # where "pagename" is the "slug" specified in the metadata file.
205 | # The page might also be placed in /destination/pagename/index.html
206 | # if PRETTY_URLS are enabled.
207 | #
208 | # The difference between POSTS and PAGES is that POSTS are added
209 | # to feeds, indexes, tag lists and archives and are considered part
210 | # of a blog, while PAGES are just independent HTML pages.
211 | #
212 | # Finally, note that destination can be translated, i.e. you can
213 | # specify a different translation folder per language. Example:
214 | # PAGES = (
215 | # ("pages/*.rst", {"en": "pages", "de": "seiten"}, "page.tmpl"),
216 | # ("pages/*.md", {"en": "pages", "de": "seiten"}, "page.tmpl"),
217 | # )
218 |
219 | POSTS = (
220 | ("posts/*.rst", "posts", "post.tmpl"),
221 | ("posts/*.md", "posts", "post.tmpl"),
222 | ("posts/*.txt", "posts", "post.tmpl"),
223 | ("posts/*.html", "posts", "post.tmpl"),
224 | )
225 | PAGES = (
226 | ("pages/*.rst", "pages", "page.tmpl"),
227 | ("pages/*.md", "pages", "page.tmpl"),
228 | ("pages/*.txt", "pages", "page.tmpl"),
229 | ("pages/*.html", "pages", "page.tmpl"),
230 | )
231 |
232 |
233 | # Below this point, everything is optional
234 |
235 | # Post's dates are considered in UTC by default, if you want to use
236 | # another time zone, please set TIMEZONE to match. Check the available
237 | # list from Wikipedia:
238 | # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
239 | # (e.g. 'Europe/Zurich')
240 | # Also, if you want to use a different time zone in some of your posts,
241 | # you can use the ISO 8601/RFC 3339 format (ex. 2012-03-30T23:00:00+02:00)
242 | TIMEZONE = "UTC"
243 |
244 | # If you want to use ISO 8601 (also valid RFC 3339) throughout Nikola
245 | # (especially in new_post), set this to True.
246 | # Note that this does not affect DATE_FORMAT.
247 | # FORCE_ISO8601 = False
248 |
249 | # Date format used to display post dates. (translatable)
250 | # Used by babel.dates, CLDR style: http://cldr.unicode.org/translation/date-time
251 | # You can also use 'full', 'long', 'medium', or 'short'
252 | # DATE_FORMAT = 'yyyy-MM-dd HH:mm'
253 |
254 | # Date format used to display post dates, if local dates are used. (translatable)
255 | # Used by moment.js: https://momentjs.com/docs/#/displaying/format/
256 | # JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm'
257 |
258 | # Date fanciness.
259 | #
260 | # 0 = using DATE_FORMAT and TIMEZONE
261 | # 1 = using JS_DATE_FORMAT and local user time (via moment.js)
262 | # 2 = using a string like “2 days ago”
263 | #
264 | # Your theme must support it, Bootstrap already does.
265 | # DATE_FANCINESS = 0
266 |
267 | # Customize the locale/region used for a language.
268 | # For example, to use British instead of US English: LOCALES = {'en': 'en_GB'}
269 | # LOCALES = {}
270 |
271 | # One or more folders containing files to be copied as-is into the output.
272 | # The format is a dictionary of {source: relative destination}.
273 | # Default is:
274 | # FILES_FOLDERS = {'files': ''}
275 | # Which means copy 'files' into 'output'
276 |
277 | # One or more folders containing code listings to be processed and published on
278 | # the site. The format is a dictionary of {source: relative destination}.
279 | # Default is:
280 | # LISTINGS_FOLDERS = {'listings': 'listings'}
281 | # Which means process listings from 'listings' into 'output/listings'
282 |
283 | # A mapping of languages to file-extensions that represent that language.
284 | # Feel free to add or delete extensions to any list, but don't add any new
285 | # compilers unless you write the interface for it yourself.
286 | #
287 | # The default compiler for `new_post` is the first entry in the POSTS tuple.
288 | #
289 | # 'rest' is reStructuredText
290 | # 'markdown' is Markdown
291 | # 'html' assumes the file is HTML and just copies it
292 | COMPILERS = {
293 | "rest": ('.rst', '.txt'),
294 | "markdown": ('.md', '.mdown', '.markdown'),
295 | "textile": ('.textile',),
296 | "txt2tags": ('.t2t',),
297 | "bbcode": ('.bb',),
298 | "wiki": ('.wiki',),
299 | "ipynb": ('.ipynb',),
300 | "html": ('.html', '.htm'),
301 | # PHP files are rendered the usual way (i.e. with the full templates).
302 | # The resulting files have .php extensions, making it possible to run
303 | # them without reconfiguring your server to recognize them.
304 | "php": ('.php',),
305 | # Pandoc detects the input from the source filename
306 | # but is disabled by default as it would conflict
307 | # with many of the others.
308 | # "pandoc": ('.rst', '.md', '.txt'),
309 | }
310 |
311 | # Enable reST directives that insert the contents of external files such
312 | # as "include" and "raw." This maps directly to the docutils file_insertion_enabled
313 | # config. See: http://docutils.sourceforge.net/docs/user/config.html#file-insertion-enabled
314 | # REST_FILE_INSERTION_ENABLED = True
315 |
316 | # Create by default posts in one file format?
317 | # Set to False for two-file posts, with separate metadata.
318 | # ONE_FILE_POSTS = True
319 |
320 | # Preferred metadata format for new posts
321 | # "Nikola": reST comments, wrapped in a HTML comment if needed (default)
322 | # "YAML": YAML wrapped in "---"
323 | # "TOML": TOML wrapped in "+++"
324 | # "Pelican": Native markdown metadata or reST docinfo fields. Nikola style for other formats.
325 | METADATA_FORMAT = "YAML"
326 |
327 | # Use date-based path when creating posts?
328 | # Can be enabled on a per-post basis with `nikola new_post -d`.
329 | # The setting is ignored when creating pages.
330 | # NEW_POST_DATE_PATH = False
331 |
332 | # What format to use when creating posts with date paths?
333 | # Default is '%Y/%m/%d', other possibilities include '%Y' or '%Y/%m'.
334 | # NEW_POST_DATE_PATH_FORMAT = '%Y/%m/%d'
335 |
336 | # If this is set to True, the DEFAULT_LANG version will be displayed for
337 | # untranslated posts.
338 | # If this is set to False, then posts that are not translated to a language
339 | # LANG will not be visible at all in the pages in that language.
340 | # SHOW_UNTRANSLATED_POSTS = True
341 |
342 | # Nikola supports logo display. If you have one, you can put the URL here.
343 | # Final output is .
344 | # The URL may be relative to the site root.
345 | # LOGO_URL = ''
346 |
347 | # If you want to hide the title of your website (for example, if your logo
348 | # already contains the text), set this to False.
349 | # SHOW_BLOG_TITLE = True
350 |
351 | # Paths for different autogenerated bits. These are combined with the
352 | # translation paths.
353 |
354 | # Final locations are:
355 | # output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags)
356 | # output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag)
357 | # output / TRANSLATION[lang] / TAG_PATH / tag RSS_EXTENSION (RSS feed for a tag)
358 | # (translatable)
359 | # TAG_PATH = "categories"
360 |
361 | # By default, the list of tags is stored in
362 | # output / TRANSLATION[lang] / TAG_PATH / index.html
363 | # (see explanation for TAG_PATH). This location can be changed to
364 | # output / TRANSLATION[lang] / TAGS_INDEX_PATH
365 | # with an arbitrary relative path TAGS_INDEX_PATH.
366 | # (translatable)
367 | # TAGS_INDEX_PATH = "tags.html"
368 |
369 | # If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain
370 | # the posts themselves. If set to False, it will be just a list of links.
371 | # TAG_PAGES_ARE_INDEXES = False
372 |
373 | # Set descriptions for tag pages to make them more interesting. The
374 | # default is no description. The value is used in the meta description
375 | # and displayed underneath the tag list or index page’s title.
376 | # TAG_DESCRIPTIONS = {
377 | # DEFAULT_LANG: {
378 | # "blogging": "Meta-blog posts about blogging.",
379 | # "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects."
380 | # },
381 | # }
382 |
383 | # Set special titles for tag pages. The default is "Posts about TAG".
384 | # TAG_TITLES = {
385 | # DEFAULT_LANG: {
386 | # "blogging": "Meta-posts about blogging",
387 | # "open source": "Posts about open source software"
388 | # },
389 | # }
390 |
391 | # If you do not want to display a tag publicly, you can mark it as hidden.
392 | # The tag will not be displayed on the tag list page and posts.
393 | # Tag pages will still be generated.
394 | HIDDEN_TAGS = ['mathjax']
395 |
396 | # Only include tags on the tag list/overview page if there are at least
397 | # TAGLIST_MINIMUM_POSTS number of posts or more with every tag. Every tag
398 | # page is still generated, linked from posts, and included in the sitemap.
399 | # However, more obscure tags can be hidden from the tag index page.
400 | # TAGLIST_MINIMUM_POSTS = 1
401 |
402 | # A list of dictionaries specifying tags which translate to each other.
403 | # Format: a list of dicts {language: translation, language2: translation2, …}
404 | # For example:
405 | # [
406 | # {'en': 'private', 'de': 'Privat'},
407 | # {'en': 'work', 'fr': 'travail', 'de': 'Arbeit'},
408 | # ]
409 | # TAG_TRANSLATIONS = []
410 |
411 | # If set to True, a tag in a language will be treated as a translation
412 | # of the literally same tag in all other languages. Enable this if you
413 | # do not translate tags, for example.
414 | # TAG_TRANSLATIONS_ADD_DEFAULTS = True
415 |
416 | # Final locations are:
417 | # output / TRANSLATION[lang] / CATEGORY_PATH / index.html (list of categories)
418 | # output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.html (list of posts for a category)
419 | # output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category RSS_EXTENSION (RSS feed for a category)
420 | # (translatable)
421 | # CATEGORY_PATH = "categories"
422 | # CATEGORY_PREFIX = "cat_"
423 |
424 | # By default, the list of categories is stored in
425 | # output / TRANSLATION[lang] / CATEGORY_PATH / index.html
426 | # (see explanation for CATEGORY_PATH). This location can be changed to
427 | # output / TRANSLATION[lang] / CATEGORIES_INDEX_PATH
428 | # with an arbitrary relative path CATEGORIES_INDEX_PATH.
429 | # (translatable)
430 | # CATEGORIES_INDEX_PATH = "categories.html"
431 |
432 | # If CATEGORY_ALLOW_HIERARCHIES is set to True, categories can be organized in
433 | # hierarchies. For a post, the whole path in the hierarchy must be specified,
434 | # using a forward slash ('/') to separate paths. Use a backslash ('\') to escape
435 | # a forward slash or a backslash (i.e. '\//\\' is a path specifying the
436 | # subcategory called '\' of the top-level category called '/').
437 | CATEGORY_ALLOW_HIERARCHIES = False
438 | # If CATEGORY_OUTPUT_FLAT_HIERARCHY is set to True, the output written to output
439 | # contains only the name of the leaf category and not the whole path.
440 | CATEGORY_OUTPUT_FLAT_HIERARCHY = False
441 |
442 | # If CATEGORY_PAGES_ARE_INDEXES is set to True, each category's page will contain
443 | # the posts themselves. If set to False, it will be just a list of links.
444 | # CATEGORY_PAGES_ARE_INDEXES = False
445 |
446 | # Set descriptions for category pages to make them more interesting. The
447 | # default is no description. The value is used in the meta description
448 | # and displayed underneath the category list or index page’s title.
449 | # CATEGORY_DESCRIPTIONS = {
450 | # DEFAULT_LANG: {
451 | # "blogging": "Meta-blog posts about blogging.",
452 | # "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects."
453 | # },
454 | # }
455 |
456 | # Set special titles for category pages. The default is "Posts about CATEGORY".
457 | # CATEGORY_TITLES = {
458 | # DEFAULT_LANG: {
459 | # "blogging": "Meta-posts about blogging",
460 | # "open source": "Posts about open source software"
461 | # },
462 | # }
463 |
464 | # If you do not want to display a category publicly, you can mark it as hidden.
465 | # The category will not be displayed on the category list page.
466 | # Category pages will still be generated.
467 | HIDDEN_CATEGORIES = []
468 |
469 | # A list of dictionaries specifying categories which translate to each other.
470 | # Format: a list of dicts {language: translation, language2: translation2, …}
471 | # See TAG_TRANSLATIONS example above.
472 | # CATEGORY_TRANSLATIONS = []
473 |
474 | # If set to True, a category in a language will be treated as a translation
475 | # of the literally same category in all other languages. Enable this if you
476 | # do not translate categories, for example.
477 | # CATEGORY_TRANSLATIONS_ADD_DEFAULTS = True
478 |
479 | # If no category is specified in a post, the destination path of the post
480 | # can be used in its place. This replaces the sections feature. Using
481 | # category hierarchies is recommended.
482 | # CATEGORY_DESTPATH_AS_DEFAULT = False
483 |
484 | # If True, the prefix will be trimmed from the category name, eg. if the
485 | # POSTS destination is "foo/bar", and the path is "foo/bar/baz/quux",
486 | # the category will be "baz/quux" (or "baz" if only the first directory is considered).
487 | # Note that prefixes coming from translations are always ignored.
488 | # CATEGORY_DESTPATH_TRIM_PREFIX = False
489 |
490 | # If True, only the first directory of a path will be used.
491 | # CATEGORY_DESTPATH_FIRST_DIRECTORY_ONLY = True
492 |
493 | # Map paths to prettier category names. (translatable)
494 | # CATEGORY_DESTPATH_NAMES = {
495 | # DEFAULT_LANG: {
496 | # 'webdev': 'Web Development',
497 | # 'webdev/django': 'Web Development/Django',
498 | # 'random': 'Odds and Ends',
499 | # },
500 | # }
501 |
502 | # By default, category indexes will appear in CATEGORY_PATH and use
503 | # CATEGORY_PREFIX. If this is enabled, those settings will be ignored (except
504 | # for the index) and instead, they will follow destination paths (eg. category
505 | # 'foo' might appear in 'posts/foo'). If the category does not come from a
506 | # destpath, first entry in POSTS followed by the category name will be used.
507 | # For this setting, category hierarchies are required and cannot be flattened.
508 | # CATEGORY_PAGES_FOLLOW_DESTPATH = False
509 |
510 | # If ENABLE_AUTHOR_PAGES is set to True and there is more than one
511 | # author, author pages are generated.
512 | # ENABLE_AUTHOR_PAGES = True
513 |
514 | # Path to author pages. Final locations are:
515 | # output / TRANSLATION[lang] / AUTHOR_PATH / index.html (list of authors)
516 | # output / TRANSLATION[lang] / AUTHOR_PATH / author.html (list of posts by an author)
517 | # output / TRANSLATION[lang] / AUTHOR_PATH / author RSS_EXTENSION (RSS feed for an author)
518 | # (translatable)
519 | # AUTHOR_PATH = "authors"
520 |
521 | # If AUTHOR_PAGES_ARE_INDEXES is set to True, each author's page will contain
522 | # the posts themselves. If set to False, it will be just a list of links.
523 | # AUTHOR_PAGES_ARE_INDEXES = False
524 |
525 | # Set descriptions for author pages to make them more interesting. The
526 | # default is no description. The value is used in the meta description
527 | # and displayed underneath the author list or index page’s title.
528 | # AUTHOR_PAGES_DESCRIPTIONS = {
529 | # DEFAULT_LANG: {
530 | # "Juanjo Conti": "Python coder and writer.",
531 | # "Roberto Alsina": "Nikola father."
532 | # },
533 | # }
534 |
535 |
536 | # If you do not want to display an author publicly, you can mark it as hidden.
537 | # The author will not be displayed on the author list page and posts.
538 | # Tag pages will still be generated.
539 | HIDDEN_AUTHORS = ['Guest']
540 |
541 | # Final location for the main blog page and sibling paginated pages is
542 | # output / TRANSLATION[lang] / INDEX_PATH / index-*.html
543 | # (translatable)
544 | # INDEX_PATH = ""
545 |
546 | # Optional HTML that displayed on “main” blog index.html files.
547 | # May be used for a greeting. (translatable)
548 | FRONT_INDEX_HEADER = {
549 | DEFAULT_LANG: ''
550 | }
551 |
552 | # Create per-month archives instead of per-year
553 | # CREATE_MONTHLY_ARCHIVE = False
554 | # Create one large archive instead of per-year
555 | # CREATE_SINGLE_ARCHIVE = False
556 | # Create year, month, and day archives each with a (long) list of posts
557 | # (overrides both CREATE_MONTHLY_ARCHIVE and CREATE_SINGLE_ARCHIVE)
558 | # CREATE_FULL_ARCHIVES = False
559 | # If monthly archives or full archives are created, adds also one archive per day
560 | # CREATE_DAILY_ARCHIVE = False
561 | # Create previous, up, next navigation links for archives
562 | # CREATE_ARCHIVE_NAVIGATION = False
563 | # Final locations for the archives are:
564 | # output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME
565 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html
566 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html
567 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / DAY / index.html
568 | # (translatable)
569 | # ARCHIVE_PATH = ""
570 | # ARCHIVE_FILENAME = "archive.html"
571 |
572 | # If ARCHIVES_ARE_INDEXES is set to True, each archive page which contains a list
573 | # of posts will contain the posts themselves. If set to False, it will be just a
574 | # list of links.
575 | # ARCHIVES_ARE_INDEXES = False
576 |
577 | # URLs to other posts/pages can take 3 forms:
578 | # rel_path: a relative URL to the current page/post (default)
579 | # full_path: a URL with the full path from the root
580 | # absolute: a complete URL (that includes the SITE_URL)
581 | # URL_TYPE = 'rel_path'
582 |
583 | # Extension for RSS feed files
584 | # RSS_EXTENSION = ".xml"
585 |
586 | # RSS filename base (without extension); used for indexes and galleries.
587 | # (translatable)
588 | # RSS_FILENAME_BASE = "rss"
589 |
590 | # Final location for the blog main RSS feed is:
591 | # output / TRANSLATION[lang] / RSS_PATH / RSS_FILENAME_BASE RSS_EXTENSION
592 | # (translatable)
593 | # RSS_PATH = ""
594 |
595 | # Final location for the blog main Atom feed is:
596 | # output / TRANSLATION[lang] / ATOM_PATH / ATOM_FILENAME_BASE ATOM_EXTENSION
597 | # (translatable)
598 | # ATOM_PATH = ""
599 |
600 | # Atom filename base (without extension); used for indexes.
601 | # (translatable)
602 | ATOM_FILENAME_BASE = "feed"
603 |
604 | # Extension for Atom feed files
605 | # ATOM_EXTENSION = ".atom"
606 |
607 | # Slug the Tag URL. Easier for users to type, special characters are
608 | # often removed or replaced as well.
609 | # SLUG_TAG_PATH = True
610 |
611 | # Slug the Author URL. Easier for users to type, special characters are
612 | # often removed or replaced as well.
613 | # SLUG_AUTHOR_PATH = True
614 |
615 | # A list of redirection tuples, [("foo/from.html", "/bar/to.html")].
616 | #
617 | # A HTML file will be created in output/foo/from.html that redirects
618 | # to the "/bar/to.html" URL. notice that the "from" side MUST be a
619 | # relative URL.
620 | #
621 | # If you don't need any of these, just set to []
622 | REDIRECTIONS = []
623 |
624 | # Presets of commands to execute to deploy. Can be anything, for
625 | # example, you may use rsync:
626 | # "rsync -rav --delete output/ joe@my.site:/srv/www/site"
627 | # And then do a backup, or run `nikola ping` from the `ping`
628 | # plugin (`nikola plugin -i ping`). Or run `nikola check -l`.
629 | # You may also want to use github_deploy (see below).
630 | # You can define multiple presets and specify them as arguments
631 | # to `nikola deploy`. If no arguments are specified, a preset
632 | # named `default` will be executed. You can use as many presets
633 | # in a `nikola deploy` command as you like.
634 | # DEPLOY_COMMANDS = {
635 | # 'default': [
636 | # "rsync -rav --delete output/ joe@my.site:/srv/www/site",
637 | # ]
638 | # }
639 |
640 | # github_deploy configuration
641 | # For more details, read the manual:
642 | # https://getnikola.com/handbook.html#deploying-to-github
643 | # You will need to configure the deployment branch on GitHub.
644 | GITHUB_SOURCE_BRANCH = 'src'
645 | GITHUB_DEPLOY_BRANCH = 'master'
646 |
647 | # The name of the remote where you wish to push to, using github_deploy.
648 | GITHUB_REMOTE_NAME = 'origin'
649 |
650 | # Whether or not github_deploy should commit to the source branch automatically
651 | # before deploying.
652 | GITHUB_COMMIT_SOURCE = True
653 |
654 | # Where the output site should be located
655 | # If you don't use an absolute path, it will be considered as relative
656 | # to the location of conf.py
657 | # OUTPUT_FOLDER = 'output'
658 |
659 | # where the "cache" of partial generated content should be located
660 | # default: 'cache'
661 | # CACHE_FOLDER = 'cache'
662 |
663 | # Filters to apply to the output.
664 | # A directory where the keys are either: a file extensions, or
665 | # a tuple of file extensions.
666 | #
667 | # And the value is a list of commands to be applied in order.
668 | #
669 | # Each command must be either:
670 | #
671 | # A string containing a '%s' which will
672 | # be replaced with a filename. The command *must* produce output
673 | # in place.
674 | #
675 | # Or:
676 | #
677 | # A python callable, which will be called with the filename as
678 | # argument.
679 | #
680 | # By default, only .php files uses filters to inject PHP into
681 | # Nikola’s templates. All other filters must be enabled through FILTERS.
682 | #
683 | # Many filters are shipped with Nikola. A list is available in the manual:
684 | #
685 | #
686 | # from nikola import filters
687 | # FILTERS = {
688 | # ".html": [filters.typogrify],
689 | # ".js": [filters.closure_compiler],
690 | # ".jpg": ["jpegoptim --strip-all -m75 -v %s"],
691 | # }
692 |
693 | # Executable for the "yui_compressor" filter (defaults to 'yui-compressor').
694 | # YUI_COMPRESSOR_EXECUTABLE = 'yui-compressor'
695 |
696 | # Executable for the "closure_compiler" filter (defaults to 'closure-compiler').
697 | # CLOSURE_COMPILER_EXECUTABLE = 'closure-compiler'
698 |
699 | # Executable for the "optipng" filter (defaults to 'optipng').
700 | # OPTIPNG_EXECUTABLE = 'optipng'
701 |
702 | # Executable for the "jpegoptim" filter (defaults to 'jpegoptim').
703 | # JPEGOPTIM_EXECUTABLE = 'jpegoptim'
704 |
705 | # Executable for the "html_tidy_withconfig", "html_tidy_nowrap",
706 | # "html_tidy_wrap", "html_tidy_wrap_attr" and "html_tidy_mini" filters
707 | # (defaults to 'tidy5').
708 | # HTML_TIDY_EXECUTABLE = 'tidy5'
709 |
710 | # List of XPath expressions which should be used for finding headers
711 | # ({hx} is replaced by headers h1 through h6).
712 | # You must change this if you use a custom theme that does not use
713 | # "e-content entry-content" as a class for post and page contents.
714 | # HEADER_PERMALINKS_XPATH_LIST = ['*//div[@class="e-content entry-content"]//{hx}']
715 | # Include *every* header (not recommended):
716 | # HEADER_PERMALINKS_XPATH_LIST = ['*//{hx}']
717 |
718 | # File blacklist for header permalinks. Contains output path
719 | # (eg. 'output/index.html')
720 | # HEADER_PERMALINKS_FILE_BLACKLIST = []
721 |
722 | # Expert setting! Create a gzipped copy of each generated file. Cheap server-
723 | # side optimization for very high traffic sites or low memory servers.
724 | # GZIP_FILES = False
725 | # File extensions that will be compressed
726 | # GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.atom', '.xml')
727 | # Use an external gzip command? None means no.
728 | # Example: GZIP_COMMAND = "pigz -k {filename}"
729 | # GZIP_COMMAND = None
730 | # Make sure the server does not return a "Accept-Ranges: bytes" header for
731 | # files compressed by this option! OR make sure that a ranged request does not
732 | # return partial content of another representation for these resources. Do not
733 | # use this feature if you do not understand what this means.
734 |
735 | # #############################################################################
736 | # Image Gallery Options
737 | # #############################################################################
738 |
739 | # One or more folders containing galleries. The format is a dictionary of
740 | # {"source": "relative_destination"}, where galleries are looked for in
741 | # "source/" and the results will be located in
742 | # "OUTPUT_PATH/relative_destination/gallery_name"
743 | # Default is:
744 | # GALLERY_FOLDERS = {"galleries": "galleries"}
745 | # More gallery options:
746 | # THUMBNAIL_SIZE = 180
747 | # MAX_IMAGE_SIZE = 1280
748 | # USE_FILENAME_AS_TITLE = True
749 | # EXTRA_IMAGE_EXTENSIONS = []
750 | #
751 | # If set to False, it will sort by filename instead. Defaults to True
752 | # GALLERY_SORT_BY_DATE = True
753 |
754 | # If set to True, EXIF data will be copied when an image is thumbnailed or
755 | # resized. (See also EXIF_WHITELIST)
756 | # PRESERVE_EXIF_DATA = False
757 |
758 | # If you have enabled PRESERVE_EXIF_DATA, this option lets you choose EXIF
759 | # fields you want to keep in images. (See also PRESERVE_EXIF_DATA)
760 | #
761 | # For a full list of field names, please see here:
762 | # http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf
763 | #
764 | # This is a dictionary of lists. Each key in the dictionary is the
765 | # name of a IDF, and each list item is a field you want to preserve.
766 | # If you have a IDF with only a '*' item, *EVERY* item in it will be
767 | # preserved. If you don't want to preserve anything in a IDF, remove it
768 | # from the setting. By default, no EXIF information is kept.
769 | # Setting the whitelist to anything other than {} implies
770 | # PRESERVE_EXIF_DATA is set to True
771 | # To preserve ALL EXIF data, set EXIF_WHITELIST to {"*": "*"}
772 |
773 | # EXIF_WHITELIST = {}
774 |
775 | # Some examples of EXIF_WHITELIST settings:
776 |
777 | # Basic image information:
778 | # EXIF_WHITELIST['0th'] = [
779 | # "Orientation",
780 | # "XResolution",
781 | # "YResolution",
782 | # ]
783 |
784 | # If you want to keep GPS data in the images:
785 | # EXIF_WHITELIST['GPS'] = ["*"]
786 |
787 | # Embedded thumbnail information:
788 | # EXIF_WHITELIST['1st'] = ["*"]
789 |
790 | # If set to True, any ICC profile will be copied when an image is thumbnailed or
791 | # resized.
792 | # PRESERVE_ICC_PROFILES = False
793 |
794 | # Folders containing images to be used in normal posts or pages.
795 | # IMAGE_FOLDERS is a dictionary of the form {"source": "destination"},
796 | # where "source" is the folder containing the images to be published, and
797 | # "destination" is the folder under OUTPUT_PATH containing the images copied
798 | # to the site. Thumbnail images will be created there as well.
799 |
800 | # To reference the images in your posts, include a leading slash in the path.
801 | # For example, if IMAGE_FOLDERS = {'images': 'images'}, write
802 | #
803 | # .. image:: /images/tesla.jpg
804 | #
805 | # See the Nikola Handbook for details (in the “Embedding Images” and
806 | # “Thumbnails” sections)
807 |
808 | # Images will be scaled down according to IMAGE_THUMBNAIL_SIZE and MAX_IMAGE_SIZE
809 | # options, but will have to be referenced manually to be visible on the site
810 | # (the thumbnail has ``.thumbnail`` added before the file extension by default,
811 | # but a different naming template can be configured with IMAGE_THUMBNAIL_FORMAT).
812 |
813 | IMAGE_FOLDERS = {'images': 'images'}
814 | # IMAGE_THUMBNAIL_SIZE = 400
815 | # IMAGE_THUMBNAIL_FORMAT = '{name}.thumbnail{ext}'
816 |
817 | # #############################################################################
818 | # HTML fragments and diverse things that are used by the templates
819 | # #############################################################################
820 |
821 | # Data about post-per-page indexes.
822 | # INDEXES_PAGES defaults to ' old posts, page %d' or ' page %d' (translated),
823 | # depending on the value of INDEXES_PAGES_MAIN.
824 | #
825 | # (translatable) If the following is empty, defaults to BLOG_TITLE:
826 | # INDEXES_TITLE = ""
827 | #
828 | # (translatable) If the following is empty, defaults to ' [old posts,] page %d' (see above):
829 | # INDEXES_PAGES = ""
830 | #
831 | # If the following is True, INDEXES_PAGES is also displayed on the main (the
832 | # newest) index page (index.html):
833 | # INDEXES_PAGES_MAIN = False
834 | #
835 | # If the following is True, index-1.html has the oldest posts, index-2.html the
836 | # second-oldest posts, etc., and index.html has the newest posts. This ensures
837 | # that all posts on index-x.html will forever stay on that page, now matter how
838 | # many new posts are added.
839 | # If False, index-1.html has the second-newest posts, index-2.html the third-newest,
840 | # and index-n.html the oldest posts. When this is active, old posts can be moved
841 | # to other index pages when new posts are added.
842 | # INDEXES_STATIC = True
843 | #
844 | # (translatable) If PRETTY_URLS is set to True, this setting will be used to create
845 | # prettier URLs for index pages, such as page/2/index.html instead of index-2.html.
846 | # Valid values for this settings are:
847 | # * False,
848 | # * a list or tuple, specifying the path to be generated,
849 | # * a dictionary mapping languages to lists or tuples.
850 | # Every list or tuple must consist of strings which are used to combine the path;
851 | # for example:
852 | # ['page', '{number}', '{index_file}']
853 | # The replacements
854 | # {number} --> (logical) page number;
855 | # {old_number} --> the page number inserted into index-n.html before (zero for
856 | # the main page);
857 | # {index_file} --> value of option INDEX_FILE
858 | # are made.
859 | # Note that in case INDEXES_PAGES_MAIN is set to True, a redirection will be created
860 | # for the full URL with the page number of the main page to the normal (shorter) main
861 | # page URL.
862 | # INDEXES_PRETTY_PAGE_URL = False
863 | #
864 | # If the following is true, a page range navigation will be inserted to indices.
865 | # Please note that this will undo the effect of INDEXES_STATIC, as all index pages
866 | # must be recreated whenever the number of pages changes.
867 | # SHOW_INDEX_PAGE_NAVIGATION = False
868 |
869 | # If the following is True, a meta name="generator" tag is added to pages. The
870 | # generator tag is used to specify the software used to generate the page
871 | # (it promotes Nikola).
872 | # META_GENERATOR_TAG = True
873 |
874 | # Color scheme to be used for code blocks. If your theme provides
875 | # "assets/css/code.css" this is ignored. Set to None to disable.
876 | # Can be any of:
877 | # algol, algol_nu, autumn, borland, bw, colorful, default, emacs, friendly,
878 | # fruity, igor, lovelace, manni, monokai, murphy, native, paraiso-dark,
879 | # paraiso-light, pastie, perldoc, rrt, tango, trac, vim, vs, xcode
880 | # This list MAY be incomplete since pygments adds styles every now and then.
881 | # Check with list(pygments.styles.get_all_styles()) in an interpreter.
882 | # CODE_COLOR_SCHEME = 'default'
883 |
884 | # FAVICONS contains (name, file, size) tuples.
885 | # Used to create favicon link like this:
886 | #
887 | # FAVICONS = (
888 | # ("icon", "/favicon.ico", "16x16"),
889 | # ("icon", "/icon_128x128.png", "128x128"),
890 | # )
891 |
892 | # Show teasers (instead of full posts) in indexes? Defaults to False.
893 | # INDEX_TEASERS = False
894 |
895 | # HTML fragments with the Read more... links.
896 | # The following tags exist and are replaced for you:
897 | # {link} A link to the full post page.
898 | # {read_more} The string “Read more” in the current language.
899 | # {reading_time} An estimate of how long it will take to read the post.
900 | # {remaining_reading_time} An estimate of how long it will take to read the post, sans the teaser.
901 | # {min_remaining_read} The string “{remaining_reading_time} min remaining to read” in the current language.
902 | # {paragraph_count} The amount of paragraphs in the post.
903 | # {remaining_paragraph_count} The amount of paragraphs in the post, sans the teaser.
904 | # {post_title} The title of the post.
905 | # {{ A literal { (U+007B LEFT CURLY BRACKET)
906 | # }} A literal } (U+007D RIGHT CURLY BRACKET)
907 |
908 | # 'Read more...' for the index page, if INDEX_TEASERS is True (translatable)
909 | INDEX_READ_MORE_LINK = '
1109 | #
1110 | #
1111 | # """
1112 |
1113 | # Show link to source for the posts?
1114 | # SHOW_SOURCELINK = True
1115 | # Copy the source files for your pages?
1116 | # Setting it to False implies SHOW_SOURCELINK = False
1117 | # COPY_SOURCES = True
1118 |
1119 | # Modify the number of Post per Index Page
1120 | # Defaults to 10
1121 | # INDEX_DISPLAY_POST_COUNT = 10
1122 |
1123 | # By default, Nikola generates RSS files for the website and for tags, and
1124 | # links to it. Set this to False to disable everything RSS-related.
1125 | # GENERATE_RSS = True
1126 |
1127 | # By default, Nikola does not generates Atom files for indexes and links to
1128 | # them. Generate Atom for tags by setting TAG_PAGES_ARE_INDEXES to True.
1129 | # Atom feeds are built based on INDEX_DISPLAY_POST_COUNT and not FEED_LENGTH
1130 | # Switch between plain-text summaries and full HTML content using the
1131 | # FEED_TEASER option. FEED_LINKS_APPEND_QUERY is also respected. Atom feeds
1132 | # are generated even for old indexes and have pagination link relations
1133 | # between each other. Old Atom feeds with no changes are marked as archived.
1134 | # GENERATE_ATOM = False
1135 |
1136 | # Only include teasers in Atom and RSS feeds. Disabling include the full
1137 | # content. Defaults to True.
1138 | # FEED_TEASERS = True
1139 |
1140 | # Strip HTML from Atom and RSS feed summaries and content. Defaults to False.
1141 | # FEED_PLAIN = False
1142 |
1143 | # Number of posts in Atom and RSS feeds.
1144 | # FEED_LENGTH = 10
1145 |
1146 | # RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None,
1147 | # the base.tmpl will use the feed Nikola generates. However, you may want to
1148 | # change it for a FeedBurner feed or something else.
1149 | # RSS_LINK = None
1150 |
1151 | # A search form to search this site, for the sidebar. You can use a Google
1152 | # custom search (https://www.google.com/cse/)
1153 | # Or a DuckDuckGo search: https://duckduckgo.com/search_box.html
1154 | # Default is no search form.
1155 | # (translatable)
1156 | # SEARCH_FORM = ""
1157 | #
1158 | # This search form works for any site and looks good in the "site" theme where
1159 | # it appears on the navigation bar:
1160 | #
1161 | # SEARCH_FORM = """
1162 | #
1163 | #
1173 | #
1174 | # """ % SITE_URL
1175 | #
1176 | # If you prefer a Google search form, here's an example that should just work:
1177 | # SEARCH_FORM = """
1178 | #
1179 | #
1188 | #
1189 | # """ % SITE_URL
1190 |
1191 | # Use content distribution networks for jQuery, twitter-bootstrap css and js,
1192 | # and html5shiv (for older versions of Internet Explorer)
1193 | # If this is True, jQuery and html5shiv are served from the Google CDN and
1194 | # Bootstrap is served from BootstrapCDN (provided by MaxCDN)
1195 | # Set this to False if you want to host your site without requiring access to
1196 | # external resources.
1197 | # USE_CDN = False
1198 |
1199 | # Check for USE_CDN compatibility.
1200 | # If you are using custom themes, have configured the CSS properly and are
1201 | # receiving warnings about incompatibility but believe they are incorrect, you
1202 | # can set this to False.
1203 | # USE_CDN_WARNING = True
1204 |
1205 | # Extra things you want in the pages HEAD tag. This will be added right
1206 | # before
1207 | # (translatable)
1208 | EXTRA_HEAD_DATA = """\
1209 |
1210 | """
1211 | # Google Analytics or whatever else you use. Added to the bottom of
1212 | # in the default template (base.tmpl).
1213 | # (translatable)
1214 | # BODY_END = ""
1215 |
1216 | # The possibility to extract metadata from the filename by using a
1217 | # regular expression.
1218 | # To make it work you need to name parts of your regular expression.
1219 | # The following names will be used to extract metadata:
1220 | # - title
1221 | # - slug
1222 | # - date
1223 | # - tags
1224 | # - link
1225 | # - description
1226 | #
1227 | # An example re is the following:
1228 | # '.*\/(?P\d{4}-\d{2}-\d{2})-(?P.*)-(?P.*)\.rst'
1229 | # (Note the '.*\/' in the beginning -- matches source paths relative to conf.py)
1230 | # FILE_METADATA_REGEXP = None
1231 |
1232 | # Should titles fetched from file metadata be unslugified (made prettier?)
1233 | # FILE_METADATA_UNSLUGIFY_TITLES = True
1234 |
1235 | # If enabled, extract metadata from docinfo fields in reST documents.
1236 | # If your text files start with a level 1 heading, it will be treated as the
1237 | # document title and will be removed from the text.
1238 | # USE_REST_DOCINFO_METADATA = False
1239 |
1240 | # If enabled, hide docinfo fields in reST document output
1241 | # HIDE_REST_DOCINFO = False
1242 |
1243 | # Map metadata from other formats to Nikola names.
1244 | # Supported formats: yaml, toml, rest_docinfo, markdown_metadata
1245 | # METADATA_MAPPING = {}
1246 | #
1247 | # Example for Pelican compatibility:
1248 | # METADATA_MAPPING = {
1249 | # "rest_docinfo": {"summary": "description", "modified": "updated"},
1250 | # "markdown_metadata": {"summary": "description", "modified": "updated"}
1251 | # }
1252 | # Other examples: https://getnikola.com/handbook.html#mapping-metadata-from-other-formats
1253 |
1254 | # Map metadata between types/values. (Runs after METADATA_MAPPING.)
1255 | # Supported formats: nikola, yaml, toml, rest_docinfo, markdown_metadata
1256 | # The value on the right should be a dict of callables.
1257 | # METADATA_VALUE_MAPPING = {}
1258 | # Examples:
1259 | # METADATA_VALUE_MAPPING = {
1260 | # "yaml": {"keywords": lambda value: ', '.join(value)}, # yaml: 'keywords' list -> str
1261 | # "nikola": {
1262 | # "widgets": lambda value: value.split(', '), # nikola: 'widgets' comma-separated string -> list
1263 | # "tags": str.lower # nikola: force lowercase 'tags' (input would be string)
1264 | # }
1265 | # }
1266 |
1267 | # Additional metadata that is added to a post when creating a new_post
1268 | # ADDITIONAL_METADATA = {}
1269 |
1270 | # Nikola supports Twitter Card summaries, but they are disabled by default.
1271 | # They make it possible for you to attach media to Tweets that link
1272 | # to your content.
1273 | #
1274 | # Uncomment and modify to following lines to match your accounts.
1275 | # Images displayed come from the `previewimage` meta tag.
1276 | # You can specify the card type by using the `card` parameter in TWITTER_CARD.
1277 | # TWITTER_CARD = {
1278 | # # 'use_twitter_cards': True, # enable Twitter Cards
1279 | # # 'card': 'summary', # Card type, you can also use 'summary_large_image',
1280 | # # see https://dev.twitter.com/cards/types
1281 | # # 'site': '@website', # twitter nick for the website
1282 | # # 'creator': '@username', # Username for the content creator / author.
1283 | # }
1284 |
1285 | # Bundle JS and CSS into single files to make site loading faster in a HTTP/1.1
1286 | # environment but is not recommended for HTTP/2.0 when caching is used.
1287 | # Defaults to True.
1288 | # USE_BUNDLES = True
1289 |
1290 | # Plugins you don't want to use. Be careful :-)
1291 | # DISABLED_PLUGINS = ["render_galleries"]
1292 |
1293 | # Special settings to disable only parts of the indexes plugin.
1294 | # Use with care.
1295 | # DISABLE_INDEXES = False
1296 | # DISABLE_MAIN_ATOM_FEED = False
1297 | # DISABLE_MAIN_RSS_FEED = False
1298 |
1299 | # Add the absolute paths to directories containing plugins to use them.
1300 | # For example, the `plugins` directory of your clone of the Nikola plugins
1301 | # repository.
1302 | # EXTRA_PLUGINS_DIRS = []
1303 |
1304 | # Add the absolute paths to directories containing themes to use them.
1305 | # For example, the `v7` directory of your clone of the Nikola themes
1306 | # repository.
1307 | # EXTRA_THEMES_DIRS = []
1308 |
1309 | # List of regular expressions, links matching them will always be considered
1310 | # valid by "nikola check -l"
1311 | # LINK_CHECK_WHITELIST = []
1312 |
1313 | # If set to True, enable optional hyphenation in your posts (requires pyphen)
1314 | # Enabling hyphenation has been shown to break math support in some cases,
1315 | # use with caution.
1316 | # HYPHENATE = False
1317 |
1318 | # The tags in HTML generated by certain compilers (reST/Markdown)
1319 | # will be demoted by that much (1 → h1 will become h2 and so on)
1320 | # This was a hidden feature of the Markdown and reST compilers in the
1321 | # past. Useful especially if your post titles are in
tags too, for
1322 | # example.
1323 | # (defaults to 1.)
1324 | # DEMOTE_HEADERS = 1
1325 |
1326 | # If you don’t like slugified file names ([a-z0-9] and a literal dash),
1327 | # and would prefer to use all the characters your file system allows.
1328 | # USE WITH CARE! This is also not guaranteed to be perfect, and may
1329 | # sometimes crash Nikola, your web server, or eat your cat.
1330 | # USE_SLUGIFY = True
1331 |
1332 | # If set to True, the tags 'draft', 'mathjax' and 'private' have special
1333 | # meaning. If set to False, these tags are handled like regular tags.
1334 | USE_TAG_METADATA = False
1335 |
1336 | # If set to True, a warning is issued if one of the 'draft', 'mathjax'
1337 | # and 'private' tags are found in a post. Useful for checking that
1338 | # migration was successful.
1339 | WARN_ABOUT_TAG_METADATA = False
1340 |
1341 | # Templates will use those filters, along with the defaults.
1342 | # Consult your engine's documentation on filters if you need help defining
1343 | # those.
1344 | # TEMPLATE_FILTERS = {}
1345 |
1346 | # Put in global_context things you want available on all your templates.
1347 | # It can be anything, data, functions, modules, etc.
1348 | GLOBAL_CONTEXT = {}
1349 |
1350 | # Add functions here and they will be called with template
1351 | # GLOBAL_CONTEXT as parameter when the template is about to be
1352 | # rendered
1353 | GLOBAL_CONTEXT_FILLER = []
1354 |
--------------------------------------------------------------------------------
/files/admin/config.yml:
--------------------------------------------------------------------------------
1 | backend:
2 | name: git-gateway
3 | branch: master
4 | display_url: https://example.com
5 | media_folder: "images/uploads"
6 | public_folder: "/images/uploads"
7 | collections:
8 | - name: "posts" # Used in routes, e.g., /admin/collections/blog
9 | label: "Posts" # Used in the UI
10 | label_singular: "Post"
11 | description: >
12 | Posts (blog entries), visible in indexes and RSS feeds.
13 | folder: "posts" # The path to the folder where the documents are stored
14 | create: true # Allow users to create new documents in this collection
15 | format: "yaml-frontmatter"
16 | slug: "{{slug}}" # Filename template, e.g., YYYY-MM-DD-title.md
17 | fields: # The fields for each document, usually in front matter
18 | - {label: "Title", name: "title", widget: "string"}
19 | - {label: "Author", name: "author", widget: "string", required: false}
20 | - {label: "Date", name: "date", widget: "datetime"}
21 | - {label: "Updated", name: "updated", widget: "datetime", required: false}
22 | - {label: "Status", name: "status", widget: "select", options: ["published", "featured", "draft", "private"], required: false}
23 | - {label: "Tags", name: "tags", widget: "list", required: false}
24 | - {label: "Category", name: "category", widget: "string", required: false}
25 | - {label: "Description", name: "description", widget: "string", required: false}
26 | - {label: "Featured Image", name: "previewimage", widget: "image", required: false}
27 | - {label: "Body", name: "body", widget: "markdown"}
28 | - name: "pages" # Used in routes, e.g., /admin/collections/blog
29 | label: "Pages" # Used in the UI
30 | label_singular: "Page"
31 | description: >
32 | Pages (stories), used to display information outside of indexes/feeds.
33 | Great for an “About me” page, for example.
34 | folder: "pages" # The path to the folder where the documents are stored
35 | create: true # Allow users to create new documents in this collection
36 | format: "yaml-frontmatter"
37 | slug: "{{slug}}" # Filename template, e.g., YYYY-MM-DD-title.md
38 | fields: # The fields for each document, usually in front matter
39 | - {label: "Title", name: "title", widget: "string"}
40 | - {label: "Author", name: "author", widget: "string", required: false}
41 | - {label: "Date", name: "date", widget: "datetime"}
42 | - {label: "Updated", name: "updated", widget: "datetime", required: false}
43 | - {label: "Status", name: "status", widget: "select", options: ["published", "featured", "draft", "private"], required: false}
44 | - {label: "Tags", name: "tags", widget: "list", required: false}
45 | - {label: "Category", name: "category", widget: "string", required: false}
46 | - {label: "Description", name: "description", widget: "string", required: false}
47 | - {label: "Featured Image", name: "previewimage", widget: "image", required: false}
48 | - {label: "Body", name: "body", widget: "markdown"}
49 |
--------------------------------------------------------------------------------
/files/admin/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Content Manager
7 |
8 |
9 |
10 |
11 |
12 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | base = ""
3 | publish = "output"
4 | command = "nikola build"
5 |
--------------------------------------------------------------------------------
/posts/your-first-post.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Your First Post
3 | slug: your-first-post
4 | date: 2016-08-29 15:29:40 UTC
5 | ---
6 | Write your post here.
7 |
--------------------------------------------------------------------------------
/requirements.in:
--------------------------------------------------------------------------------
1 | Nikola[extras]
2 | ruamel.yaml
3 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | #
2 | # This file is autogenerated by pip-compile with Python 3.11
3 | # by the following command:
4 | #
5 | # pip-compile
6 | #
7 | aiohappyeyeballs==2.3.5
8 | # via aiohttp
9 | aiohttp==3.10.11
10 | # via nikola
11 | aiosignal==1.3.1
12 | # via aiohttp
13 | anyio==4.2.0
14 | # via
15 | # httpx
16 | # jupyter-server
17 | argon2-cffi==23.1.0
18 | # via jupyter-server
19 | argon2-cffi-bindings==21.2.0
20 | # via argon2-cffi
21 | arrow==1.3.0
22 | # via isoduration
23 | asttokens==2.4.1
24 | # via stack-data
25 | async-lru==2.0.4
26 | # via jupyterlab
27 | attrs==23.2.0
28 | # via
29 | # aiohttp
30 | # jsonschema
31 | # referencing
32 | babel==2.14.0
33 | # via
34 | # jupyterlab-server
35 | # nikola
36 | beautifulsoup4==4.12.3
37 | # via nbconvert
38 | bleach==6.1.0
39 | # via nbconvert
40 | blinker==1.7.0
41 | # via nikola
42 | certifi==2024.7.4
43 | # via
44 | # httpcore
45 | # httpx
46 | # requests
47 | cffi==1.16.0
48 | # via argon2-cffi-bindings
49 | charset-normalizer==3.3.2
50 | # via requests
51 | cloudpickle==3.0.0
52 | # via doit
53 | comm==0.2.1
54 | # via ipykernel
55 | debugpy==1.8.0
56 | # via ipykernel
57 | decorator==5.1.1
58 | # via ipython
59 | defusedxml==0.7.1
60 | # via nbconvert
61 | docutils==0.20.1
62 | # via nikola
63 | doit==0.36.0
64 | # via nikola
65 | executing==2.0.1
66 | # via stack-data
67 | fastjsonschema==2.19.1
68 | # via nbformat
69 | fqdn==1.5.1
70 | # via jsonschema
71 | frozenlist==1.4.1
72 | # via
73 | # aiohttp
74 | # aiosignal
75 | ghp-import==2.1.0
76 | # via nikola
77 | h11==0.14.0
78 | # via httpcore
79 | hsluv==5.0.4
80 | # via nikola
81 | html5lib==1.1
82 | # via nikola
83 | httpcore==1.0.5
84 | # via httpx
85 | httpx==0.27.2
86 | # via jupyterlab
87 | idna==3.7
88 | # via
89 | # anyio
90 | # httpx
91 | # jsonschema
92 | # requests
93 | # yarl
94 | importlib-metadata==7.0.1
95 | # via
96 | # doit
97 | # pygal
98 | ipykernel==6.29.0
99 | # via
100 | # jupyterlab
101 | # nikola
102 | ipython==8.20.0
103 | # via ipykernel
104 | isoduration==20.11.0
105 | # via jsonschema
106 | jedi==0.19.1
107 | # via ipython
108 | jinja2==3.1.6
109 | # via
110 | # jupyter-server
111 | # jupyterlab
112 | # jupyterlab-server
113 | # nbconvert
114 | # nikola
115 | json5==0.9.14
116 | # via jupyterlab-server
117 | jsonpointer==2.4
118 | # via jsonschema
119 | jsonschema[format-nongpl]==4.21.1
120 | # via
121 | # jupyter-events
122 | # jupyterlab-server
123 | # nbformat
124 | jsonschema-specifications==2023.12.1
125 | # via jsonschema
126 | jupyter-client==8.6.0
127 | # via
128 | # ipykernel
129 | # jupyter-server
130 | # nbclient
131 | jupyter-core==5.7.1
132 | # via
133 | # ipykernel
134 | # jupyter-client
135 | # jupyter-server
136 | # jupyterlab
137 | # nbclient
138 | # nbconvert
139 | # nbformat
140 | jupyter-events==0.9.0
141 | # via jupyter-server
142 | jupyter-lsp==2.2.2
143 | # via jupyterlab
144 | jupyter-server==2.12.5
145 | # via
146 | # jupyter-lsp
147 | # jupyterlab
148 | # jupyterlab-server
149 | # notebook
150 | # notebook-shim
151 | jupyter-server-terminals==0.5.1
152 | # via jupyter-server
153 | jupyterlab==4.2.5
154 | # via notebook
155 | jupyterlab-pygments==0.3.0
156 | # via nbconvert
157 | jupyterlab-server==2.27.3
158 | # via
159 | # jupyterlab
160 | # notebook
161 | lxml==5.1.0
162 | # via nikola
163 | mako==1.3.0
164 | # via nikola
165 | markdown==3.5.2
166 | # via nikola
167 | markupsafe==2.1.3
168 | # via
169 | # jinja2
170 | # mako
171 | # nbconvert
172 | matplotlib-inline==0.1.6
173 | # via
174 | # ipykernel
175 | # ipython
176 | micawber==0.5.5
177 | # via nikola
178 | mistune==3.0.2
179 | # via nbconvert
180 | multidict==6.0.4
181 | # via
182 | # aiohttp
183 | # yarl
184 | natsort==8.4.0
185 | # via nikola
186 | nbclient==0.9.0
187 | # via nbconvert
188 | nbconvert==7.14.2
189 | # via jupyter-server
190 | nbformat==5.9.2
191 | # via
192 | # jupyter-server
193 | # nbclient
194 | # nbconvert
195 | nest-asyncio==1.5.9
196 | # via ipykernel
197 | nikola[extras]==8.3.0
198 | # via -r requirements.in
199 | notebook==7.2.2
200 | # via nikola
201 | notebook-shim==0.2.3
202 | # via
203 | # jupyterlab
204 | # notebook
205 | overrides==7.4.0
206 | # via jupyter-server
207 | packaging==23.2
208 | # via
209 | # ipykernel
210 | # jupyter-server
211 | # jupyterlab
212 | # jupyterlab-server
213 | # nbconvert
214 | pandocfilters==1.5.1
215 | # via nbconvert
216 | parso==0.8.3
217 | # via jedi
218 | pexpect==4.9.0
219 | # via ipython
220 | phpserialize==1.3
221 | # via nikola
222 | piexif==1.1.3
223 | # via nikola
224 | pillow==10.3.0
225 | # via nikola
226 | platformdirs==4.1.0
227 | # via jupyter-core
228 | prometheus-client==0.19.0
229 | # via jupyter-server
230 | prompt-toolkit==3.0.43
231 | # via ipython
232 | propcache==0.2.0
233 | # via yarl
234 | psutil==5.9.8
235 | # via ipykernel
236 | ptyprocess==0.7.0
237 | # via
238 | # pexpect
239 | # terminado
240 | pure-eval==0.2.2
241 | # via stack-data
242 | pycparser==2.21
243 | # via cffi
244 | pygal==3.0.4
245 | # via nikola
246 | pygments==2.17.2
247 | # via
248 | # ipython
249 | # nbconvert
250 | # nikola
251 | pyphen==0.14.0
252 | # via nikola
253 | pyrss2gen==1.1
254 | # via nikola
255 | python-dateutil==2.8.2
256 | # via
257 | # arrow
258 | # ghp-import
259 | # jupyter-client
260 | # nikola
261 | python-json-logger==2.0.7
262 | # via jupyter-events
263 | pyyaml==6.0.1
264 | # via jupyter-events
265 | pyzmq==25.1.2
266 | # via
267 | # ipykernel
268 | # jupyter-client
269 | # jupyter-server
270 | referencing==0.32.1
271 | # via
272 | # jsonschema
273 | # jsonschema-specifications
274 | # jupyter-events
275 | requests==2.32.0
276 | # via
277 | # jupyterlab-server
278 | # nikola
279 | rfc3339-validator==0.1.4
280 | # via
281 | # jsonschema
282 | # jupyter-events
283 | rfc3986-validator==0.1.1
284 | # via
285 | # jsonschema
286 | # jupyter-events
287 | rpds-py==0.17.1
288 | # via
289 | # jsonschema
290 | # referencing
291 | ruamel-yaml==0.18.5
292 | # via
293 | # -r requirements.in
294 | # nikola
295 | ruamel-yaml-clib==0.2.8
296 | # via ruamel-yaml
297 | send2trash==1.8.2
298 | # via jupyter-server
299 | six==1.16.0
300 | # via
301 | # asttokens
302 | # bleach
303 | # html5lib
304 | # python-dateutil
305 | # rfc3339-validator
306 | smartypants==2.0.1
307 | # via typogrify
308 | sniffio==1.3.0
309 | # via
310 | # anyio
311 | # httpx
312 | soupsieve==2.5
313 | # via beautifulsoup4
314 | stack-data==0.6.3
315 | # via ipython
316 | terminado==0.18.0
317 | # via
318 | # jupyter-server
319 | # jupyter-server-terminals
320 | tinycss2==1.2.1
321 | # via nbconvert
322 | toml==0.10.2
323 | # via nikola
324 | tornado==6.5.1
325 | # via
326 | # ipykernel
327 | # jupyter-client
328 | # jupyter-server
329 | # jupyterlab
330 | # notebook
331 | # terminado
332 | traitlets==5.14.1
333 | # via
334 | # comm
335 | # ipykernel
336 | # ipython
337 | # jupyter-client
338 | # jupyter-core
339 | # jupyter-events
340 | # jupyter-server
341 | # jupyterlab
342 | # matplotlib-inline
343 | # nbclient
344 | # nbconvert
345 | # nbformat
346 | types-python-dateutil==2.8.19.20240106
347 | # via arrow
348 | typogrify==2.0.7
349 | # via nikola
350 | unidecode==1.3.8
351 | # via nikola
352 | uri-template==1.3.0
353 | # via jsonschema
354 | urllib3==2.2.2
355 | # via requests
356 | watchdog==3.0.0
357 | # via nikola
358 | wcwidth==0.2.13
359 | # via prompt-toolkit
360 | webcolors==1.13
361 | # via jsonschema
362 | webencodings==0.5.1
363 | # via
364 | # bleach
365 | # html5lib
366 | # tinycss2
367 | websocket-client==1.7.0
368 | # via jupyter-server
369 | yarl==1.17.2
370 | # via aiohttp
371 | zipp==3.19.1
372 | # via importlib-metadata
373 |
374 | # The following packages are considered to be unsafe in a requirements file:
375 | # setuptools
376 |
--------------------------------------------------------------------------------
/runtime.txt:
--------------------------------------------------------------------------------
1 | 3.8
2 |
--------------------------------------------------------------------------------