From c6fce194688cf5fc73e0117d756aaaa4a4c275e4 Mon Sep 17 00:00:00 2001 From: drsatanic Date: Sat, 25 Oct 2025 10:41:47 +0630 Subject: [PATCH] first commit --- .forgejo/workflows/zola.yaml | 0 .gitignore | 1 + LICENSE | 21 ++++ README.md | 3 + config.toml | 31 ++++++ content/_index.md | 4 + content/about.md | 7 ++ content/blog/_index.md | 5 + content/blog/hello-world.md | 7 ++ content/blog/markdown.md | 66 +++++++++++++ sass/_theme.scss | 173 +++++++++++++++++++++++++++++++++ sass/style.scss | 146 ++++++++++++++++++++++++++++ screenshot.png | Bin 0 -> 41760 bytes static/dark_mode.svg | 1 + static/light_mode.svg | 1 + templates/404.html | 10 ++ templates/index.html | 109 +++++++++++++++++++++ templates/page.html | 39 ++++++++ templates/section.html | 21 ++++ templates/taxonomy_list.html | 20 ++++ templates/taxonomy_single.html | 18 ++++ 21 files changed, 683 insertions(+) create mode 100644 .forgejo/workflows/zola.yaml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 config.toml create mode 100644 content/_index.md create mode 100644 content/about.md create mode 100644 content/blog/_index.md create mode 100644 content/blog/hello-world.md create mode 100644 content/blog/markdown.md create mode 100644 sass/_theme.scss create mode 100644 sass/style.scss create mode 100644 screenshot.png create mode 100644 static/dark_mode.svg create mode 100644 static/light_mode.svg create mode 100644 templates/404.html create mode 100644 templates/index.html create mode 100644 templates/page.html create mode 100644 templates/section.html create mode 100644 templates/taxonomy_list.html create mode 100644 templates/taxonomy_single.html diff --git a/.forgejo/workflows/zola.yaml b/.forgejo/workflows/zola.yaml new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c75eecc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/public diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9a1261b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 The Satanic + +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/README.md b/README.md new file mode 100644 index 0000000..42df71e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# README + + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..df6d919 --- /dev/null +++ b/config.toml @@ -0,0 +1,31 @@ +# The URL the site will be built for +base_url = "https://thesatanic.grebedoc.dev/" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +title = "Awesome Gitnet Page" +description = "Gitnet Pages Project" +author = "The Satanic" +taxonomies = [ + { name = "categories" }, + { name = "tags" }, + { name = "authors" }, +] + +[markdown] +highlight_code = true +highlight_theme = "inspired-github" + +bottom_footnotes = true + +[extra] + +links = [ + { title = "Mail", href = "mailto:drsamael@zohomail.cn" }, + { title = "GitHub", href = "https://github.com/drsatanic" }, + { title = "Mastodon", href = "https://mstdn.plus/@drsatanic" } +] diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..d215a6f --- /dev/null +++ b/content/_index.md @@ -0,0 +1,4 @@ ++++ ++++ + +Hi! Welcome to Hook! Hook is a Zola theme. diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..99316fa --- /dev/null +++ b/content/about.md @@ -0,0 +1,7 @@ ++++ +title = "About" + +extra.in_header = true ++++ + +Hook is a theme for [Zola](https://getzola.org), a static site generator. diff --git a/content/blog/_index.md b/content/blog/_index.md new file mode 100644 index 0000000..4cd72fc --- /dev/null +++ b/content/blog/_index.md @@ -0,0 +1,5 @@ ++++ +title = "Blog" +description = "Example blog page for Zola" +sort_by = "date" ++++ diff --git a/content/blog/hello-world.md b/content/blog/hello-world.md new file mode 100644 index 0000000..bdf5049 --- /dev/null +++ b/content/blog/hello-world.md @@ -0,0 +1,7 @@ ++++ +title = "Hello world" +date = 2021-07-29 +taxonomies.categories = ["intro"] ++++ + +Hello world! diff --git a/content/blog/markdown.md b/content/blog/markdown.md new file mode 100644 index 0000000..772d25f --- /dev/null +++ b/content/blog/markdown.md @@ -0,0 +1,66 @@ ++++ +title = "Markdown example" +description = "This page demonstrates how Markdown looks in the Hook theme for Zola" +date = 2021-07-30 +taxonomies.tags = [ + "markdown", + "syntax", +] +taxonomies.categories = [ + "intro" +] ++++ + +This post is a markdown example. + +Here is [a link](http://example.com). + +Some *italic text* and **bold text** and ~~strikethrough text~~ and `inline code`. [^1] + +```rust +// Here is a code block + +fn main() { + println!("Hello world!"); +} +``` + +Unordered list: [^2] +- An unordered, +- bulleted list +- of items + +Ordered list: +1. An ordered, +2. numbered list +3. of items + +> A quote. +> +> It contains multiple paragraphs. + +# Heading 1 + +## Heading 2 + +### Heading 3 + +#### Heading 4 + +##### Heading 5 + +###### Heading 6 + +![An example image](https://plchldr.co/i/480x360?bg=EB6361) + +![A large image](https://plchldr.co/i/1280x720?bg=3D8EB9) + +| Hello world! | This is a table. | Tables are also supported. | +|--------------|------------------|----------------------------| +| They even | have alternating | row colors! | +| Let me add | another row so | it's easier to see. | + +[^1]: A footnote. Footnotes can be used for things that could have explanation or extra context, but +for which the explanation is not relevant or otherwise desirable to have inline. + +[^2]: Another footnote. diff --git a/sass/_theme.scss b/sass/_theme.scss new file mode 100644 index 0000000..74eff09 --- /dev/null +++ b/sass/_theme.scss @@ -0,0 +1,173 @@ +@mixin light-theme { + --foreground: #222222; + --background: #eeeeee; + --secondary: #808080; + --tertiary: #dddddd; + --accent: #3d3cba; + --accent-highlight: #171746; + --table-border: #d0d0d0; + --table-row: #f7f7f7; +} + +@mixin dark-theme { + --foreground: #eeeeee; + --background: #161616; + --secondary: #999999; + --tertiary: #444444; + --accent: #959bf0; + --accent-highlight: #c2c5f6; + --table-border: var(--tertiary); + --table-row: #1e1e1e; +} + +:root { + --code-secondary: #999999; + --code-tertiary: #99999944; +} + +:root.light-mode { + @include light-theme; + + #dark-mode-on { + display: inline; + } + + #dark-mode-off { + display: none; + } +} + +:root.dark-mode { + @include dark-theme; + + #dark-mode-on { + display: none; + } + + #dark-mode-off { + display: inline; + } +} + +.dark-mode-buttons { + position: absolute; + + top: 1em; + right: 1em; +} + +.dark-mode-button { + border: none; + background-color: transparent; + + &:hover { + cursor: pointer; + } +} + +@media (prefers-color-scheme: light) { + :root { + @include light-theme; + + #dark-mode-on { + display: inline; + } + + #dark-mode-off { + display: none; + } + } +} + +@media (prefers-color-scheme: dark) { + :root { + @include dark-theme; + + #dark-mode-on { + display: none; + } + + #dark-mode-off { + display: inline; + } + } +} + +body { + color: var(--foreground); + background-color: var(--background); +} + +.secondary { + color: var(--secondary); +} + +a, a:link, a:visited { + color: var(--accent); +} + +a:hover { + color: var(--accent-highlight); +} + +blockquote { + border-left: 2px solid var(--secondary); +} + +code { + background-color: var(--tertiary); +} + +pre { + code { + background-color: transparent; + } + + mark { + color: inherit; + } + + table tr:nth-child(even) { + background-color: transparent; + } + + table td:first-child { + color: var(--code-tertiary); + } + + &[data-name]::before { + background-color: var(--code-tertiary); + color: var(--code-secondary); + } +} + +.footnote-definition sup { + color: var(--secondary); +} + +.footnotes { + border-top: 1px solid var(--table-border); +} + +.footnotes-list li { + color: var(--secondary); + + p { + color: var(--foreground); + } +} + +hr { + border: none; + border-bottom: 1px solid var(--table-border); +} + +table { + th, td { + border-color: var(--table-border); + } + + thead, tr:nth-child(even) { + background-color: var(--table-row); + } +} diff --git a/sass/style.scss b/sass/style.scss new file mode 100644 index 0000000..1114e56 --- /dev/null +++ b/sass/style.scss @@ -0,0 +1,146 @@ +@import "theme"; + +html, body { + margin: 0; + padding: 0; +} + +body { + font-family: Arial, Helvetica, sans-serif; + font-size: 14pt; + + line-height: 1.5em; + + padding: 5em 25%; +} + +.header-links { + a { + margin-right: 0.5em; + } + + a:last-of-type { + margin-right: 0; + } +} + +.space { + margin-bottom: 2em; +} + +.small { + font-size: 75%; +} + +h1, h2, h3, h4, h5, h6 { + line-height: 1.25; +} + +img { + max-width: 100%; +} + +blockquote { + margin-left: 0; + padding-left: 1em; +} + +code { + padding: 0.1em 0.2em; + font-size: 75%; +} + +pre { + overflow: auto; + padding: 0.3em; + line-height: 1.2em; + + code { + padding: 0; + min-width: 100%; + display: inline-block; + } + + mark { + display: block; + width: 100%; + } + + table { + width: 100%; + } + + table tr, table td { + padding: 0; + border: none; + } + + table td:first-child { + text-align: center; + vertical-align: middle; + border: none; + user-select: none; + } + + &[data-linenos] { + padding-inline: 0; + } + + &[data-name] { + padding-top: 1.8em; + position: relative; + } + + &[data-name]::before { + position: absolute; + top: 0; + left: 0; + + padding-inline: 0.3em; + + content: attr(data-name); + + font-size: 75%; + font-family: Arial, Helvetica, sans-serif; + } +} + +.footnote-definition { + margin-top: 1em; + + font-size: 75%; + + p { + display: inline; + } +} + +.footnotes { + margin-top: 4em; +} + +.footnotes-list { + font-size: 75%; +} + +table { + border-collapse: collapse; + + th, td { + border-width: 1px; + border-style: solid; + padding: 0.2em; + } +} + +@media all and (max-width: 1200px) { + body { + padding: 3em 15%; + } +} + +@media all and (max-width: 800px) { + body { + padding: 1em 1em; + } +} diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb1eb723530e80d3bdd2f4513a09723fae5c646 GIT binary patch literal 41760 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%0A8=3 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 HT>tog&T&qo literal 0 HcmV?d00001 diff --git a/static/dark_mode.svg b/static/dark_mode.svg new file mode 100644 index 0000000..49e0f57 --- /dev/null +++ b/static/dark_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/light_mode.svg b/static/light_mode.svg new file mode 100644 index 0000000..9cf732f --- /dev/null +++ b/static/light_mode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 0000000..01fdc32 --- /dev/null +++ b/templates/404.html @@ -0,0 +1,10 @@ +{% extends "page.html" %} + +{% block title %}{{ config.title }} | Page Not Found{% endblock title %} + +{% block content %} +
+

Page Not Found (404)

+

The page you were looking for could not be found.

+
+{% endblock content %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..6c25722 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,109 @@ + + + + + + + {% block title %}{{ config.title }}{% endblock title %} + {% block extra_head %} + + {% endblock extra_head %} + {% block feed_link %} + {% if config.generate_feeds %} + {% if config.feed_filenames %} + {% for feed in config.feed_filenames %} + {% if feed == "atom.xml" %} + + {% elif feed == "rss.xml" %} + + {% else %} + + {% endif %} + {% endfor %} + {% else %} + + {% endif %} + {% endif %} + {% endblock %} + + + {% block header %} +
+

{{ config.title }}

+ {% set linked_pages = section.pages | filter(attribute="extra.in_header") %} + {% if config.extra.links or linked_pages %} + + {% endif %} +
+ {% endblock header %} + {% block content %} + {% set blog = get_section(path="blog/_index.md") %} + {% if section.content or blog.pages %} +
+ {% if section.content %} +
+ {{ section.content | safe }} +
+ {% endif %} + {% if blog.pages %} +

Recent posts

+
    + {% for post in blog.pages | slice(end=20) %} +
  • {{ post.title }}
  • + {% endfor %} +
+

Archive

+ {% endif %} +
+ {% endif %} + {% endblock content %} +
+ + +
+ + + + diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..3760fed --- /dev/null +++ b/templates/page.html @@ -0,0 +1,39 @@ +{% extends "index.html" %} + +{% block title %}{{ config.title }} | {{ page.title }}{% endblock title %} +{% block description %}{{ page.description | default(value=config.description) }}{% endblock description %} + +{% block header %} +
+ ← Home +
+{% endblock header %} + +{% block content %} +
+

{{ page.title }}

+ {% if page.date or page.taxonomies %} +

+ {% if page.date %}{{ page.date | date(format="%-d %B, %Y") }}{% endif %} + + {% set_global sorted_taxonomies = [] %} + {% for taxonomy_name, _ in page.taxonomies %} + {% set_global sorted_taxonomies = sorted_taxonomies | concat(with=taxonomy_name) %} + {% endfor %} + {% set_global sorted_taxonomies = sorted_taxonomies | sort %} + + {% for taxonomy_name in sorted_taxonomies %} + {% set terms = page.taxonomies[taxonomy_name] %} + {% if not terms %}{% continue %}{% endif %} + - {{ taxonomy_name | capitalize }}: + {% for term_name in terms %} + {% set term = get_taxonomy_term(kind=taxonomy_name, term=term_name) %} + {{ term.name }}{% if not loop.last %},{% endif %} + {% endfor %} + {% endfor %} +

+ {% endif %} +
+ {{ page.content | safe }} +
+{% endblock content %} diff --git a/templates/section.html b/templates/section.html new file mode 100644 index 0000000..d19ab96 --- /dev/null +++ b/templates/section.html @@ -0,0 +1,21 @@ +{% extends "page.html" %} + +{% block title %}{{ config.title }} | {{ section.title }}{% endblock title %} + +{% block content %} +
+

{{ section.title }}

+ {% if section.pages %} + {% for year, posts in section.pages | group_by(attribute="year") %} +

{{ year }}

+ + {% endfor %} + {% else %} +

No posts yet.

+ {% endif %} +
+{% endblock content %} diff --git a/templates/taxonomy_list.html b/templates/taxonomy_list.html new file mode 100644 index 0000000..1b3b216 --- /dev/null +++ b/templates/taxonomy_list.html @@ -0,0 +1,20 @@ +{% extends "page.html" %} + +{% block title %}{{ config.title }} | {{ taxonomy.name | capitalize }}{% endblock title %} + +{% block content %} +
+

{{ taxonomy.name | capitalize }}

+
+
    + {% for term in terms %} +
  • + {{ term.name }} + {% set count = term.pages | length %} + ({{ count }} page{{ count | pluralize }}) +
  • + {% endfor %} +
+
+
+{% endblock content %} diff --git a/templates/taxonomy_single.html b/templates/taxonomy_single.html new file mode 100644 index 0000000..f6ce7fd --- /dev/null +++ b/templates/taxonomy_single.html @@ -0,0 +1,18 @@ +{% extends "page.html" %} + +{% block title %}{{ config.title }} | {{ term.name }}{% endblock title %} + +{% block content %} +
+

{{ taxonomy.name | capitalize }} - {{ term.name }}

+
    + {% for page in term.pages %} +
  • + {{ page.title }} + {% if page.date %}({{ page.date | date(format="%d %b, %Y") }}){% endif %} +
  • + {% endfor %} +
+

All {{ taxonomy.name }}

+
+{% endblock content %}