about summary refs log tree commit diff stats
path: root/themes
diff options
context:
space:
mode:
authorAlan Pearce2023-05-18 20:57:35 +0200
committerAlan Pearce2023-05-18 20:57:35 +0200
commitc8ec9d9ca2557a00559b4823d9b5bfd2faeb5775 (patch)
treef46299e4eb99f097caa6a93a9c904778cfae51a7 /themes
parentb0511b71c29c88acb99df245547a52bcce6b10bd (diff)
parentfe37fcf3daa0eaafc1236050ac95b5d4ba21bcd2 (diff)
downloadwebsite-c8ec9d9ca2557a00559b4823d9b5bfd2faeb5775.tar.lz
website-c8ec9d9ca2557a00559b4823d9b5bfd2faeb5775.tar.zst
website-c8ec9d9ca2557a00559b4823d9b5bfd2faeb5775.zip
Add 'themes/bear/' from commit 'fe37fcf3daa0eaafc1236050ac95b5d4ba21bcd2'
git-subtree-dir: themes/bear
git-subtree-mainline: b0511b71c29c88acb99df245547a52bcce6b10bd
git-subtree-split: fe37fcf3daa0eaafc1236050ac95b5d4ba21bcd2
Diffstat (limited to 'themes')
-rw-r--r--themes/bear/.envrc1
-rw-r--r--themes/bear/.gitignore1
-rw-r--r--themes/bear/LICENSE21
-rw-r--r--themes/bear/README.md80
-rw-r--r--themes/bear/config.toml34
-rw-r--r--themes/bear/content/_index.md23
-rw-r--r--themes/bear/content/bear.md15
-rw-r--r--themes/bear/content/blog/_index.md3
-rw-r--r--themes/bear/content/blog/markdown-syntax.md130
-rw-r--r--themes/bear/content/zola.md36
-rw-r--r--themes/bear/flake.lock61
-rw-r--r--themes/bear/flake.nix20
-rw-r--r--themes/bear/screenshot-dark.pngbin0 -> 319272 bytes
-rw-r--r--themes/bear/screenshot.pngbin0 -> 317002 bytes
-rw-r--r--themes/bear/templates/404.html8
-rw-r--r--themes/bear/templates/base.html24
-rw-r--r--themes/bear/templates/favicon.html3
-rw-r--r--themes/bear/templates/footer.html5
-rw-r--r--themes/bear/templates/header.html8
-rw-r--r--themes/bear/templates/index.html7
-rw-r--r--themes/bear/templates/nav.html10
-rw-r--r--themes/bear/templates/page.html31
-rw-r--r--themes/bear/templates/section.html38
-rw-r--r--themes/bear/templates/seo_tags.html1
-rw-r--r--themes/bear/templates/style.html172
-rw-r--r--themes/bear/templates/taxonomy_list.html14
-rw-r--r--themes/bear/templates/taxonomy_single.html30
-rw-r--r--themes/bear/theme.toml24
28 files changed, 800 insertions, 0 deletions
diff --git a/themes/bear/.envrc b/themes/bear/.envrc
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/themes/bear/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/themes/bear/.gitignore b/themes/bear/.gitignore
new file mode 100644
index 0000000..87174b6
--- /dev/null
+++ b/themes/bear/.gitignore
@@ -0,0 +1 @@
+/public/
diff --git a/themes/bear/LICENSE b/themes/bear/LICENSE
new file mode 100644
index 0000000..ddc924b
--- /dev/null
+++ b/themes/bear/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2023 Alan Pearce
+Copyright (c) 2020 Jan Raasch
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+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 OR
+COPYRIGHT HOLDERS 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.
diff --git a/themes/bear/README.md b/themes/bear/README.md
new file mode 100644
index 0000000..5396a5b
--- /dev/null
+++ b/themes/bear/README.md
@@ -0,0 +1,80 @@
+# Zola ʕ•ᴥ•ʔ Bear Blog
+
+🧸 A [Zola](https://www.getzola.org/)-theme based on [Bear Blog](https://bearblog.dev).
+
+> Free, no-nonsense, super-fast blogging.
+
+## Demo
+
+For a current & working demo of this theme, please check out https://alanpearce.codeberg.page/zola-bearblog/ 🎯.
+
+## Screenshots
+
+⬜️ [Light][light-screenshot]
+![light mode screenshot][light-screenshot]
+
+⬛️ [Dark][dark-screenshot]
+![dark mode screenshot][dark-screenshot]
+
+When the user's browser is running »dark mode«, the dark color scheme will be used automatically. The default is the light/white color scheme. Check out the [`style.html`](https://codeberg.org/alanpearce/zola-bearblog/src/branch/main/templates/style.html)-file for the implementation.
+
+## Installation
+
+If you already have a Zola site on your machine, you can simply add this theme via
+
+```
+git submodule add https://codeberg.org/alanpearce/zola-bearblog themes/zola-bearblog
+```
+
+Then, adjust the `config.toml` as detailed below.
+
+For more information, read the official [setup guide][zola-setup-guide] of Zola.
+
+## Adjust configuration / config.toml
+
+Please check out the included [config.toml](https://codeberg.org/alanpearce/zola-bearblog/src/branch/main/config.toml)
+
+## Content & structure
+
+### Menu
+
+Create an array in `extra` with a key of `main_menu`. `url` is passed to [`get_url`](https://www.getzola.org/documentation/templates/overview/#get-url)
+
+```toml
+[[extra.main_menu]]
+name = "Bear"
+url = "@/bear.md"
+
+[[extra.main_menu]]
+name = "Zola"
+url = "@/zola.md"
+
+[[extra.main_menu]]
+name = "Blog"
+url = "@/blog/_index.md"
+```
+
+### Adding / editing content
+
+#### Index-Page
+
+The contents of the `index`-page may be changed by editing your `content/_index.md`-file.
+
+
+### Adding your branding / colors / css
+
+Add a `custom_head.html`-file to your `templates/`-directory. In there you may add a `<style>`-tag, *or* you may add a `<link>`-tag referencing your own `custom.css` (in case you prefer to have a separate `.css`-file). Check out the [`style.html`](https://codeberg.org/alanpearce/zola-bearblog/src/branch/main/templates/style.html)-file to find out which CSS-styles are applied by default.
+
+## Issues / Feedback / Contributing
+Please use [Codeberg issues](https://codeberg.org/alanpearce/zola-bearblog/issues) and [Pull Requests](https://codeberg.org/alanpearce/zola-bearblog/pulls).
+
+## Special Thanks 🎁
+
+A special thank you goes out to [Herman](https://herman.bearblog.dev), for creating the original [ʕ•ᴥ•ʔ Bear Blog](https://bearblog.dev/) and [Jan Raasch](https://www.janraasch.com) for creating the hugo port of the Bear Blog theme.
+
+## License
+[MIT License](http://en.wikipedia.org/wiki/MIT_License) © [Alan Pearce](https://www.alanpearce.eu/)
+
+[zola-setup-guide]: https://www.getzola.org/documentation/getting-started/installation/
+[light-screenshot]: https://codeberg.org/alanpearce/zola-bearblog/raw/branch/main/screenshot.png
+[dark-screenshot]: https://codeberg.org/alanpearce/zola-bearblog/raw/branch/main/screenshot-dark.png
diff --git a/themes/bear/config.toml b/themes/bear/config.toml
new file mode 100644
index 0000000..ca8d27a
--- /dev/null
+++ b/themes/bear/config.toml
@@ -0,0 +1,34 @@
+title = "Zola ʕ•ᴥ•ʔ Bear Blog"
+base_url = "https://alanpearce.codeberg.page/zola-bearblog"
+description = ""
+
+# Whether to automatically compile all Sass files in the sass directory
+compile_sass = false
+
+# Whether to build a search index to be used later on by a JavaScript library
+build_search_index = false
+
+taxonomies = [
+  {name = "categories", feed = true},
+  {name = "tags", feed = true},
+]
+
+[markdown]
+# Whether to do syntax highlighting
+# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
+highlight_code = true
+
+[extra]
+date_format="%d %b, %Y"
+
+[[extra.main_menu]]
+name = "Bear"
+url = "@/bear.md"
+
+[[extra.main_menu]]
+name = "Zola"
+url = "@/zola.md"
+
+[[extra.main_menu]]
+name = "Blog"
+url = "@/blog/_index.md"
diff --git a/themes/bear/content/_index.md b/themes/bear/content/_index.md
new file mode 100644
index 0000000..24b3925
--- /dev/null
+++ b/themes/bear/content/_index.md
@@ -0,0 +1,23 @@
++++
++++
+# A match made in heaven
+
+There is a website obesity crisis. Bloated websites full of scripts, ads, and trackers are slowing your readers down every time they try to read your well-crafted content.
+
+Zola Bear Blog is all you need to build a fantastic and optimized site or blog. It works perfectly on **any** viewing device. All you need to focus on is writing good content.
+
+[Go to the original bear blog](https://bearblog.dev/).
+
+---
+
+What happens when you combine the worlds' fastest, most lightweight static site generator with a design theme built to provide you with free, no-nonsense, super-fast blogging capabilities?
+
+**Use this theme, and find out!**
+
+Made with 💚 by [Alan Pearce](https://alanpearce.eu).
+
+---
+
+Simply publish content online, grow an audience, and keep your pages tiny, fast, and **optimized for search engines**.
+
+Each page is ~5kb, and you can **host your blog yourself**.
diff --git a/themes/bear/content/bear.md b/themes/bear/content/bear.md
new file mode 100644
index 0000000..dd7da4b
--- /dev/null
+++ b/themes/bear/content/bear.md
@@ -0,0 +1,15 @@
++++
+title = "Bear"
++++
+
+Website: [https://bearblog.dev](https://bearblog.dev)
+
+There is a website obesity crisis. Bloated websites are full of scripts, ads, and trackers slowing your readers down every time they try to read your well-crafted content.
+
+Bear is all you need to build a fantastic and optimized site or blog. It works perfectly on **any** viewing device. All you need to focus on is writing good content.
+
+Bear makes it simple to publish content online and grow an audience while keeping pages tiny, fast, and **optimized for search engines.**
+
+Each page is ~5kb.
+
+Learn more and contribute on [GitHub](https://github.com/HermanMartinus/bearblog).
diff --git a/themes/bear/content/blog/_index.md b/themes/bear/content/blog/_index.md
new file mode 100644
index 0000000..34651ab
--- /dev/null
+++ b/themes/bear/content/blog/_index.md
@@ -0,0 +1,3 @@
++++
+title = "Blog"
++++
diff --git a/themes/bear/content/blog/markdown-syntax.md b/themes/bear/content/blog/markdown-syntax.md
new file mode 100644
index 0000000..18f912a
--- /dev/null
+++ b/themes/bear/content/blog/markdown-syntax.md
@@ -0,0 +1,130 @@
++++
+title = "Markdown Syntax Guide"
+date = "2020-01-03"
+description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
+taxonomies.tags = [
+    "markdown",
+    "syntax",
+]
++++
+
+For a quick cheatsheet, check out [https://simplemde.com/markdown-guide](https://simplemde.com/markdown-guide).
+
+---
+
+This article offers a sample of basic Markdown syntax that can be used in Zola content files, also it shows whether basic HTML elements are decorated with CSS in a Zola theme.
+<!--more-->
+
+## Headings
+
+The following HTML `<h1>`—`<h6>` elements represent six levels of section headings. `<h1>` is the highest section level while `<h6>` is the lowest.
+
+# H1
+## H2
+### H3
+#### H4
+##### H5
+###### H6
+
+## Paragraph
+
+Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
+
+Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
+
+## Blockquotes
+
+The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
+
+#### Blockquote without attribution
+
+> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
+> **Note** that you can use *Markdown syntax* within a blockquote.
+
+#### Blockquote with attribution
+
+> Don't communicate by sharing memory, share memory by communicating.<br>
+> — <cite>Rob Pike[^1]</cite>
+
+[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
+
+## Tables
+
+Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
+
+   Name | Age
+--------|------
+    Bob | 27
+  Alice | 23
+
+#### Inline Markdown within tables
+
+| Italics   | Bold     | Code   |
+| --------  | -------- | ------ |
+| *italics* | **bold** | `code` |
+
+## Code Blocks
+
+#### Code block with backticks
+
+```html
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+```
+
+#### Code block indented with four spaces
+
+    <!doctype html>
+    <html lang="en">
+    <head>
+      <meta charset="utf-8">
+      <title>Example HTML5 Document</title>
+    </head>
+    <body>
+      <p>Test</p>
+    </body>
+    </html>
+
+## List Types
+
+#### Ordered List
+
+1. First item
+2. Second item
+3. Third item
+
+#### Unordered List
+
+* List item
+* Another item
+* And another item
+
+#### Nested list
+
+* Fruit
+  * Apple
+  * Orange
+  * Banana
+* Dairy
+  * Milk
+  * Cheese
+
+## Other Elements — abbr, sub, sup, kbd, mark
+
+<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
+
+H<sub>2</sub>O
+
+X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
+
+Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the session.
+
+Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
diff --git a/themes/bear/content/zola.md b/themes/bear/content/zola.md
new file mode 100644
index 0000000..5458750
--- /dev/null
+++ b/themes/bear/content/zola.md
@@ -0,0 +1,36 @@
++++
+title = "Zola"
++++
+## No dependencies
+
+Zola comes as a single executable with Sass compilation, syntax
+highlighting, table of contents and many other features that
+traditionally require setting up a dev environment or adding some
+JavaScript libraries to your site.
+
+## Blazing fast
+
+The average site will be generated in less than a second, including
+Sass compilation and syntax highlighting.
+
+## Scalable
+
+Zola renders your whole site as static files, making it trivial to
+handle any kind of traffic you will throw at it at no cost without
+having to worry about managing a server or a database.
+
+## Easy to use
+
+From the CLI to the template engine, everything is designed to be
+intuitive. Don't take my word for it though, look at the documentation
+and see for yourself.
+
+## Flexible
+
+Zola gets out of your way so you can focus on your content, be it a
+blog, a knowledge base, a landing page or a combination of them.
+
+## Augmented Markdown
+
+Zola comes with shortcodes and internal links to make it easier to
+write your content.
diff --git a/themes/bear/flake.lock b/themes/bear/flake.lock
new file mode 100644
index 0000000..afbf271
--- /dev/null
+++ b/themes/bear/flake.lock
@@ -0,0 +1,61 @@
+{
+  "nodes": {
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1681202837,
+        "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "cfacdce06f30d2b68473a46042957675eebb3401",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1681693905,
+        "narHash": "sha256-XdXMvCt+i2ZcmAIPZvu3RUwcdaC9OX7d1WMAJJokzeA=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "db34d7561caa508ece0265a56f382c5d3b7a6c1b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs"
+      }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/themes/bear/flake.nix b/themes/bear/flake.nix
new file mode 100644
index 0000000..c257b2a
--- /dev/null
+++ b/themes/bear/flake.nix
@@ -0,0 +1,20 @@
+{
+  description = "A bear blog theme for Zola";
+  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+  inputs.flake-utils.url = "github:numtide/flake-utils";
+
+  outputs = { self, nixpkgs, flake-utils }:
+    flake-utils.lib.eachDefaultSystem (system:
+      let
+        pkgs = nixpkgs.legacyPackages.${system};
+      in
+      {
+        devShells.default = pkgs.mkShell {
+          packages = with pkgs; [
+            git
+            gnugrep
+            zola
+          ];
+        };
+      });
+}
diff --git a/themes/bear/screenshot-dark.png b/themes/bear/screenshot-dark.png
new file mode 100644
index 0000000..266f883
--- /dev/null
+++ b/themes/bear/screenshot-dark.png
Binary files differdiff --git a/themes/bear/screenshot.png b/themes/bear/screenshot.png
new file mode 100644
index 0000000..4013a5c
--- /dev/null
+++ b/themes/bear/screenshot.png
Binary files differdiff --git a/themes/bear/templates/404.html b/themes/bear/templates/404.html
new file mode 100644
index 0000000..15fd75c
--- /dev/null
+++ b/themes/bear/templates/404.html
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+
+{% block title %}404{% endblock %}
+
+{% block main %}
+  <h1>404</h1>
+  <h2>ʕノ•ᴥ•ʔノ ︵ ┻━┻</h2>
+{% endblock %}
diff --git a/themes/bear/templates/base.html b/themes/bear/templates/base.html
new file mode 100644
index 0000000..4ba8442
--- /dev/null
+++ b/themes/bear/templates/base.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="{{ lang | default(value="en-US" ) }}">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  {% include "favicon.html" ignore missing -%}
+  <title>{%- block title %}{{ config.title }}{%- endblock %}</title>
+  {% include "seo_tags.html" ignore missing %}
+  <meta name="referrer" content="no-referrer-when-downgrade">
+  {%- if config.generate_feed %}
+  {% block rss -%}
+  <link rel="alternate" type={% if config.feed_filename == "atom.xml" %}"application/atom+xml"{% else %}"application/rss+xml"{% endif %} title="{{ config.title }}" href="{{ get_url(path=config.feed_filename) | safe }}">
+  {%- endblock -%}
+  {%- endif %}
+  {% include "style.html" ignore missing -%}
+  {% include "custom_head.html" ignore missing -%}
+</head>
+<body>
+  {% include "header.html" ignore missing -%}
+  {% block main %}{%- endblock -%}
+  {% include "footer.html" ignore missing -%}
+  {% include "custom_body.html" ignore missing -%}
+</body>
+</html>
diff --git a/themes/bear/templates/favicon.html b/themes/bear/templates/favicon.html
new file mode 100644
index 0000000..28b504d
--- /dev/null
+++ b/themes/bear/templates/favicon.html
@@ -0,0 +1,3 @@
+{% if config.extra.favicon %}
+  <link rel="shortcut icon" href="{{ config.extra.favicon }}">
+{%- endif -%}
diff --git a/themes/bear/templates/footer.html b/themes/bear/templates/footer.html
new file mode 100644
index 0000000..c952a93
--- /dev/null
+++ b/themes/bear/templates/footer.html
@@ -0,0 +1,5 @@
+<footer>
+  {%- if not config.extra.hide_made_with_line %}
+    Made with <a href="https://codeberg.org/alanpearce/zola-bearblog">Zola ʕ•ᴥ•ʔ Bear</a>
+  {%- endif %}
+</footer>
diff --git a/themes/bear/templates/header.html b/themes/bear/templates/header.html
new file mode 100644
index 0000000..c1d3c3e
--- /dev/null
+++ b/themes/bear/templates/header.html
@@ -0,0 +1,8 @@
+<header>
+  <a href="{{ config.base_url }}" class="title">
+    <h2>{{ config.title }}</h2>
+  </a>
+  <nav>
+    {% include "nav.html" %}
+  </nav>
+</header>
diff --git a/themes/bear/templates/index.html b/themes/bear/templates/index.html
new file mode 100644
index 0000000..6caf1d5
--- /dev/null
+++ b/themes/bear/templates/index.html
@@ -0,0 +1,7 @@
+{% extends "base.html" %}
+
+{% block main %}
+  <main>
+    {{ section.content | safe }}
+  </main>
+{% endblock %}
diff --git a/themes/bear/templates/nav.html b/themes/bear/templates/nav.html
new file mode 100644
index 0000000..e006ab1
--- /dev/null
+++ b/themes/bear/templates/nav.html
@@ -0,0 +1,10 @@
+<a href="{{ config.base_url }}">Home</a>
+{%- if config.extra.main_menu %}
+  {%- for item in config.extra.main_menu %}
+    {%- if item.url is matching("https?://") %}
+      <a href="{{ item.url }}">{{ item.name }}</a>
+    {%- else %}
+      <a href="{{ get_url(path=item.url )}}">{{ item.name }}</a>
+    {%- endif %}
+  {%- endfor %}
+{%- endif -%}
diff --git a/themes/bear/templates/page.html b/themes/bear/templates/page.html
new file mode 100644
index 0000000..89de955
--- /dev/null
+++ b/themes/bear/templates/page.html
@@ -0,0 +1,31 @@
+{% extends "base.html" %}
+
+{% block title %}{{ page.title }} | {{ super() }}{% endblock %}
+
+{% block main %}
+  {%- if not page.extra.menu %}
+    <h1>{{ page.title }}</h1>
+    {%- if page.date %}
+      <p>
+        <i>
+          <time datetime='{{ page.date | date(format='%+') }}' pubdate>
+            {{- page.date | date(format=config.extra.date_format) -}}
+          </time>
+        </i>
+      </p>
+    {%- endif %}
+  {%- endif %}
+  <main>
+    {{ page.content | safe }}
+  </main>
+  <p>
+    {%- if page.taxonomies %}
+      {%- for name, taxon in page.taxonomies %}
+        {{ name | capitalize }}:
+        {%- for item in taxon %}
+          <a href="{{ get_taxonomy_url(kind=name, name=item) }}">#{{ item }}</a>
+        {%- endfor %}
+      {%- endfor %}
+    {%- endif %}
+  </p>
+{% endblock %}
diff --git a/themes/bear/templates/section.html b/themes/bear/templates/section.html
new file mode 100644
index 0000000..e596ffb
--- /dev/null
+++ b/themes/bear/templates/section.html
@@ -0,0 +1,38 @@
+{% extends "base.html" %}
+
+{% block main %}
+  <main>
+    {%- if taxonomy.term %}
+      <h3 style="margin-bottom:0">Filtering for "{{ section.title }}"</h3>
+      <small>
+        <a href="{{ get_url(path="@/blog/_index.md") }}">Remove filter</a>
+      </small>
+    {%- endif %}
+    <ul class="blog-posts">
+      {% for page in section.pages %}
+        <li>
+          <span>
+            <i>
+              <time datetime='{{ page.date | date(format='%+') }}' pubdate>
+                {{ page.date | date(format=config.extra.date_format) }}
+              </time>
+            </i>
+          </span>
+          <a href="{{ page.permalink }}">{{ page.title }}</a>
+        </li>
+        {% else %}
+        <li>
+          No posts yet
+        </li>
+      {% endfor %}
+    </ul>
+    <small>
+      <div>
+        {% set tags = get_taxonomy(kind="tags") %}
+        {% for post in tags.items %}
+          <a href="{{ post.permalink }}">#{{ post.name }}</a>&nbsp;
+        {% endfor %}
+      </div>
+    </small>
+  </main>
+{% endblock %}
diff --git a/themes/bear/templates/seo_tags.html b/themes/bear/templates/seo_tags.html
new file mode 100644
index 0000000..797569a
--- /dev/null
+++ b/themes/bear/templates/seo_tags.html
@@ -0,0 +1 @@
+<meta name="title" content="{% if page.title %}{{ page.title }}{% else %}{{ config.title }}{% endif %}">
diff --git a/themes/bear/templates/style.html b/themes/bear/templates/style.html
new file mode 100644
index 0000000..4744695
--- /dev/null
+++ b/themes/bear/templates/style.html
@@ -0,0 +1,172 @@
+<style>
+  body {
+    font-family: Verdana, sans-serif;
+    margin: auto;
+    padding: 20px;
+    max-width: 720px;
+    text-align: left;
+    background-color: #fff;
+    word-wrap: break-word;
+    overflow-wrap: break-word;
+    line-height: 1.5;
+    color: #444;
+  }
+
+  h1,
+  h2,
+  h3,
+  h4,
+  h5,
+  h6,
+  strong,
+  b {
+    color: #222;
+  }
+
+  a {
+    color: #3273dc;
+  }
+
+  .title {
+    text-decoration: none;
+    border: 0;
+  }
+
+  .title span {
+    font-weight: 400;
+  }
+
+  nav a {
+    margin-right: 10px;
+  }
+
+  textarea {
+    width: 100%;
+    font-size: 1rem;
+  }
+
+  input {
+    font-size: 1rem;
+  }
+
+  main,article {
+    line-height: 1.6;
+  }
+
+  table {
+    width: 100%;
+  }
+
+  img {
+    max-width: 100%;
+  }
+
+  code {
+    padding: 2px 5px;
+    background-color: #f2f2f2;
+  }
+
+  pre code {
+    color: #222;
+    display: block;
+    padding: 20px;
+    white-space: pre-wrap;
+    font-size: 0.875rem;
+    overflow-x: auto;
+  }
+
+  div.highlight pre {
+    background-color: initial;
+    color: initial;
+  }
+
+  div.highlight code {
+    background-color: unset;
+    color: unset;
+  }
+
+  blockquote {
+    border-left: 1px solid #999;
+    color: #222;
+    padding-left: 20px;
+    font-style: italic;
+  }
+
+  footer {
+    padding: 25px;
+    text-align: center;
+  }
+
+  .helptext {
+    color: #777;
+    font-size: small;
+  }
+
+  .errorlist {
+    color: #eba613;
+    font-size: small;
+  }
+
+  /* blog posts */
+  ul.blog-posts {
+    list-style-type: none;
+    padding: unset;
+  }
+
+  ul.blog-posts li {
+    display: flex;
+  }
+
+  ul.blog-posts li span {
+    flex: 0 0 130px;
+  }
+
+  ul.blog-posts li a:visited {
+    color: #8b6fcb;
+  }
+
+  @media (prefers-color-scheme: dark) {
+    body {
+      background-color: #333;
+      color: #ddd;
+    }
+
+    h1,
+    h2,
+    h3,
+    h4,
+    h5,
+    h6,
+    strong,
+    b {
+      color: #eee;
+    }
+
+    a {
+      color: #8cc2dd;
+    }
+
+    code {
+      background-color: #777;
+    }
+
+    pre code {
+      color: #ddd;
+    }
+
+    blockquote {
+      color: #ccc;
+    }
+
+    textarea,
+    input {
+      background-color: #252525;
+      color: #ddd;
+    }
+
+    .helptext {
+      color: #aaa;
+    }
+  }
+
+</style>
diff --git a/themes/bear/templates/taxonomy_list.html b/themes/bear/templates/taxonomy_list.html
new file mode 100644
index 0000000..69d9fa2
--- /dev/null
+++ b/themes/bear/templates/taxonomy_list.html
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+
+{% block main %}
+  <main>
+    <small>
+      <div>
+        {% set tags = get_taxonomy(kind="tags") %}
+        {% for post in tags.items %}
+          <a href="{{ post.permalink }}">#{{ post.name }}</a>&nbsp;
+        {% endfor %}
+      </div>
+    </small>
+  </main>
+{% endblock %}
diff --git a/themes/bear/templates/taxonomy_single.html b/themes/bear/templates/taxonomy_single.html
new file mode 100644
index 0000000..d5712b0
--- /dev/null
+++ b/themes/bear/templates/taxonomy_single.html
@@ -0,0 +1,30 @@
+{% extends "base.html" %}
+
+{% block main %}
+  <main>
+    {%- if taxonomy.term %}
+      <h3 style="margin-bottom:0">Filtering for "{{ term.name }}"</h3>
+      <small>
+        <a href="{{ get_url(path="@/blog/_index.md") }}">Remove filter</a>
+      </small>
+    {%- endif %}
+    <ul class="blog-posts">
+      {% for page in term.pages %}
+        <li>
+          <span>
+            <i>
+              <time datetime='{{ page.date | date(format='%+') }}' pubdate>
+                {{ page.date | date(format=config.extra.date_format) }}
+              </time>
+            </i>
+          </span>
+          <a href="{{ page.permalink }}">{{ page.title }}</a>
+        </li>
+      {% else %}
+        <li>
+          No posts yet
+        </li>
+      {% endfor %}
+    </ul>
+  </main>
+{% endblock %}
diff --git a/themes/bear/theme.toml b/themes/bear/theme.toml
new file mode 100644
index 0000000..ed137c8
--- /dev/null
+++ b/themes/bear/theme.toml
@@ -0,0 +1,24 @@
+name = "Bear"
+description = "Bear blog theme"
+license = "MIT"
+homepage = "https://codeberg.org/alanpearce/zola/bearblog"
+# The minimum version of Zola required
+min_version = "0.4.0"
+# An optional live demo URL
+demo = "https://alanpearce.codeberg.page/zola-bearblog"
+
+# Any variable there can be overridden in the end user `config.toml`
+# You don't need to prefix variables by the theme name but as this will
+# be merged with user data, some kind of prefix or nesting is preferable
+# Use snake_casing to be consistent with the rest of Zola
+[extra]
+date_format="%d %b, %Y"
+
+[author]
+name = "Alan Pearce"
+homepage = "https://alanpearce.eu"
+
+[original]
+author = "janraasch"
+repo = "https://github.com/janraasch/hugo-bearblog/"
+homepage = "https://www.janraasch.com"