From c828a45aa8826b06030a0bc0991dc896f0f56b00 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sun, 17 May 2026 12:13:27 +0300 Subject: [PATCH] init --- .gitignore | 3 + blue-penguin-dark/CONTRIBUTORS.md | 20 + blue-penguin-dark/LICENSE | 24 + blue-penguin-dark/README.md | 70 +++ blue-penguin-dark/sample/content/code.md | 13 + blue-penguin-dark/sample/content/post.md | 8 + blue-penguin-dark/sample/settings.py | 22 + blue-penguin-dark/static/css/main.css | 465 ++++++++++++++++++ blue-penguin-dark/static/css/pygments.css | 87 ++++ blue-penguin-dark/templates/analytics.html | 11 + blue-penguin-dark/templates/archives.html | 22 + blue-penguin-dark/templates/article.html | 17 + blue-penguin-dark/templates/article_stub.html | 46 ++ blue-penguin-dark/templates/author.html | 7 + blue-penguin-dark/templates/base.html | 119 +++++ blue-penguin-dark/templates/category.html | 6 + blue-penguin-dark/templates/disqus.html | 12 + blue-penguin-dark/templates/index.html | 17 + blue-penguin-dark/templates/page.html | 11 + blue-penguin-dark/templates/pagination.html | 17 + blue-penguin-dark/templates/tag.html | 5 + blue-penguin-dark/templates/tags.html | 8 + blue-penguin-dark/templates/translations.html | 6 + content/20260516_dune.md | 16 + content/20260516_flotsam.md | 16 + content/20260516_fm_surfing.md | 26 + content/20260517_voyage.md | 38 ++ content/pages/about.md | 9 + content/pages/glossary.md | 12 + pelicanconf.py | 71 +++ 30 files changed, 1204 insertions(+) create mode 100644 .gitignore create mode 100644 blue-penguin-dark/CONTRIBUTORS.md create mode 100644 blue-penguin-dark/LICENSE create mode 100644 blue-penguin-dark/README.md create mode 100644 blue-penguin-dark/sample/content/code.md create mode 100644 blue-penguin-dark/sample/content/post.md create mode 100644 blue-penguin-dark/sample/settings.py create mode 100644 blue-penguin-dark/static/css/main.css create mode 100644 blue-penguin-dark/static/css/pygments.css create mode 100644 blue-penguin-dark/templates/analytics.html create mode 100644 blue-penguin-dark/templates/archives.html create mode 100644 blue-penguin-dark/templates/article.html create mode 100644 blue-penguin-dark/templates/article_stub.html create mode 100644 blue-penguin-dark/templates/author.html create mode 100644 blue-penguin-dark/templates/base.html create mode 100644 blue-penguin-dark/templates/category.html create mode 100644 blue-penguin-dark/templates/disqus.html create mode 100644 blue-penguin-dark/templates/index.html create mode 100644 blue-penguin-dark/templates/page.html create mode 100644 blue-penguin-dark/templates/pagination.html create mode 100644 blue-penguin-dark/templates/tag.html create mode 100644 blue-penguin-dark/templates/tags.html create mode 100644 blue-penguin-dark/templates/translations.html create mode 100644 content/20260516_dune.md create mode 100644 content/20260516_flotsam.md create mode 100644 content/20260516_fm_surfing.md create mode 100644 content/20260517_voyage.md create mode 100644 content/pages/about.md create mode 100644 content/pages/glossary.md create mode 100644 pelicanconf.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64741b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +output/ +.claude/ +__pycache__/ \ No newline at end of file diff --git a/blue-penguin-dark/CONTRIBUTORS.md b/blue-penguin-dark/CONTRIBUTORS.md new file mode 100644 index 0000000..de4e6ac --- /dev/null +++ b/blue-penguin-dark/CONTRIBUTORS.md @@ -0,0 +1,20 @@ +# Contributors + +* [Nevan Scott](https://github.com/nevanscott/Mockingbird) (original author) +* [wrl](https://github.com/wrl/pelican-mockingbird) (port to pelican, pelican-mockingbird) +* [Jody Frankowski](http://github.com/jody-frankowski) (Blue Penguin) +* [Grimbox](https://github.com/Grimbox) +* [ix5](https://github.com/ix5) +* [dn0](https://github.com/dn0) +* [anhtuann](https://github.com/anhtuann) +* [aperep](https://github.com/aperep) +* [iranzo](https://github.com/iranzo) +* [thetlk](https://github.com/thetlk) +* [SnorlaxYum](https://github.com/SnorlaxYum) +* [guikcd](https://github.com/guikcd) +* [jorgesumle](https://github.com/jorgesumle) +* [crxxn](https://github.com/crxxn) +* [gavinzbq](https://github.com/gavinzbq) +* [sylvainmetayer](https://github.com/sylvainmetayer) +* [wbob](https://github.com/wbob) +* [Tyler Carr](https://github.com/tcarwash) diff --git a/blue-penguin-dark/LICENSE b/blue-penguin-dark/LICENSE new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/blue-penguin-dark/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/blue-penguin-dark/README.md b/blue-penguin-dark/README.md new file mode 100644 index 0000000..7be6c29 --- /dev/null +++ b/blue-penguin-dark/README.md @@ -0,0 +1,70 @@ +![screenshot](https://tyler-carr.com/images/ftp/out.png) + +# Blue Penguin Dark for pelican +A simple dark theme for pelican, with light/dark mode support using media queries available. Solarized pygments. Feeds support. + +This theme has been adapted from the original [Blue Penguin Theme](https://github.com/jody-frankowski/blue-penguin) for use on [my website](https://tyler-carr.com), all changes are generic and this theme can be used interchangeably with the original. + +## Settings +```python +# all the following settings are *optional* + +# Site Logo +SITELOGO = '' + +# HTML metadata +SITEDESCRIPTION = '' + +# all defaults to True. +DISPLAY_HEADER = True +DISPLAY_FOOTER = True +DISPLAY_HOME = True +DISPLAY_MENU = True +DARK_LIGHT_SWITCHING_OFF = True + +# provided as examples, they make ‘clean’ urls. used by MENU_INTERNAL_PAGES. +TAGS_URL = 'tags' +TAGS_SAVE_AS = 'tags/index.html' +AUTHORS_URL = 'authors' +AUTHORS_SAVE_AS = 'authors/index.html' +CATEGORIES_URL = 'categories' +CATEGORIES_SAVE_AS = 'categories/index.html' +ARCHIVES_URL = 'archives' +ARCHIVES_SAVE_AS = 'archives/index.html' + +# use those if you want pelican standard pages to appear in your menu +MENU_INTERNAL_PAGES = ( + ('Tags', TAGS_URL, TAGS_SAVE_AS), + ('Authors', AUTHORS_URL, AUTHORS_SAVE_AS), + ('Categories', CATEGORIES_URL, CATEGORIES_SAVE_AS), + ('Archives', ARCHIVES_URL, ARCHIVES_SAVE_AS), +) +# additional menu items +MENUITEMS = ( + ('GitHub', 'https://github.com/'), + ('Linux Kernel', 'https://www.kernel.org/'), +) + +# example pagination pattern +PAGINATION_PATTERNS = ( + (1, '{url}', '{save_as}'), + (2, '{base_name}/page/{number}/', '{base_name}/page/{number}/index.html'), +) + +``` + +Dark/Light switching is disabled by default, but can be enabled in the config file by adding: + +``` +DARK_LIGHT_SWITCHING_OFF = FALSE +``` + + +## How to contribute +Contributions are very welcome. Keep in mind that this theme goal is to be +minimalistic/simple. Contributions will be accepted through Github Pull +Requests. If you don’t have a Github account you can suggest me your +changes by email. + +## Contributors +See [CONTRIBUTORS.md](CONTRIBUTORS.md). diff --git a/blue-penguin-dark/sample/content/code.md b/blue-penguin-dark/sample/content/code.md new file mode 100644 index 0000000..4232206 --- /dev/null +++ b/blue-penguin-dark/sample/content/code.md @@ -0,0 +1,13 @@ +Title: Solarized Pygments +Date: 2022-6-28 12:00 +Category: Python +Tags: pelican, publishing +Authors: Alexis Metaireau, Conan Doyle +Summary: Short version for index and feeds + +``` +#!/usr/bin/python3 + +while True: + print("Pelican is neat!") +``` diff --git a/blue-penguin-dark/sample/content/post.md b/blue-penguin-dark/sample/content/post.md new file mode 100644 index 0000000..19c44c2 --- /dev/null +++ b/blue-penguin-dark/sample/content/post.md @@ -0,0 +1,8 @@ +Title: Blue Penguin Dark +Date: 2022-6-28 13:00 +Category: Python +Tags: pelican, publishing +Authors: Alexis Metaireau, Conan Doyle +Summary: Short version for index and feeds + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/blue-penguin-dark/sample/settings.py b/blue-penguin-dark/sample/settings.py new file mode 100644 index 0000000..0c7bf28 --- /dev/null +++ b/blue-penguin-dark/sample/settings.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # + +AUTHOR = 'Tyler Carr' +SITENAME = 'Blue Penguin Dark' +SITEURL = 'http://localhost:8000' +SITELOGO = 'https://www.gravatar.com/avatar/de3ba847c89c8cab9dd7080abebf9df1' +DEFAULT_METADATE = { + 'status': 'draft', + } + + +PATH = 'content' + +TIMEZONE = 'America/Los_Angeles' + +DEFAULT_LANG = 'en' + + +MENUITEMS = ( + ('About', '/'), + ) diff --git a/blue-penguin-dark/static/css/main.css b/blue-penguin-dark/static/css/main.css new file mode 100644 index 0000000..d1c4acc --- /dev/null +++ b/blue-penguin-dark/static/css/main.css @@ -0,0 +1,465 @@ +@import url('https://fonts.cdnfonts.com/css/bitwise'); + +/* http://meyerweb.com/eric/tools/css/reset/ +v2.0 | 20110126 +License: none (public domain) + */ +/* Mockingbird Theme by Nevan Scott nevanscott.com */ +/* Modified by Jody Frankowski */ +/* Modified by ix5 */ +/* Modified by Tyler Carr */ + +:root { + /* Catppuccin Mocha */ + --main-bg-color: #1e1e2e; /* Base */ + --code-bg-color: #181825; /* Mantle */ + --accent-color: #94e2d5; /* Teal */ + --tab-bg-hover: var(--code-bg-color); + --info-bg-color: #313244; /* Surface0 */ +} + + + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, svg, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + color: #cdd6f4; /* Mocha Text */ + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +em { + font-style: italic; +} +strong { + font-weight: bold; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; + background-color: var(--main-bg-color); +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +body { + font-family: Georgia, serif; + font-size: 16px; + line-height: 1.5em; +} + +header, #wrapper { + padding: 0 10px; + max-width: 910px; + margin: auto; +} + +a { + text-decoration: none; + color: #94e2d5; /* Mocha Teal */ +} + +ul { + list-style: outside disc; +} + +ol { + list-style: outside decimal; +} + +dl { + margin-left: 3em; +} + +dd { + margin-left: 3em; +} + +dd > p { + margin-top: 0; +} + +h1, h2, h3, h4, h5, h6 { + font-family: sans-serif; + font-weight: bold; +} +h1, h2, h3 { + font-size: 1.5em; + line-height: 1em; + margin: 1em 0; +} + +img, svg, p, .post > .highlight, .highlighttable, h4, h5, h6, dl { + margin-top: 1.2em; +} +img + em { + font-size: .8em; +} + +blockquote { + margin: 1.5em 1.5em 1.5em .75em; + padding-left: .75em; + border-left: 1px solid #45475a; /* Mocha Surface1 */ +} + +table { + width: 100%; + margin: 1em 0; +} +thead { + border-bottom: 1px solid #45475a; /* Mocha Surface1 */ +} + +.avatar { + border-radius: 50%; + -mox-border-radius: 50%; + -webkit-border-radius: 50%; + position: relative; + bottom: 0; + top: 0; + margin: auto; + display: inline; + padding-right: 5px; +} + +.date { + color: #bac2de; /* Mocha Subtext1 */ + float: left; + clear: both; + width: 130px; + font-size: 1.5em; + line-height: 1em; + margin: 0 20px 1em 0; +} + +.info { + margin-top: 1.3em; + font-family: sans-serif; + text-align: right; + color: #cdd6f4; /* Mocha Text */ +} +.info a { + color: inherit; +} +.info a.tags { + background: var(--info-bg-color); + color: #FFF; + display: inline-block; + padding: 0 .3em; + border: 1px transparent solid; + border-radius: 5px; + margin: 0 0 0.3em 0; +} +.info a.tags:hover { + background: inherit; + color: inherit; +} +.info a.tags.selected { + border: 1px #6c7086 solid; /* Mocha Overlay0 */ +} + +.post { + margin: 0 0 4.5em 150px; +} +.post.archives { + margin-bottom: 1.5em; + margin-left: 160px; +} +.post p { + text-align: justify; +} + +.page { + margin: 0 90px; +} + +.highlight { + border-radius: 3px; +} +.code > .highlight { + border-radius: 0px 3px 3px 0px; + background-color: var(--code-bg-color); +} +.linenos { + border-radius: 3px 0px 0px 3px; + background-color: var(--code-bg-color); + border-right: 1px solid #11111b; /* Mocha Crust */ + color: #6c7086; /* Mocha Overlay0 */ + text-shadow: 0px -1px #11111b; /* Mocha Crust */ + font-size: 12.6px; +} +td.code { + width: 100%; + max-width: 100px; +} +.linenos a { + color: #6c7086; /* Mocha Overlay0 */ +} + +img, svg { + box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.15); + border-radius: 0.3em; + max-width: 100%; + display: block; + margin-left: auto; + margin-right: auto; +} + +/*sub and sup stolen from Twitter bootstrap.*/ +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +.post pre, .page pre { + padding: .8em; + font-size: 12.6px; + font-family: Monaco,Menlo,Consolas,"Courier New",monospace; + line-height: 18px; + overflow: auto; + background-color: var(--code-bg-color); +} + +form.inline_edit { + clear: both; + margin: 4.5em 0; + background-color: #313244; /* Mocha Surface0 */ + color: #cdd6f4; /* Mocha Text */ + padding: 20px; + border-radius: 5px; +} +.inline_edit .sub { + color: #6c7086; /* Mocha Overlay0 */ + white-space: nowrap; +} +.inline_edit label { + float: left; + clear: both; + width: 140px; + margin-right: 20px; +} +.inline_edit .buttons { + display: block; + text-align: right; +} + +nav ul { + float: right; + list-style: none; + margin: 0 0 0 3em; + padding: 0; +} +nav li { + float: left; +} +nav a { + display: block; + padding: 4.5em 10px 10px 10px; +} +nav a:hover { + background-color: var(--tab-bg-hover); + color: var(--accent-color); +} +nav li.selected a { + background-color: #94e2d5; /* Mocha Teal */ + color: #1e1e2e; /* Mocha Base */ +} + +header .header_box { +/* padding-top: 4.5em; */ + +} +.site_title { + position: relative; + bottom: 15px; + color: #94e2d5; /* Mocha Teal */ + font-family: 'Bitwise', monospace; + font-size: 1.5em; +} +header h1 { + font-size: 1.5em; + line-height: 1em; + margin: 0; +} +header h2 { + font-size: 1em; + margin: .3em 0; + color: #a6adc8; /* Mocha Subtext0 */ +} + +#content { + margin-top: 3em; +} + +.pages { + font-family: sans-serif; + line-height: 2.5em; + margin: 4.5em 0 3em; + background-color: #313244; /* Mocha Surface0 */ + border-radius: 5px; +} +.pages a.next_page { + float: right; + width: 140px; + text-align: center; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + background-color: #45475a; /* Mocha Surface1 */ +} +.pages a.prev_page { + float: left; + width: 140px; + text-align: center; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + background-color: #45475a; /* Mocha Surface1 */ +} +.pages a { + color: inherit; + border: none; +} +.pages a:hover { + background-color: #585b70; /* Mocha Surface2 */ +} +.pages span { + display: block; + margin: 0 160px; + text-align: center; +} + +code { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + box-sizing: border-box; + background-color: #181825; /* Mocha Mantle */ + color: #89dceb; /* Mocha Sky */ + font-family: Monaco,Menlo,Consolas,"Courier New",monospace; + font-size: 12.6px; + line-height: 18px; + padding-bottom: 2px; + padding-left: 0px; + padding-right: 4px; + padding-top: 2px; +} + +footer { + font-family: sans-serif; + line-height: 2.5em; + text-align: center; + color: #cdd6f4; /* Mocha Text */ + margin: 3em 0; + border: 1px solid #45475a; /* Mocha Surface1 */ + border-radius: 5px; +} +footer p { margin: 0; } + +.right { float: right; } + +.clear { clear: both; } + +@media screen and (max-width: 1024px) { + #wrapper { + margin-left: 2.6em; + padding:1em; + } +} + +@media screen and (max-width: 800px), print { + #wrapper { + margin: 0; + padding: 1em; + } + .date { + width: 100%; + margin: 0 0 .5em 0; + } + .post { + margin: 0 0 4.5em 0; + } + .post pre, + .post code { + white-space: pre-wrap; + } + .archives { + margin: 0 0 1.5em 0 !important; + } + nav ul { + margin: 0 0 1em 0; + } +} +@media print { + * { + background: #fff; + } + #wrapper, #content { + margin: 0; + padding: 0; + } + header, footer, nav { + display: none; + } + img, svg { + break-inside: avoid; + } + p, table, pre { + widows: 3; + orphans: 3; + } + h1, h2, h3, h4, h5, h6 { + break-after: avoid; + } + h1, h2 { + font-size: 14pt; + } + h3, h4, h4.date { + font-size: 12pt; + } + .post p, .post ul li, .post ol li, .post table { + font-size: 11pt; + } +} +@page { + margin: 1.5cm; +} diff --git a/blue-penguin-dark/static/css/pygments.css b/blue-penguin-dark/static/css/pygments.css new file mode 100644 index 0000000..cb38d12 --- /dev/null +++ b/blue-penguin-dark/static/css/pygments.css @@ -0,0 +1,87 @@ +/* Solarized Dark + +For use with Jekyll and Pygments + +http://ethanschoonover.com/solarized + +SOLARIZED HEX ROLE +--------- -------- ------------------------------------------ +base03 #002b36 background +base01 #586e75 comments / secondary content +base1 #93a1a1 body text / default code / primary content +orange #cb4b16 constants +red #dc322f regex, special keywords +blue #268bd2 reserved keywords +cyan #2aa198 strings, numbers +green #859900 operators, other keywords +*/ + +.highlight { color: #93a1a1; background-color: #17202a;} +.highlight .c { color: #586e75 } /* Comment */ +.highlight .err { color: #93a1a1 } /* Error */ +.highlight .g { color: #93a1a1 } /* Generic */ +.highlight .k { color: #859900 } /* Keyword */ +.highlight .l { color: #93a1a1 } /* Literal */ +.highlight .n { color: #93a1a1 } /* Name */ +.highlight .o { color: #859900 } /* Operator */ +.highlight .x { color: #cb4b16 } /* Other */ +.highlight .p { color: #93a1a1 } /* Punctuation */ +.highlight .cm { color: #586e75 } /* Comment.Multiline */ +.highlight .cp { color: #859900 } /* Comment.Preproc */ +.highlight .c1 { color: #586e75 } /* Comment.Single */ +.highlight .cs { color: #859900 } /* Comment.Special */ +.highlight .gd { color: #2aa198 } /* Generic.Deleted */ +.highlight .ge { color: #93a1a1; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #dc322f } /* Generic.Error */ +.highlight .gh { color: #cb4b16 } /* Generic.Heading */ +.highlight .gi { color: #859900 } /* Generic.Inserted */ +.highlight .go { color: #93a1a1 } /* Generic.Output */ +.highlight .gp { color: #93a1a1 } /* Generic.Prompt */ +.highlight .gs { color: #93a1a1; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #cb4b16 } /* Generic.Subheading */ +.highlight .gt { color: #93a1a1 } /* Generic.Traceback */ +.highlight .kc { color: #cb4b16 } /* Keyword.Constant */ +.highlight .kd { color: #268bd2 } /* Keyword.Declaration */ +.highlight .kn { color: #859900 } /* Keyword.Namespace */ +.highlight .kp { color: #859900 } /* Keyword.Pseudo */ +.highlight .kr { color: #268bd2 } /* Keyword.Reserved */ +.highlight .kt { color: #dc322f } /* Keyword.Type */ +.highlight .ld { color: #93a1a1 } /* Literal.Date */ +.highlight .m { color: #2aa198 } /* Literal.Number */ +.highlight .s { color: #2aa198 } /* Literal.String */ +.highlight .na { color: #93a1a1 } /* Name.Attribute */ +.highlight .nb { color: #B58900 } /* Name.Builtin */ +.highlight .nc { color: #268bd2 } /* Name.Class */ +.highlight .no { color: #cb4b16 } /* Name.Constant */ +.highlight .nd { color: #268bd2 } /* Name.Decorator */ +.highlight .ni { color: #cb4b16 } /* Name.Entity */ +.highlight .ne { color: #cb4b16 } /* Name.Exception */ +.highlight .nf { color: #268bd2 } /* Name.Function */ +.highlight .nl { color: #93a1a1 } /* Name.Label */ +.highlight .nn { color: #93a1a1 } /* Name.Namespace */ +.highlight .nx { color: #93a1a1 } /* Name.Other */ +.highlight .py { color: #93a1a1 } /* Name.Property */ +.highlight .nt { color: #268bd2 } /* Name.Tag */ +.highlight .nv { color: #268bd2 } /* Name.Variable */ +.highlight .ow { color: #859900 } /* Operator.Word */ +.highlight .w { color: #93a1a1 } /* Text.Whitespace */ +.highlight .mf { color: #2aa198 } /* Literal.Number.Float */ +.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */ +.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */ +.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */ +.highlight .sb { color: #586e75 } /* Literal.String.Backtick */ +.highlight .sc { color: #2aa198 } /* Literal.String.Char */ +.highlight .sd { color: #93a1a1 } /* Literal.String.Doc */ +.highlight .s2 { color: #2aa198 } /* Literal.String.Double */ +.highlight .se { color: #cb4b16 } /* Literal.String.Escape */ +.highlight .sh { color: #93a1a1 } /* Literal.String.Heredoc */ +.highlight .si { color: #2aa198 } /* Literal.String.Interpol */ +.highlight .sx { color: #2aa198 } /* Literal.String.Other */ +.highlight .sr { color: #dc322f } /* Literal.String.Regex */ +.highlight .s1 { color: #2aa198 } /* Literal.String.Single */ +.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */ +.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #268bd2 } /* Name.Variable.Class */ +.highlight .vg { color: #268bd2 } /* Name.Variable.Global */ +.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */ +.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */ diff --git a/blue-penguin-dark/templates/analytics.html b/blue-penguin-dark/templates/analytics.html new file mode 100644 index 0000000..f349491 --- /dev/null +++ b/blue-penguin-dark/templates/analytics.html @@ -0,0 +1,11 @@ +{% if GOOGLE_ANALYTICS %} + + + +{% endif %} diff --git a/blue-penguin-dark/templates/archives.html b/blue-penguin-dark/templates/archives.html new file mode 100644 index 0000000..73c53ba --- /dev/null +++ b/blue-penguin-dark/templates/archives.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} | Archives{% endblock %} +{% block content %} + +

Archives

+ + {# based on http://stackoverflow.com/questions/12764291/jinja2-group-by-month-year #} + + {% for year, year_group in dates|groupby('date.year')|reverse %} + {% for month, month_group in year_group|groupby('date.month')|reverse %} +

{{ (month_group|first).date|strftime('%b %Y') }}

+
+ +
+ {% endfor %} + {% endfor %} +{% endblock %} diff --git a/blue-penguin-dark/templates/article.html b/blue-penguin-dark/templates/article.html new file mode 100644 index 0000000..40c60b1 --- /dev/null +++ b/blue-penguin-dark/templates/article.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} + +{% block head %} + {{ super() }} + {% if article.tags %} + + {% endif %} + {% if article.description %} + + {% endif %} +{% endblock %} + +{% block title %}{{ SITENAME }} | {{ article.title|striptags }}{% endblock %} + +{% block content %} +{% include "article_stub.html" %} +{% endblock %} diff --git a/blue-penguin-dark/templates/article_stub.html b/blue-penguin-dark/templates/article_stub.html new file mode 100644 index 0000000..9ef1260 --- /dev/null +++ b/blue-penguin-dark/templates/article_stub.html @@ -0,0 +1,46 @@ + {% if not articles_page or first_article_of_day %} +

{{ article.era }}

+ {% endif %} + +
+ {% if article.title %} +

+ {{ article.title }} +

+ {% endif %} + + {% if not articles_page %} + {% include "translations.html" %} + {% endif %} + + + {% if articles_page %} + {% if '' in article.content %} + {{ article.content.split('')[0] }} +

{{ article.read_more if article.read_more is defined else 'Read more →' }}

+ {% else %} + {{ article.summary }} + {% endif %} + {% else %} + {{ article.content }} + {% endif %} +
+ +
+ posted on {{ article.date.strftime("%b %d, %Y") }} + {% if article.category.name != "misc" %} +  ·  + {% endif %} + {% if article.tags %} +  · + {% for t in article.tags %} +  {{ t }} + {% endfor %} + {% endif %} +
+ {% if articles_page and DISQUS_SITENAME %} + Click to read and post comments + {% else %} + {% include "disqus.html" %} + {% endif %} +
diff --git a/blue-penguin-dark/templates/author.html b/blue-penguin-dark/templates/author.html new file mode 100644 index 0000000..b9ff61e --- /dev/null +++ b/blue-penguin-dark/templates/author.html @@ -0,0 +1,7 @@ +{% extends "index.html" %} + +{% block title %}{{ SITENAME }} | Articles by {{ author }}{% endblock %} +{% block ephemeral_nav %} + + {{ ephemeral_nav_link(author, output_file, True) }} +{% endblock %} diff --git a/blue-penguin-dark/templates/base.html b/blue-penguin-dark/templates/base.html new file mode 100644 index 0000000..085ec66 --- /dev/null +++ b/blue-penguin-dark/templates/base.html @@ -0,0 +1,119 @@ +{% macro ephemeral_nav_link(what, where, selected=False) -%} +
  • {{what}}
  • +{%- endmacro -%} + + + + + {% block head %} + + + {% block title %}{{ SITENAME }}{% endblock title %} + {# favicon #} + + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + {% if FEED_ATOM %} + + {% endif %} + {% if FEED_RSS %} + + {% endif %} + {% if CATEGORY_FEED_ATOM and category %} + + {% endif %} + {% if CATEGORY_FEED_RSS and category %} + + {% endif %} + {% if TAG_FEED_ATOM and tag %} + + {% endif %} + {% if TAG_FEED_RSS and tag %} + + {% endif %} + + + {% if DARK_LIGHT_SWITCHING_OFF == False %} + + {% endif %} + + + + {% include 'analytics.html' %} + {% endblock head %} + + + {% if DISPLAY_HEADER or DISPLAY_HEADER is not defined %} +
    + {% if DISPLAY_MENU or DISPLAY_MENU is not defined %} + + {% endif %} + + {% if SITE_SUBTITLE %} +

    {{ SITE_SUBTITLE }}

    + {% endif %} + +
    + {% endif %} +
    +
    + {%- block content -%}{%- endblock %} + + {% if DISPLAY_FOOTER or DISPLAY_FOOTER is not defined %} +
    + + {% endif %} +
    +
    +
    + + diff --git a/blue-penguin-dark/templates/category.html b/blue-penguin-dark/templates/category.html new file mode 100644 index 0000000..6587d98 --- /dev/null +++ b/blue-penguin-dark/templates/category.html @@ -0,0 +1,6 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} | articles in the "{{ category }}" category{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %} +{% block ephemeral_nav %} + + {{ ephemeral_nav_link(category, output_file, True) }} +{% endblock %} diff --git a/blue-penguin-dark/templates/disqus.html b/blue-penguin-dark/templates/disqus.html new file mode 100644 index 0000000..b4093e5 --- /dev/null +++ b/blue-penguin-dark/templates/disqus.html @@ -0,0 +1,12 @@ +{% if DISQUS_SITENAME %} +
    + + +{% endif %} diff --git a/blue-penguin-dark/templates/index.html b/blue-penguin-dark/templates/index.html new file mode 100644 index 0000000..b8b40f4 --- /dev/null +++ b/blue-penguin-dark/templates/index.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }}{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %} +{% block content %} +{% set date = None %} +{% for article in articles_page.object_list %} +{% if date != article.date.date() %} +{% set first_article_of_day = True %} +{% else %} +{% set first_article_of_day = False %} +{% endif %} +{% set date = article.date.date() %} +{% include "article_stub.html" %} +{% endfor %} + +{% include "pagination.html" %} +{% endblock %} diff --git a/blue-penguin-dark/templates/page.html b/blue-penguin-dark/templates/page.html new file mode 100644 index 0000000..342286c --- /dev/null +++ b/blue-penguin-dark/templates/page.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} | {{ page.title }}{% endblock %} + +{% block content %} + +
    +

    {{ page.title }}

    + {{ page.content }} +
    +{% endblock %} diff --git a/blue-penguin-dark/templates/pagination.html b/blue-penguin-dark/templates/pagination.html new file mode 100644 index 0000000..6562444 --- /dev/null +++ b/blue-penguin-dark/templates/pagination.html @@ -0,0 +1,17 @@ +{# Use PAGINATION_PATTERNS or pagination may break #} +{% if DEFAULT_PAGINATION and (articles_page.has_previous() or articles_page.has_next()) %} + +
    +
    + + {% if articles_page.has_previous() %} + ← Previous + {% endif %} + + {% if articles_page.has_next() %} + Next → + {% endif %} + + Page {{ articles_page.number }} of {{ articles_paginator.num_pages }} +
    +{% endif %} diff --git a/blue-penguin-dark/templates/tag.html b/blue-penguin-dark/templates/tag.html new file mode 100644 index 0000000..92c3439 --- /dev/null +++ b/blue-penguin-dark/templates/tag.html @@ -0,0 +1,5 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} | articles tagged "{{ tag }}"{% if articles_page.number != 1 %} | Page {{ articles_page.number }}{% endif %}{% endblock %} +{% block ephemeral_nav %} + {{ ephemeral_nav_link(tag, output_file, True) }} +{% endblock %} diff --git a/blue-penguin-dark/templates/tags.html b/blue-penguin-dark/templates/tags.html new file mode 100644 index 0000000..ac65722 --- /dev/null +++ b/blue-penguin-dark/templates/tags.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% block content %} + +{% endblock %} diff --git a/blue-penguin-dark/templates/translations.html b/blue-penguin-dark/templates/translations.html new file mode 100644 index 0000000..f0a0fa2 --- /dev/null +++ b/blue-penguin-dark/templates/translations.html @@ -0,0 +1,6 @@ +{% if article.translations %} +Translations: + {% for translation in article.translations %} + {{ translation.lang }} + {% endfor %} +{% endif %} \ No newline at end of file diff --git a/content/20260516_dune.md b/content/20260516_dune.md new file mode 100644 index 0000000..c3c73ea --- /dev/null +++ b/content/20260516_dune.md @@ -0,0 +1,16 @@ +title: Overcome +date: 2026-05-16 21:00 +author: T. F. +tags: beach, walkman, music, melancholia, fuerteventura +slug: overcome +era: 1997/98 +location: 28.094147518771056, -14.278849105269098 +read_more: Zone out → + +I clambered up the dune, the hardened surface layer crumbling underfoot and slowly sloughing downhill in cascades of warm desert sand. At the top, I followed a narrow sandy path between patches of sharp black volcanic cinders and dried thorny scrub until I reached my favourite spot right at the edge of the pitch-black lava cliff that contrasted so sharply with the white sand below. + + + +From up there, I could see my parents and sister at the foot of the bluff, stretched out on their beach sheet, basking in the sun, absorbed in their reading. As always, the whole scene looked almost unreal: the bright blue sky, the turquoise Atlantic stretching endlessly to the horizon, and below, the endless white beach set in stark contrast against the black volcanic landscape. God, how I have always loved this place. + +I hit play on my Walkman and let the low-slung trip-hop beat of [Tricky’s "Overcome"](https://www.youtube.com/watch?v=J_r2HZqw06E) lumber into my consciousness, its ghostly string loop drenching me in seductive melancholia. Steeped in indefinable teenage emotions, I took in the whole moment, my mind gently drifting in that liminal space between all the childhood memories tied to this place, the beauty of the here and now, and the endless possibilities of what was still to come. It felt like a timeless moment, both eternal and already slipping away, as if some part of me understood that even something which had once seemed infinite could come to an end: the age of blissful childhood holidays with the family. \ No newline at end of file diff --git a/content/20260516_flotsam.md b/content/20260516_flotsam.md new file mode 100644 index 0000000..bf5123f --- /dev/null +++ b/content/20260516_flotsam.md @@ -0,0 +1,16 @@ +title: Flotsam +date: 2026-05-16 22:46 +author: T. F. +tags: beach, treasure, fuerteventura +slug: flotsam +era: 1990/91 +location: 28.213833449836425, -14.224199803299483 +read_more: Find more → + +I focused on scanning the boundary between the warm, anthracite-colored dry sand and the pitch-black wet sand, where seagrass, sticks, plant debris, bird feathers, frayed pieces of rope, and plastic objects of every shape and color formed a meandering line along the beach. I enjoyed finding all kinds of treasures: oddly shaped driftwood or curious objects of unknown origin, always hoping to find a message in a bottle or real pirate loot. The surf here on the west coast of the island was raging loudly and sometimes waves would lap around my feet. I remembered to watch out for the black lumps of washed-up tar that looked like smooth pebbles, because stepping on one barefoot was a nasty surprise. + + + +Mom, dad an my sister were still behind, running playfully along the black beach of this empty and forsaken coast that reminded me of pirate books or the shoreline from the Goonies movie. I looked up ahead where the bay gave way to a towering, jagged black cliff, with massive volcanic rock outcrops jutting from the sand and the sea, battered by the incoming waves. Next to one of the large rocks on the beach I spotted something strange. It was a large object, definitely bigger then me, and although as black as the surrounding lava rock it looked artificial. Excited I started running towards it. + +The closer I got the more details emerged. It seemed to be a large metallic sphere. What on earth could it be? I shouted over the noise of the waves, frantically gesturing for my parents to hurry and pointing toward the mysterious object. I was a bit scared but my curiosity was stronger. As I approached the thing I could see that it was broken. A gaping hole in one side revealed the orb's hollow interior. Strange protrusions covered its outer shell making it look like some giant sea urchin. I heard my dad shouting for me to be careful and not touch it. The shere was encrusted with barnacles, shells, and strands of seagrass and I thought it looked unbelievably cool. Then I realized I had seen something like it in one of my books about ships and submarines. It had to be one of those old naval contact mines from the war. Definitely the coolest beach treasure I had ever found but unfortunately not one I could take home. \ No newline at end of file diff --git a/content/20260516_fm_surfing.md b/content/20260516_fm_surfing.md new file mode 100644 index 0000000..bfe2d00 --- /dev/null +++ b/content/20260516_fm_surfing.md @@ -0,0 +1,26 @@ +title: Freq Surfing +date: 2026-05-16 16:00 +author: T. F. +tags: radio, mystery, sci-fi, music +slug: freq-surfing +era: 1989-96 +location: 49.3827205081448, 8.69198937287534 +read_more: Tune in → + +Early bedtime was not a problem for me. At least not on Sundays and Mondays. I was looking forward to indulging in my secret evening pastime: surfing the radio waves. The white plastic clock radio right next to my bed had a mono jack, so only the blue in-ear piece of my GameBoy headphones worked but it seemed like a practical feature because it allowed me to hear when parents would potentially come upstairs to bust me. + + + +On Sundays I usually enjoyed the last minutes of the SWF3 Top 20 music charts and as a consequence a lot of the pop hits from that time have been burnt into my core memory. Then at 9pm sharp the news came on, which I usually followed with curiosity despite not understanding much of the complex world of grown-ups. But it was through that little radio that I lived through the weeks leading up to the fall of the Berlin Wall and the slow collapse of the Eastern Bloc. Once the weather gave way to the traffic report, I knew it was time to turn the tuner dial. + +Each Sunday and Monday after the news, I tuned in to SWF1 for the part of the evening I looked forward to most: the radio drama. I recall countless evenings in my bed listening to suspenseful nail-biters, from detective stories, murder mysteries to science fiction tales. The sci-fi nights were my favorites! The intro music was already so terrifying I could barely listen to it. + +My vivid imagination turned those radio plays into thrillers far more vivid and intense than TV shows could ever depict (not that I would have been allowed to watch those anyway). Many of the plots and scenes stayed with me for weeks, sometimes years, and even today I still find myself researching the titles of stories I remember from my radio days. My favourite voice actor was, and still is, Christian Brückner, the German dubbing voice of Robert De Niro, Robert Redford, Dennis Hopper, and others, who lent his intimate, smoky, weathered baritone to many of my favourite detective characters. + +Through the sci-fi dramas I encountered authors I would cherish years later when I read their books, such as Stanislaw Lem or Isaac Asimov, and while I mostly enjoyed the otherworldly adventures, some of the darker stories absolutely terrified me. One especially troubling one revolved around a group of criminals sabotaging self-driving cars in a futuristic city to kidnap the passengers for harvesting their organs. I was barely able to sleep afterwards and the idea haunted me for years. + +The radio dramas were usually an hour long, and depending on my levels of tiredness and terror, I sometimes felt the need to lighten the mood before surrendering to sleep. My usual routine was tuning over to AFN to listen to the syndicated Dr. Demento Show, a whimsical comedy program that introduced me to artists like Frank Zappa or Weird Al Yankovic. + +On other nights I'd just sweep the whole FM band and get hooked on interesting music tracks or weird radio shows. When I felt very adventurous, I'd even switch over to AM and went exploring there. Stations in the late 1980s, early 1990s experimented a lot with the medium. I remember curious radio formats, like a live fantasy role-playing game with call-in adventurers and moderator dungeon masters, or late-night programs devoted to all kinds of arcane themes, explored through music and conversations with invited guests and callers. + +One thing I often came back to was dialing the tuner down to the lowest setting, around 87 MHz, where I'd find a strange, repetitive series of warbling and beeping tones. I found them mysterious and fascinating, and that would send my imagination racing with theories about what they might be. Decades later, I remembered those strange sounds and even tried to recreate the experience, but there was nothing to hear around that frequency anymore. Some research eventually revealed that the transmission was from some kind of early one-way pager system called Eurosignal that broadcast between 1974 and 1997. \ No newline at end of file diff --git a/content/20260517_voyage.md b/content/20260517_voyage.md new file mode 100644 index 0000000..d847a3e --- /dev/null +++ b/content/20260517_voyage.md @@ -0,0 +1,38 @@ +title: Voyage, voyage +date: 2026-05-17 12:00 +author: T. F. +tags: radio, music, journey, pandemic +slug: voyage +era: 2020 +location: 28.213833449836425, -14.224199803299483 +read_more: Keep driving → + +After dropping my wife and daughter off at Seville airport around dawn, kissing them goodbye and hoping they would be fine, I drove to a nearby petrol station, filled up our Ford Transit escape vehicle, and continued toward Huelva in the morning sun. My head was full of racing thoughts and worries. It had been a difficult morning. My wife had suffered a crisis of confidence. The plan had been for her and our daughter to fly ahead to Tenerife while I followed a few days later with the van on the ferry, sparing her the crossing because we knew how prone she was to seasickness. But the thought of being separated for almost a week, amid the chaos of constantly shifting travel restrictions, had suddenly become unbearable to her. We had talked through every alternative, but in the end decided to stick to the plan. It really did feel like some kind of escape. + + + +I could hardly believe we had made it this far. After what had felt like half an eternity of endless preparations, weeks spent renovating the van, getting rid of clutter, sorting and packing our belongings, preparing our apartment for a sublet, we had finally hit the road. All our anxieties about roadblocks and checkpoints in fully locked-down France, and about unpredictable regional travel restrictions in Spain, had turned out to be just that: mere rumours. + +It had taken us a day and a half to drive across Germany to the French border, which we passed without encountering any of the feared controls. After a stop in St. Girons in Occitania, where friends welcomed us with good food, wine, great conversation, and the luxury of a real bed, we continued west toward the Atlantic, the Pyrenees always to our left. Only the changed road signs told us we had entered Spain. Again: no borders, no police, nobody stopping us. After a dizzying drive through the tunnels and viaducts of the Spanish Basque Country, the landscape suddenly opened into the vast rolling plains of Castile y León beneath an overwhelming expanse of blue sky. It felt like freedom made landscape. That evening we camped on a small hill between Palencia and Valladolid under an orange-tinted sky, the wind carrying the scent of pine and thyme. The final stretch south into Andalusia had also gone smoothly, and we had reached Seville, where we spent the night parked in the middle of the city. + +I exited the A-49 onto the A-483, taking a detour along the Andalusian coastline. I don’t remember exactly where I was when the next song came on the radio, but it was *David Bowie*’s epic track [Heroes](https://www.youtube.com/watch?v=lXgkuM2NhYI). I had never really been a Bowie fan, but I sang along, feeling my body relax and my worries begin to fade. Then, somewhere in the second or third verse, when the reverb in Bowie’s vocals kicked in... + +...out of the blue, I burst into tears. Not just a little, I hadn’t cried like that in years. Tears streamed down my face as I all but yelled the lyrics while the blurry landscape rushed pas me: + +>We can beat them, forever and ever. Oh, we can be Heroes, just for one day. + +It was a profound moment - a true *hero’s journey* moment. I felt somehow physically relieved and, at the same time, utterly overcome by despair and an almost unbearable feeling of nostalgia and grief. + +As the song faded out, it gave way to the French 80s hit [Voyage, Voyage](https://www.youtube.com/watch?v=6PDmZnG8KsM) by *Desireless*. The last time I had heard it was as a child, when it [had been a hit on the radio](/freq-surfing.html) decades earlier. It held no particular meaning for me, and yet the nostalgia and the strange synchronicity of that very moment was so overwhelming that my tears kept flowing. + +>Au dessus des vieux volcans, Glissent des ailes sous les tapis du vent, Voyage, voyage. Éternellement. + +>De nuages en marécages, De vent d'Espagne en pluie d'équateur. Voyage, voyage. + +>Vole dans les hauteurs, Au dessus des capitales, Des idées fatales, Regardent l'océan. + +I almost had to pull the car over. Tears blurred the road ahead until I could barely see. My whole body shook, and I sobbed like a child. At the time, I couldn’t understand what was happening to me. + +Only in retrospect do I see it clearly: some deeper part of me had already recognized what lay ahead. This was our turning point, the point of no return, the moment every hero's journey ultimately arrives at. An era was ending. A world was ending. After this, nothing would ever be the same. + +What had begun as a temporary escape plan: to spend the winter months on Tenerife until the chaos of the Covid-19 pandemic subsided, eventually became a two-year residency as expats. And true to what some part of me had sensed on that drive, nothing was ever the same again. We never returned to our old life in Berlin. Instead, our journey carried us onward to Israel, where we would live for several more years. \ No newline at end of file diff --git a/content/pages/about.md b/content/pages/about.md new file mode 100644 index 0000000..9806cf5 --- /dev/null +++ b/content/pages/about.md @@ -0,0 +1,9 @@ +title: About +slug: about + +My first attempt at writing some kind of memoir was during my daily train commute to university in the early new millennium. I was 21 and felt ridiculous, having my whole life still ahead of me and all. Now I regret I didn't write down more. + +Today my memories of the past are hazy and scattered and this blog is an attempt to piece together these random fragments that feel like from different timelines in faraway places I revisit during walks on the beach or early morning drives. + +[Zonetoast](glossary.html) is an ongoing [chronotopological](glossary.html) endeavor of a xennial slacker, a cartography of half-remembered places, former selves, and the strange elasticity of lived time. + diff --git a/content/pages/glossary.md b/content/pages/glossary.md new file mode 100644 index 0000000..8dbf927 --- /dev/null +++ b/content/pages/glossary.md @@ -0,0 +1,12 @@ +title: Glossary +slug: glossary + +**Chronotope** */ˈkrɒn.əˌtoʊp/ (noun)*: a concept, especially in literary theory, referring to the intrinsic interconnectedness of time and space within a narrative—how temporal and spatial relationships shape the structure, meaning, and unfolding of events; from Greek chronos (“time”) + topos (“place”). + +**Chronotopology** */ˌkrɒnətoʊˈpɒlədʒi/ (noun)*: the study of chronotopes and the ways time-space relations are structured, perceived, and mentally inhabited, examining how temporal and spatial dimensions jointly shape experience, cognition, and meaning within narratives, conceptual frameworks, or lived consciousness. + +**Toast** */toʊst/ (noun)*: a state of subjective psychic depletion, overexposure, or being gently but decisively done for; in chronotopological usage, the condition of having lingered too long in memory, mood, or altered perception, ranging from pleasantly warmed to completely finished. + +**Zone** */zoʊn/ (noun)*: a bounded or semi-bounded field of perception, memory, or habitation; in chronotopological usage, a mentally inhabited region where place, mood, and subjective time gather into a distinct experiential atmosphere. + +**Zonetoast** */ˈzoʊnˌtoʊst/* *(noun)*: chronotopological term for a liminal psychic atmosphere where memory, place, and affect converge into a spatiotemporal mental zone, gently warmed and altered by nostalgia, sometimes scorched beyond recognition. \ No newline at end of file diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..59ad52a --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- # +from __future__ import unicode_literals + +AUTHOR = u'T.F.' +SITENAME = u'ZONETOAST' +SITE_SUBTITLE = u'A Chronotopology of Unfinished Timelines' +# SITEURL = '//sublunar.space' + +THEME = 'blue-penguin-dark' +PATH = 'content' + +DEFAULT_DATE = 'fs' + +SUMMARY_MAX_LENGTH = 100 + +DEFAULT_DATE_FORMAT = '%d %b %Y' + +TIMEZONE = 'Europe/Berlin' + +DEFAULT_LANG = u'en' + +STATIC_PATHS = ['assets'] + +# Feed generation is usually not desired when developing +FEED_ALL_ATOM = 'feeds/all.atom.xml' +FEED_ALL_RSS = 'feeds/all.rss.xml' +CATEGORY_FEED_ATOM = None +TRANSLATION_FEED_ATOM = None +AUTHOR_FEED_ATOM = None +AUTHOR_FEED_RSS = None + +# HTML metadata +SITEDESCRIPTION = SITE_SUBTITLE + +# all defaults to True. +DISPLAY_HEADER = True +DISPLAY_FOOTER = True +DISPLAY_HOME = True +DISPLAY_MENU = True +DISPLAY_PAGES_ON_MENU = True +DARK_LIGHT_SWITCHING_OFF = False + +# provided as examples, they make ‘clean’ urls. used by MENU_INTERNAL_PAGES. +TAGS_URL = 'tags' +TAGS_SAVE_AS = 'tags/index.html' +AUTHORS_URL = 'authors' +AUTHORS_SAVE_AS = 'authors/index.html' +CATEGORIES_URL = 'categories' +CATEGORIES_SAVE_AS = 'categories/index.html' +ARCHIVES_URL = 'archives' +ARCHIVES_SAVE_AS = 'archives/index.html' + +# use those if you want pelican standard pages to appear in your menu +MENU_INTERNAL_PAGES = ( + # ('Tags', TAGS_URL, TAGS_SAVE_AS), + # ('Authors', AUTHORS_URL, AUTHORS_SAVE_AS), + # ('Categories', CATEGORIES_URL, CATEGORIES_SAVE_AS), + # ('Archives', ARCHIVES_URL, ARCHIVES_SAVE_AS), +) +# additional menu items +MENUITEMS = ( + # ('GitHub', 'https://github.com/'), + # ('Linux Kernel', 'https://www.kernel.org/'), +) + +# example pagination pattern +PAGINATION_PATTERNS = ( + (1, '{url}', '{save_as}'), + (2, '{base_name}/page/{number}/', '{base_name}/page/{number}/index.html'), +)