Compare commits

...

1 Commits

Author SHA1 Message Date
b1b8b590fc Remove old mentions and personify with my own. 2025-05-23 19:09:33 -04:00
98 changed files with 358 additions and 1691 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"cSpell.words": [
"Duckquill"
]
}

View File

@ -1,40 +1,3 @@
[![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page) # Blog
[![MIT license](https://img.shields.io/badge/License-MIT-blue)](https://mit-license.org)
[![status-badge](https://ci.codeberg.org/api/badges/13032/status.svg)](https://ci.codeberg.org/repos/13032)
# [Duckquill](https://duckquill.daudix.one) Empty readme.md for a static blog. Uses Zola with the Duckquill theme. This is genuinely just a git clone of the Duckquill theme and then adjusted to fill with my own material. All theme/aesthetic credits goes to Duckquill.
Duckquill is an opinionated, modern, pretty, and clean [Zola](https://www.getzola.org) theme that has the purpose of greatly simplifying the process of rolling up your blog. It aims to provide all the necessary options for comfortable writing, while keeping the balance of simplicity.
![Screenshot](screenshot.png)
## Docs
Docs are provided in form of a [live demo](https://duckquill.daudix.one).
## Know your rights
This project is under the MIT license:
- **Freedom to Use**: You have the right to use the software for any purpose, whether it's personal, academic, or commercial.
- **Freedom to Modify**: You can modify the source code of the software to suit your needs or preferences.
- **Freedom to Distribute**: You have the right to distribute the software, whether in its original form or modified, to others.
- **Collaboration**: You can collaborate with others on the software's development and improvement.
- **No License Compatibility Issues**: You can combine the MIT-licensed software with other software, even if they use different licenses.
- **No Usage Restrictions**: There are no restrictions on the technologies or fields of use, giving you maximum flexibility.
- **No Royalties**: You are not required to pay any royalties or fees for using, modifying, or distributing the software.
## Contributing guidelines
There are several ways to contribute to this project:
- Reporting issues
- Discussing potential improvements
- Contributing code
- Writing documentation
- Submitting feature requests
- Providing feedback
When making any sort of contribution, please make sure to follow [Forgejo's Code of Conduct](https://codeberg.org/forgejo/code-of-conduct). If you don't have the time to read it, just know that all you have to do is be nice, and you'll be just fine.
*</> with <3 by [daudix](https://daudix.one) | README based on [libreivan's](https://codeberg.org/libreivan/libreivan.com)*

View File

@ -1,27 +1,13 @@
title = "Duckquill" title = "Hak8or's Blog"
base_url = "https://duckquill.daudix.one" base_url = "https://blog.hak8or.com"
description = "Opinionated, modern, pretty, and clean Zola theme." description = "Where I document some notes"
compile_sass = true compile_sass = true
minify_html = true minify_html = true
generate_feeds = true generate_feeds = true
# Only the first file will be used in the navbar feed button,
# other feeds will still be available in page's head.
feed_filenames = ["rss.xml", "atom.xml"] feed_filenames = ["rss.xml", "atom.xml"]
build_search_index = true build_search_index = true
author = "Duck Quack" author = "Hak8or"
# Based on https://github.com/welpo/tabi
#
# To translate the entire theme, there must be a file with the same ISO 639-1 or BCP 47
# language code in the `i18n` directory of your site or the Duckquill theme.
# For example, "i18n/fr.toml" for French or "i18n/zh-Hans.toml" for Simplified Chinese.
# Otherwise the theme will be in English.
#
# ISO 639-1: https://localizely.com/iso-639-1-list/
# BCP 47: https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
default_language = "en" default_language = "en"
taxonomies = [{ name = "tags", feed = true }] taxonomies = [{ name = "tags", feed = true }]
[markdown] [markdown]
@ -35,135 +21,17 @@ smart_punctuation = true
bottom_footnotes = true bottom_footnotes = true
[search] [search]
# index_format = "elasticlunr_json"
index_format = "fuse_json" index_format = "fuse_json"
[languages.ar]
title = "Duckquill"
description = "سمة زولا العصرية والحديثة والجميلة والنظيفة."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.es]
title = "Duckquill"
description = "Tema Zola de opinión, moderno, bonito y limpio."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.fr]
title = "Duckquill"
description = "Un thème affirmé, moderne, beau et clair pour Zola."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.ms]
title = "Duckquill"
description = "Tema Zola yang berpandangan, moden, cantik dan bersih."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.ru]
title = "Duckquill"
description = "Мнимая, современная, симпатичная, и аккуратная тема Zola."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.fa]
title = "Duckquill"
description = "پوسته ای صاحب نظر، به‌روز، زیبا و تمیز برای Zola."
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[languages.zh-Hans]
title = "Duckquill"
description = "有主见、现代、漂亮、简洁的 Zola 主题。"
generate_feeds = true
taxonomies = [{ name = "tags", feed = true }]
[extra] [extra]
# Which theme should be used by default (light/dark).
#
# default_theme = "dark"
#
# Sets theme and browser theme color.
# See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color
accent_color = "#ff7800" accent_color = "#ff7800"
# Ditto but for the dark theme.
# If not set regular variant will be used.
accent_color_dark = "#ffa348" accent_color_dark = "#ffa348"
# Whether to use fonts bundled with Duckquill instead of system ones. source_url = "https://gitea.hak8or.com/hak8or/blog"
# Keep in mind that it also changes the style of headings.
#
# bundled_fonts = true
#
# Use emoji as a favicon.
# Only one emoji is being rendered, everything else is truncated.
#
# emoji_favicon = "🦆🪶"
#
# URL to website's issue tracker
issues_url = "https://codeberg.org/daudix/duckquill/issues"
# URL to website's source code
source_url = "https://codeberg.org/daudix/duckquill"
# Additional CSS styles; expects them to be in the "./static/" directory.
# If you are using Sass it will be generated there automatically.
#
# styles = [
# "YOUR_STYLE.css",
# "ALSO_YOUR_STYLE.css"
# ]
#
# Additional JavaScript scripts; expects them to be in the "./static/" directory.
#
# scripts = [
# "YOUR_SCRIPT.js",
# "ALSO_YOUR_SCRIPT.js"
# ]
#
# Whether to show "copy code" button on all code blocks
# that have the language set.
# See https://www.getzola.org/documentation/content/syntax-highlighting/
show_copy_button = true show_copy_button = true
# Whether to show estimated read time in posts.
show_reading_time = true show_reading_time = true
#
# Whether to show a share button in article's quick actions.
# Uses https://shareopenly.org.
show_share_button = true show_share_button = true
# Whether to show the backlinks button for linked articles in the article's quick actions
show_backlinks = true show_backlinks = true
# Whether to enable the KaTeX library for rendering LaTeX.
# Note: This will make your page significantly heavier.
# Instead, consider enabling it per page/section.
# katex = true
#
# Whether to render table of contents on all pages.
# Will not be rendered if page doesn't have any headings.
# Can be set per page/section.
# toc = true
#
# Whether to render inline table of contents at the top of all pages,
# in addition to floating quick navigation buttons.
# Can be set per page/section.
# toc_inline = true
#
# Whether to use numbered (ordered) list for table of contents.
# Can be set per page/section.
# toc_ordered = true
#
# Custom separator used across the theme.
# separator = "•"
# Custom separator used in title tag and posts metadata.
# title_separator = "-"
#
# Whether to use Content Security Policy. # Whether to use Content Security Policy.
# Keep in mind that although this can potentially increase security, # Keep in mind that although this can potentially increase security,
# it can break some stuff, in which case you will need to set custom policy. # it can break some stuff, in which case you will need to set custom policy.
@ -178,88 +46,43 @@ csp = [
{ directive = "base-uri", domains = ["'none'"] }, { directive = "base-uri", domains = ["'none'"] },
{ directive = "form-action", domains = ["'none'"] } { directive = "form-action", domains = ["'none'"] }
] ]
# Uncomment this to disable the card displayed in share previews
# card = false
[extra.nav] [extra.nav]
# Whether to automatically hide nav when not hovered or focused auto_hide = true
# auto_hide = true
# Whether to show the Atom/RSS feed button in the nav
show_feed = true show_feed = true
# Whether to show the manual theme switcher in the nav
show_theme_switcher = true show_theme_switcher = true
# Whether to show the link to the source repository in the nav
show_repo = true show_repo = true
# Links used in the nav.
# For local files use same link format as in Markdown,
# i.e. "@/blog/_index.md".
# See https://www.getzola.org/documentation/content/linking/#internal-links
links = [ links = [
{ name = "Links", menu = [ { name = "Links", menu = [
{ url = "@/blog/_index.md", name = "Blog" }, { url = "@/blog/_index.md", name = "Blog" },
{ url = "@/demo/index.md", name = "Demo" },
{ url = "@/mods/index.md", name = "Mods" }
] }, ] },
{ url = "https://daudix.one/coffee/", name = "Coffee" } { url = "https://daudix.one/coffee/", name = "Coffee" }
] ]
[extra.footer] [extra.footer]
# Links used in the footer.
# Same as the nav ones.
links = [ links = [
{ url = "@/blog/_index.md", name = "Blog" }, { url = "@/blog/_index.md", name = "Blog" },
{ url = "@/demo/index.md", name = "Demo" },
{ url = "@/mods/index.md", name = "Mods" },
{ url = "https://daudix.one/coffee/", name = "Coffee" } { url = "https://daudix.one/coffee/", name = "Coffee" }
] ]
# Social links in the footer.
# Any URL-encoded SVG can be used as an icon.
# https://simpleicons.org is the recommended source of SVG icons.
# For URL encoding use https://yoksel.github.io/url-encoder/.
# Make sure that "external quotes" are set to "double".
socials = [ socials = [
{ url = "https://github.com", name = "GitHub", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EGitHub%3C/title%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E" }, { url = "https://github.com", name = "GitHub", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EGitHub%3C/title%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E" },
{ url = "https://instagram.com", name = "Instagram", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EInstagram%3C/title%3E%3Cpath d='M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077'/%3E%3C/svg%3E" }, { url = "https://instagram.com", name = "Instagram", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EInstagram%3C/title%3E%3Cpath d='M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077'/%3E%3C/svg%3E" },
{ url = "https://mastodon.social", name = "Mastodon", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EMastodon%3C/title%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E" }, { url = "https://mastodon.social", name = "Mastodon", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EMastodon%3C/title%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E" },
{ url = "https://twitter.com", name = "Twitter", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3ETwitter%3C/title%3E%3Cpath d='M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z'/%3E%3C/svg%3E" } { url = "https://twitter.com", name = "Twitter", icon = "%3Csvg role='img' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3ETwitter%3C/title%3E%3Cpath d='M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z'/%3E%3C/svg%3E" }
] ]
# Whether to show "© Title, YEAR"
show_copyright = true show_copyright = true
# Whether to show "Powered by Zola and Duckquill"
show_powered_by = true show_powered_by = true
# Whether to show link to website source
show_source = false show_source = false
# Custom copyright text
#
# copyright = "© *Aperture* **Science** ~~Innovators~~, `1972`"
# Based on https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/
#
# Mastodon-powered commenting.
# Values can be overridden in the front-matter, e.g.
# for multi-author blogs or guest posts.
#
# These variables are also used for Mastodon verification,
# the needed rel="me" link is set in the head based on these.
[extra.comments] [extra.comments]
# Your Mastodon API host; instance that you have an account on.
host = "vmst.io" host = "vmst.io"
# Your Mastodon username; used to determine who the original poster is.
user = "daudix" user = "daudix"
# Whether to show the QR code to Mastodon post
show_qr = true show_qr = true
# GoatCounter analytics; enabled only if present in config.
[extra.goatcounter] [extra.goatcounter]
# Your GoatCounter server; goatcounter.com is used by default.
#
# host = "YOUR_SERVER"
#
# Your GoatCounter username
user = "duckquill" user = "duckquill"
[extra.debug] [extra.debug]
# Display outlines around all elements for debugging purposes
layout = false layout = false
# Don't load any styles for debugging purposes
no_styles = false no_styles = false

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -3,300 +3,5 @@ insert_anchor_links = "left"
title = "Home" title = "Home"
+++ +++
{% crt() %} # Index
``` An index
_ _ _ _ _
>(')____, >(')____, >(')____, >(')____, >(') ___,
(` =~~/ (` =~~/ (` =~~/ (` =~~/ (` =~~/
jgs~^~^`---'~^~^~^`---'~^~^~^`---'~^~^~^`---'~^~^~^`---'~^~^~
```
{% end %}
# Duckquill
Duckquill is an opinionated, modern, pretty, and clean [Zola](https://www.getzola.org) theme that has the purpose of greatly simplifying the process of rolling up your blog. It aims to provide all the necessary options for comfortable writing, while keeping the balance of simplicity.
With it, you can change some configuration variables, tweak some of the included graphics, and have a nice blog up in minutes!
Some of the features Duckquill has to offer:
- Cute and informative social media cards for Discourse, Facebook, LinkedIn, Mastodon and more.
- [Mastodon-powered comments](https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/); comment under a post by using your Mastodon account.
- Lightweight by default, powerful when needed; no mandatory JavaScript is used by default.
- Privacy respecting analytics using [GoatCounter](https://www.goatcounter.com), with support for self-hosting.
- Estimated read time of the post; put away those with short attention spans.
- Light/dark/system theme switcher (for some reason everyone likes these).
- Everything is tinted with the user-defined accent color for a pleasant look.
- GitHub-style alerts. Yes, they're pretty, but don't overuse them.
- Post banners; they're even used in the social media cards!
- YouTube/Vimeo shortcodes for easy video embedding.
- Tiny by default; only ~100kB. Take that, 5MB Medium!
- Customizable copyright text; you Better Quack Soul!
- Image styling via URL. Yes, you read that right.
- Useless CRT style that everyone seems to like.
- Fully localizeable, worry not, [it's pretty easy](#localization).
- Social links in the footer, with special styling.
- LaTeX markup support via the [KaTeX](https://katex.org) library.
- Emoji favicon if you're lazy to draw one.
- Copy button for code blocks.
- Search functionality.
{% alert(tip=true) %}
If you use Duckquill and enjoy it, or just like my work, please consider [buying me a coffee](https://daudix.one/coffee/), it would mean the world to me ^^.
{% end %}
## Installation
First, if you already have Git setup, add this theme as a submodule:
```bash
git submodule init
git submodule add https://codeberg.org/daudix/duckquill.git themes/duckquill
```
Otherwise, simply clone it to your `themes` directory:
```bash
git clone https://codeberg.org/daudix/duckquill.git themes/duckquill
```
{% alert(important=true) %}
It is highly recommended to switch from the `main` branch to the latest release:
{% end %}
```bash
cd themes/duckquill
git checkout tags/v6.3.0
```
Then, enable it in your `config.toml`:
```toml
theme = "duckquill"
```
To update the theme, simply switch to a new tag:
```bash
git submodule update --remote --merge
cd themes/duckquill
git checkout tags/v6.3.0
```
{% alert(important=true) %}
Check the changelog for all versions after the one you are using; there may be breaking changes that require manual involvement.
{% end %}
## Options
Duckquill offers some configuration options to make it fit you better; most options have pretty descriptive comments, so it should be easy to understand what they do.
## Front Matter
Duckquill has some [front matter](https://www.getzola.org/documentation/content/page/#front-matter) variables that you can use by setting them in the `[extra]` section:
### Global
Configuration variables from `config.toml` that can be set/overriden per page/section:
- `default_theme`: Which theme should be used by default (light/dark).
- `accent_color`: Sets theme and [browser theme](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color) color.
- `accent_color_dark`: Ditto but for the dark theme. If not set regular variant will be used.
- `emoji_favicon`: Use emoji as a favicon. Only one emoji is being rendered, everything else is truncated.
- `styles`: Additional CSS styles; expects them to be in the `./static/` directory. If you are using Sass it will be generated there automatically.
- `scripts`: Additional JavaScript scripts; expects them to be in the `./static/` directory.
- `katex`: Whether to enable the KaTeX library for rendering LaTeX.
- `toc`: Enables table of contents. Only first 2 levels of headings are listed.
- `toc_inline`: Whether to render inline table of contents at the top of all pages, in addition to floating quick navigation buttons.
- `toc_ordered`: Whether to use numbered (ordered) list for table of contents.
- `toc_sidebar`: Whether to display table of contents as a sidebar (useful for long pages).
- `card`: When set to `false` disables share preview cards globally.
Other variables:
- `apple_touch_icon`: Filename of the [colocated](https://www.getzola.org/documentation/content/overview/#asset-colocation) Apple Touch Icon.
- `favicon`: Filename of the [colocated](https://www.getzola.org/documentation/content/overview/#asset-colocation) favicon.
- `card`: Filename of the [colocated](https://www.getzola.org/documentation/content/overview/#asset-colocation) metadata card.
- `archive`: Displays an archived message.
- `trigger`: Displays a trigger warning message.
- `disclaimer`: Displays a disclaimer message.
- `go_to_top`: Displays a "go to top" button.
### Blog post specific:
- `banner`: Filename of the [colocated](https://www.getzola.org/documentation/content/overview/#asset-colocation) banner image. Recommended dimensions are 2:1 aspect ratio and 1920x960 resolution.
- `banner_pixels` Makes the banner use nearest neighbor algorithm for scaling, useful for keeping pixel-art sharp.
- `archived`: Make the post visually stand out in the post list. Also accepts message as a value.
- `featured`: Ditto but doesn't accept message as a value.
- `hot`: Ditto.
- `poor`: Ditto.
In `[extra.comments]` section:
- `host`: The Mastodon server on which the post was posted.
- `user`: The username of the poster.
- `id`: ID of the post; the one in the URL.
### Localization
Duckquill ships with a localization system based on one used in [tabi](https://github.com/welpo/tabi), it's very easy to use and quite flexible at the same time.
To add a translation, simply create a file in your site's `i18n` directory called `LANG_CODE.toml`, e.g `fr.toml`. The language code should be either [ISO 639-1](https://localizely.com/iso-639-1-list/) or [BCP 47](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry).
Inside that file, copy-paste one of the existing translations from Duckquill and adapt it to your needs. You can also check [tabi](https://github.com/welpo/tabi/tree/main/i18n) translation files for reference.
Additionally to translating Duckquill, you can also override the English stings by copy-pasting `en.toml` from Duckquill to the `i18n` directory of your website and adjusting the values to your liking.
### Custom Styles
To add your own or override existing styles, create a custom style and add it in the `config.toml`:
```toml
[extra]
styles = [
"YOUR_STYLE.css",
"ALSO_YOUR_STYLE.css"
]
```
Additional styles are expected it to be in the `static` directory. If you are using Sass they will be compiled there by default.
If for some reason overridden style is not respected, try using `!important` (don't use it unless needed). You can import styles from Duckquill using:
```scss
@use "../themes/duckquill/sass/NEEDED_FILE.scss";
```
You can also load styles per page/section by setting them inside page's front matter:
```toml
[extra]
styles = [
"YOUR_PAGE_STYLE.css"
]
```
### Accent Color
Duckquill respects chosen accent color everywhere. To use your own, simply change it in `config.toml`:
```toml
[extra]
accent_color = "#3584e4"
```
Additionally, you can set a separate color for dark mode:
```toml
[extra]
accent_color_dark = "#ff7800"
```
### Favicon
Files named `favicon.png` and `apple-touch-icon.png` are used as favicon and Apple Touch Icon respectively. For animated favicon you can use APNG with the `png` file extension.
## In the Wild
<details>
<summary>This list is starting to get long, so click on it to expand it.</summary>
- [agustinramirodiaz.github.io](https://agustinramirodiaz.github.io)
- [alavi.me](https://alavi.me)
- [aparoksha.dev](https://www.aparoksha.dev)
- [arfh.pages.dev](https://arfh.pages.dev)
- [bambalabs.co](https://www.bambalabs.co)
- [bano.dev](https://bano.dev)
- [benjaminandre.be](https://benjaminandre.be)
- [blog.digital-horror.co](https://blog.digital-horror.com)
- [blog.millefeuille42.fr](https://blog.millefeuille42.fr)
- [blog.pansi21.xyz](https://blog.pansi21.xyz)
- [blog.thundernetwork.org](https://blog.thundernetwork.org)
- [cabysm.github.io](https://cabysm.github.io)
- [daveparr.info](https://www.daveparr.info)
- [davepoltorak.com](https://davepoltorak.com)
- [drismir.ca](https://drismir.ca)
- [enriquekesslerm.com](https://enriquekesslerm.com)
- [gregorni.gitlab.io](https://gregorni.gitlab.io)
- [harrypotterexplained.com](http://harrypotterexplained.com)
- [hyouteki.github.io](https://hyouteki.github.io)
- [ikergimenez.neocities.org](https://ikergimenez.neocities.org)
- [kaipeacock.com](https://kaipeacock.com)
- [larrabyte.dev](https://larrabyte.dev)
- [lifailon.github.io](https://lifailon.github.io)
- [luciengheerbrant.com](https://luciengheerbrant.com)
- [lukoktonos.com](http://www.lukoktonos.com)
- [matteorisso.github.io](https://matteorisso.github.io)
- [maxffarrell.com](https://maxffarrell.com)
- [maxime.letemple.fr](https://maxime.letemple.fr)
- [mourelask.xyz](https://mourelask.xyz)
- [muelsyse.codeberg.page](https://muelsyse.codeberg.page)
- [mukuljoshi.xyz](https://mukuljoshi.xyz)
- [nbenedek.me](https://nbenedek.me)
- [nikos-archive.org](https://nikos-archive.org)
- [nisf.be](https://nisf.be)
- [nullpuppy.github.io](https://nullpuppy.github.io)
- [nutn-isc.gitlab.io](https://nutn-isc.gitlab.io/nutn-isc-website/)
- [orzklv.uz](https://orzklv.uz)
- [penandink.work](https://penandink.work)
- [pyter.at](https://pyter.at)
- [reallysimple.io](https://www.reallysimple.io)
- [rerere.unlogic.co.uk](https://rerere.unlogic.co.uk)
- [rossjr.dev](https://rossjr.dev)
- [samienr.com](https://samienr.com)
- [shrimple.srht.site](https://shrimple.srht.site)
- [siddharthsabron.in](https://siddharthsabron.in)
- [sorg.codeberg.page](https://sorg.codeberg.page)
- [sungsphinx.codeberg.page](https://sungsphinx.codeberg.page)
- [tmblog.pages.dev](https://tmblog.pages.dev)
- [treeniks.github.io](https://treeniks.github.io)
- [vegner.io](https://vegner.io)
- [voluxyy.github.io](https://voluxyy.github.io/portfolio/)
- [winnydows.com](https://winnydows.com)
- [zlog.si-on.top](https://zlog.si-on.top)
- [zstg.is-a.dev](https://zstg.is-a.dev)
- [琳.tw](https://xn--jgy.tw/)
- Yours? <small>(feel free to [contact me](https://daudix.one/find/#contacts) or send a pull request)</small>
</details>
## In Credits
- [andreatitolo.com](https://www.andreatitolo.com/credits)
- [aplos.gxbs.me](https://aplos.gxbs.me)
- [archaeoramblings.com](https://www.archaeoramblings.com/credits)
- [oomfie.town](https://oomfie.town/credits)
## Assets Sources
All sources for Duckquill's assets are available [here](https://codeberg.org/daudix/archive/src/branch/main/duckquill/src) and licensed under CC BY-SA 4.0. The reason for not putting the sources in the same repo as Duckquill itself is simple: I want it to be as small as possible, so that repo cloning is fast and doesn't make the site significantly heavier; this is also why the demo uses remote images instead of local copies.
## Credits
- [Quill image used in the metadata card](https://commons.wikimedia.org/wiki/File:3quills.jpg)
## Tools Used
- [VSCodium](https://vscodium.com) - Free/Libre Open Source Software Binaries of VS Code
- [Capitalize](https://marketplace.visualstudio.com/items?itemName=viablelab.capitalize) - Title capitalization without random websites.
- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml) - For `config.toml` basically.
- [Monokai Pro](https://marketplace.visualstudio.com/items?itemName=monokai.theme-monokai-pro-vscode) - Awfully pretty theme.
- [PX to REM](https://marketplace.visualstudio.com/items?itemName=cipchk.cssrem) - Easy conversion from PX to REM and vice versa.
- [SCSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=mrmlnc.vscode-scss) - Not sure if it actually works. ¯\\\_(ツ)_/¯
- [Sort CSS](https://marketplace.visualstudio.com/items?itemName=piyushsarkar.sort-css-properties) - A lifesaver for long CSS properties.
- [Tera](https://marketplace.visualstudio.com/items?itemName=karunamurti.tera) - Tera template engine (the one Zola uses) support.
- [Firefox developer tools](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools) - Best of its kind.
As for the code formatter I use built-in VSCodium one. Prettier is good but I don't like how it tries to make code fit in a very narrow column, this can be changed of course, but built-in formatter does it's job so I don't bother doing so.
## Thanks To
- [Jakub Steiner](https://jimmac.eu) for the [OS Component Website](https://jimmac.github.io/os-component-website), which served as a starting point and inspiration.
- [Óscar](https://osc.garden) for [tabi](https://welpo.github.io/tabi/) and its [translation system](https://github.com/welpo/tabi/blob/7b00ed1d9dca5c529d2816c5b6679bfe600d63fc/templates/macros/translate.html), [rel attributes](https://github.com/welpo/tabi/blob/7b00ed1d9dca5c529d2816c5b6679bfe600d63fc/templates/macros/rel_attributes.html), and [Content Security Policy](https://github.com/welpo/tabi/blob/7b00ed1d9dca5c529d2816c5b6679bfe600d63fc/templates/partials/content_security_policy.html).
- [Carl Schwan](https://carlschwan.eu) for the [Mastodon-powered Comments](https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/).
- [Jonathan Neal](https://jonneal.dev) for the [normalize.css](https://csstools.github.io/normalize.css/).
- [GNOME design team](https://gitlab.gnome.org/Teams/Design) for the [icon development kit](https://gitlab.gnome.org/Teams/Design/icon-development-kit)
- [Modern Font Stacks](https://modernfontstacks.com) for the system font stack.
- [TheEvilSkeleton](https://tesk.page) for helping to improve the look and accessibility.
- [Dexter Reed](https://sungsphinx.codeberg.page) for being the first Duckquill user, preventing it from being axed.
- Everyone who supported me and said good stuff <3

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1,9 +1,9 @@
+++ +++
title = "Writings of Duck's Feet" title = "Hak8or's musings"
sort_by = "date" sort_by = "date"
template = "article_list.html" template = "article_list.html"
page_template = "article.html" page_template = "article.html"
paginate_by = 2 paginate_by = 10
+++ +++
Welcome to my quack'in blog, I quack about various stuff, but mostly I'm a demo. A blog where I post miscellaneous notes and musings to track past efforts.

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
_index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,16 +0,0 @@
+++
authors = ["John Dolor"]
title = "Dolor"
description = "Lorem ipsum dolor sit amet."
date = 1970-01-03
[taxonomies]
tags = ["Lorem", "Ipsum", "Dolor"]
[extra]
archive = true
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea bona praeterita grata recordatione renovata delectant. Est.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,15 +0,0 @@
+++
authors = ["John Draft"]
title = "Drafty Draft"
description = "Drafted post, very drafty."
date = 2024-04-29
draft = true
[taxonomies]
tags = ["Draft"]
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea bona praeterita grata recordatione renovata delectant. Est.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,16 +0,0 @@
+++
authors = ["John Ipsum"]
title = "Ipsum"
description = "Lorem ipsum dolor sit amet."
date = 1970-01-02
[taxonomies]
tags = ["Lorem", "Ipsum"]
[extra]
hot = true
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea bona praeterita grata recordatione renovata delectant. Est.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,18 +0,0 @@
+++
authors = ["Looong Looong Man", "Alexander Maximilian Jonathan"]
title = "Loooooong Loooooong Loooooong Loooooong Loooooong Man"
description = "Pneumonoultramicroscopicsilicovolcanoconiosis supercalifragilisticexpialidocious pseudopseudohypoparathyroidism."
date = 2017-01-01
[taxonomies]
tags = ["Honorificabilitudinitatibus"]
[extra]
featured = true
+++
![Long Long Man](https://upload.wikimedia.org/wikipedia/en/e/ed/Long_Long_Man.jpeg#end#spoiler)
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea bona praeterita grata recordatione renovata delectant. Est.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,16 +0,0 @@
+++
authors = ["John Lorem"]
title = "Lorem"
description = "Lorem ipsum dolor sit amet."
date = 1970-01-01
[taxonomies]
tags = ["Lorem"]
[extra]
poor = true
+++
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur. Quod idem licet transferre in voluptatem, ut postea.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea bona praeterita grata recordatione renovata delectant. Est.
Ullus investigandi veri, nisi inveneris, et quaerendi defatigatio turpis est, cum esset accusata et vituperata ab Hortensio. Qui liber cum et mortem contemnit, qua qui est imbutus quietus esse numquam potest. Praeterea.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -0,0 +1,338 @@
+++
authors = ["Hak8or"]
title = "Rust Kernel driver on Arch"
description = "My adventure getting a out of tree Rust kernel driver built and running on Arch"
date = 2025-05-23
[taxonomies]
tags = ["Kernel", "Rust"]
+++
# hh
- https://g.co/gemini/share/82960b800238
- https://ai.hak8or.com/s/29ba3e08-714e-4542-a35d-9530106e56b6
- https://ai.hak8or.com/s/0eeffc31-7cb9-4f83-a71e-33810a4f197b
```bash
mkdir meh
cd meh
touch Makefile
vim Makefile
vim hello_blk.rs
make
pacman -S linux-headers
make
pacman -S rust rust-src rust-bindgen
rustup component add rust-src
pacman -R rust
make LLVM=1 rustavailable
cargo install --locked bindgen-cli
make LLVM=1
rustup show
cargo --version
rustc --version
pacman -S rust:1.86.0 rust-src:1.86.0 rust-bindgen
pacman -S rust
pacman -S rust:1.86.0 rust-src:1.86.0 rust-bindgen
pacman -S rust:1:1.86.0-1 rust-src:1:1.86.0-1 rust-bindgen
pacman -S rust:1.86.0-1 rust-src:1.86.0-1 rust-bindgen
pacman -S rust=1.86.0-1 rust-src=1.86.0-1 rust-bindgen
pacman -S rust=1:1.86.0-1 rust-src=1:1.86.0-1 rust-bindgen
pacman -Q rust
pacman -S rust=1.86.0 rust-src=1.86.0 rust-bindgen
pacman -U https://archive.archlinux.org/packages/r/rust/rust-1%3A1.86.0-1-x86_64.pkg.tar.zst https://archive.archlinux.org/packages/r/rust-src/rust-src-1%3A1.86.0-1-x86_64.pkg.tar.zst
make LLVM=1
make
history
```
```bash
[root@d771c1f24a89 meh]# make
make -C /lib/modules/6.14.6-arch1-1/build M=/home/meh modules
make[1]: Entering directory '/usr/lib/modules/6.14.6-arch1-1/build'
make[2]: Entering directory '/home/meh'
RUSTC [M] hello_blk.o
error: proc macro panicked
--> hello_blk.rs:55:1
|
55 | / module! {
56 | | type: HelloBlk,
57 | | name: b"hello_blk",
58 | | author: b"Your Name",
59 | | description: b"Simple in-memory buffer (block dev pending)",
60 | | license: b"GPL",
61 | | }
| |_^
|
= help: message: Expected string
error[E0425]: cannot find value `__LOG_PREFIX` in the crate root
--> hello_blk.rs:25:9
|
25 | pr_info!("Allocating {} bytes for the device...\n", DEVICE_SIZE_BYTES);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in the crate root
|
= note: this error originates in the macro `$crate::print_macro` which comes from the expansion of the macro `pr_info` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0425]: cannot find value `__LOG_PREFIX` in the crate root
--> hello_blk.rs:27:9
|
27 | pr_info!("Filling buffer...\n");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in the crate root
|
= note: this error originates in the macro `$crate::print_macro` which comes from the expansion of the macro `pr_info` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0425]: cannot find value `__LOG_PREFIX` in the crate root
--> hello_blk.rs:31:9
|
31 | pr_info!("Buffer filled.\n");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in the crate root
|
= note: this error originates in the macro `$crate::print_macro` which comes from the expansion of the macro `pr_info` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0425]: cannot find value `__LOG_PREFIX` in the crate root
--> hello_blk.rs:44:9
|
44 | pr_info!("bye\n");
| ^^^^^^^^^^^^^^^^^ not found in the crate root
|
= note: this error originates in the macro `$crate::print_macro` which comes from the expansion of the macro `pr_info` (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0425]: cannot find value `__LOG_PREFIX` in the crate root
--> hello_blk.rs:50:9
|
50 | pr_info!("hello\n");
| ^^^^^^^^^^^^^^^^^^^ not found in the crate root
|
= note: this error originates in the macro `$crate::print_macro` which comes from the expansion of the macro `pr_info` (in Nightly builds, run with -Z macro-backtrace for more info)
warning: unused import: `kernel::bindings`
--> hello_blk.rs:4:5
|
4 | use kernel::bindings;
| ^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
warning: unused attribute
--> <crate attribute>:1:1
|
1 | no_std
| ^^^^^^ help: remove this attribute
|
note: attribute also specified here
--> hello_blk.rs:1:1
|
1 | #![no_std]
| ^^^^^^^^^^
= note: `#[warn(unused_attributes)]` on by default
error[E0107]: struct takes 2 generic arguments but 1 generic argument was supplied
--> hello_blk.rs:18:17
|
18 | data: Mutex<Vec<u8>>,
| ^^^ -- supplied 1 generic argument
| |
| expected 2 generic arguments
|
help: add missing generic argument
|
18 | data: Mutex<Vec<u8, A>>,
| +++
error[E0050]: method `init` has 0 parameters but the declaration in trait `kernel::Module::init` has 1
--> hello_blk.rs:49:5
|
49 | fn init() -> Result<Self> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter, found 0
|
= note: `init` from trait: `fn(&'static ThisModule) -> core::result::Result<Self, kernel::error::Error>`
error[E0107]: struct takes 2 generic arguments but 1 generic argument was supplied
--> hello_blk.rs:24:28
|
24 | fn new() -> Result<Pin<Box<Self>>> {
| ^^^ ---- supplied 1 generic argument
| |
| expected 2 generic arguments
|
help: add missing generic argument
|
24 | fn new() -> Result<Pin<Box<Self, A>>> {
| +++
error[E0061]: this function takes 2 arguments but 1 argument was supplied
--> hello_blk.rs:26:24
|
26 | let mut data = Vec::with_capacity(DEVICE_SIZE_BYTES as usize)?;
| ^^^^^^^^^^^^^^^^^^---------------------------- argument #2 of type `Flags` is missing
|
note: associated function defined here
--> /build/linux/src/linux-6.14.6/rust/kernel/alloc/kvec.rs:315:12
help: provide the argument
|
26 - let mut data = Vec::with_capacity(DEVICE_SIZE_BYTES as usize)?;
26 + let mut data = Vec::with_capacity(DEVICE_SIZE_BYTES as usize, /* Flags */)?;
|
error[E0061]: this method takes 2 arguments but 1 argument was supplied
--> hello_blk.rs:29:18
|
29 | data.extend_from_slice(&i.to_le_bytes());
| ^^^^^^^^^^^^^^^^^------------------ argument #2 of type `Flags` is missing
|
note: method defined here
--> /build/linux/src/linux-6.14.6/rust/kernel/alloc/kvec.rs:498:12
help: provide the argument
|
29 - data.extend_from_slice(&i.to_le_bytes());
29 + data.extend_from_slice(&i.to_le_bytes(), /* Flags */);
|
error[E0061]: this function takes 3 arguments but 1 argument was supplied
--> hello_blk.rs:34:19
|
34 | data: Mutex::new(data),
| ^^^^^^^^^^------ two arguments of type `&'static kernel::prelude::CStr` and `&'static LockClassKey` are missing
|
note: associated function defined here
--> /build/linux/src/linux-6.14.6/rust/kernel/sync/lock.rs:132:12
help: provide the arguments
|
34 - data: Mutex::new(data),
34 + data: Mutex::new(data, /* &'static kernel::prelude::CStr */, /* &'static LockClassKey */),
|
error[E0061]: this function takes 2 arguments but 1 argument was supplied
--> hello_blk.rs:33:19
|
33 | let dev = Box::pin(HelloBlk {
| ___________________^^^^^^^^-
34 | | data: Mutex::new(data),
35 | | // _dev: unsafe { bindings::alloc_disk(1) }?, // Defer Gendisk
36 | | });
| |__________- argument #2 of type `Flags` is missing
|
note: associated function defined here
--> /build/linux/src/linux-6.14.6/rust/kernel/alloc/kbox.rs:241:12
help: provide the argument
|
33 ~ let dev = Box::pin(HelloBlk {
34 + data: Mutex::new(data),
35 + // _dev: unsafe { bindings::alloc_disk(1) }?, // Defer Gendisk
36 ~ }, /* Flags */);
|
error: aborting due to 13 previous errors; 2 warnings emitted
Some errors have detailed explanations: E0050, E0061, E0107, E0425.
For more information about an error, try `rustc --explain E0050`.
make[4]: *** [/usr/lib/modules/6.14.6-arch1-1/build/scripts/Makefile.build:263: hello_blk.o] Error 1
make[3]: *** [/usr/lib/modules/6.14.6-arch1-1/build/Makefile:1997: .] Error 2
make[2]: *** [/usr/lib/modules/6.14.6-arch1-1/build/Makefile:251: __sub-make] Error 2
make[2]: Leaving directory '/home/meh'
make[1]: *** [Makefile:251: __sub-make] Error 2
make[1]: Leaving directory '/usr/lib/modules/6.14.6-arch1-1/build'
make: *** [Makefile:26: all] Error 2
```
```bash
history
docker run -it --rm docker.io/library/archlinux:base-devel
echo podman run -dt docker.io/library/archlinux:base-devel
docker ps -a
docker ps
podman ps -a
podman rm $(podman ps -a | cut -d' ' -f1 | rg -v CONTAINER)
podman rm $(podman ps -a | cut -d' ' -f1)
podman rm 8d1914525923
podman ps
podman ls
podman attach 8f27948d2831
podman exec 8f27948d2831 sh
podman exec 8f27948d2831 bash
podman run -dt docker.io/library/archlinux:base-devel
podman run docker.io/library/archlinux:base-devel
podman run docker.io/library/archlinux:base-devel bash
podman image ls
podman images ls
podman
podman run archlinux:base-devel bash
podman run archlinux:base-devel
podman run archlinux bash
podman start archlinux
podman exec archlinux bash
podman exec archlinux
podman exec archlinux:base-devel
podman exec docker.io/archlinux:base-devel
podman rmi 1c8174adfffd
podman ils
podman pull docker.io/archlinux:base-devel
podman pull docker.io/archlinux:base-devel-latest
podman pull docker.io/archlinux
cat /etc/subuid
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 hak8or
usermod --add-subuids 100000-165535 --add-subgids 100000-165535 hak8or
make
rustup component add rust-src
make clean
code .
cd gemini_2.5pro_preview_googlecom/
mv gemini_2.5pro_googlecom gemini_2.5pro_preview_googlecom/
cd ..
rustup show
rustup --help
vim Makefile
vim Mak
rm Makefile
ls
cd gemini_2.5pro_googlecom/
mv gemini_2.5pro_preview0506_api/hello_blk.rs gemini_2.5pro_googlecom/
mv gemini_2.5pro_preview0506_api/Makefile gemini_2.5pro_googlecom/
tree .
ll
cd rust_blockdev_kerneldriver/
mv gemini_2.5pro_preview0506_api/ rust_blockdev_kerneldriver/
tree gemini_2.5pro_preview0506_api/
fd Makefile
uname -m
uname -a
uname -m | sed s/x86_64/x86_64/
vim hello_blk.rs
cat reply0.md
vim reply0.md
vim reply0.,d
cd gemini_2.5pro_preview0506_api/
mkdir gemini_2.5pro_preview0506_api
mkdir gemini_2.5pro_googlecom
vim readme.md
vim README.md
cat ../prompt.txt
cargo clean
git lg -n1
cd rust-out-of-tree-module/
git clone https://github.com/Rust-for-Linux/rust-out-of-tree-module
code readme.md
touch readme.md
cargo build
cargo pull
cargo update
touch .cargo/config.toml
mkdir .cargo
touch x86_64-linux-kernel.json
touch src/lib.rs
mkdir src
touch Cargo.toml
cd claude_opus_4-0/
mv claude_opus_4-0.md claude_opus_4-0/reply0.md
mkdir claude_opus_4-0
bat claude_opus_4-0.md
vim claude_opus_4-0.md
cat prompt.txt
vim prompt.txt
mkdir rust_blockdev_kerneldriver
cd llm_benchmarks/
mkdir llm_benchmarks
cd ~/code/
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,106 +0,0 @@
+++
authors = ["Scrooge McDuck", "Darkwing Duck"]
title = "The Quill of Duck"
description = "This is a Duckquill post example, this post has nothing but a bunch of text and random formatting, acting like a demo."
date = 2023-08-31
updated = "2024-06-21"
[taxonomies]
tags = ["Demo", "Test"]
[extra]
banner = "banner.webp"
toc = true
toc_inline = true
toc_ordered = true
trigger = "This page contains blackjack and hookers, and bad jokes such as this one."
disclaimer = """
- All tricks in this page are performed by the lab boys, don't try this at home.
- Don't expose yourself to 4000° kelvin.
- Don't take party escort submission position.
- Don't interact with asbestos and moon rocks.
"""
[extra.comments]
# Long thread with image
#
# host = "mastodon.social"
# user = "brownpau"
# id = "104529877688537579"
#
# Thread with multiple images per post
#
# host = "mastodon.blaede.family"
# user = "cassidy"
# id = "112774854109302186"
#
# Thread with preview cards
# host = "mastodon.blaede.family"
# user = "cassidy"
# id = "110669429936617026"
#
# Post on GoToSocial
#
# host = "alpha.polymaths.social"
# user = "orbitalmartian"
# id = "01J7ETKJ19FGBDQGS1ZWZ3KEPP"
#
# Post on Sharkey
#
# host = "is-a.wyvern.rip"
# user = "volpeon"
# id = "9qy755nsnu2c0hbc"
host = "toot.community"
user = "sungsphinx"
id = "111789185826519979"
+++
{% alert(tip=true) %}
Recommended banner dimensions are 2:1 aspect ratio and 1920x960 resolution.
Other sizes will also work, but will be cut off at the bottom/won't be high enough.
{% end %}
## The what?
This is a Duckquill post example, this post has nothing but a bunch of text and random formatting, acting like a demo.
## Some info
Well, open this file and look at how it's made, it includes all the essential front matter stuff.
Now to the _Stanley!_
## The _Stanley_!
This is the story of a man named _Stanley_.
_Stanley_ worked for a company in a big building where he was Employee `#427`.
<figure>
![The Office](the-office.webp)
<figcaption>The Office where Stanley works, it has yellow floor and beige walls</figcaption>
</figure>
Employee `#427`'s job was simple: he sat at his desk in Room `427` and he pushed buttons on a keyboard.
Orders came to him through a monitor on his desk telling him what buttons to push, how long to push them, and in what order.
This is what Employee `#427` did every day of every month of every year, and although others may have considered it soul rending,
_Stanley_ relished every moment that the orders came in, as though he had been made exactly for this job.
And _Stanley_ was happy.
And then one day, something very peculiar happened.
Something that would forever change _Stanley_;
Something he would never quite forget.
He had been at his desk for nearly an hour when he had realized not one single order had arrived on the monitor for him to follow.
No one had shown up to give him instructions, call a meeting, or even say 'hi'. Never in all his years at the company had this happened, this complete isolation.
Something was very clearly wrong. Shocked, frozen solid, _Stanley_ found himself unable to move for the longest time.
But as he came to his wits and regained his senses, he got up from his desk and stepped out of his office.
All of his co-workers were gone. What could it mean? Stanley decided to go to the meeting room; perhaps he had simply missed a memo.

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,43 +0,0 @@
#color-picker-container {
-webkit-backdrop-filter: var(--blur);
position: fixed;
transform: translateX(calc(-100% + 1rem));
z-index: 1;
backdrop-filter: var(--blur);
transition: var(--transition);
inset-block-end: 1rem;
inset-inline-start: 0;
box-shadow: var(--edge-highlight), var(--shadow-glass);
border-start-end-radius: var(--rounded-corner);
border-end-end-radius: var(--rounded-corner);
background-color: var(--glass-bg);
padding: 0.5rem;
}
:root[dir*="rtl"] #color-picker-container {
transform: translateX(calc(100% - 1rem));
}
:root[dir*="rtl"] #color-picker-container:hover {
transform: none;
}
#color-picker-container:hover {
transform: none;
}
#color-picker-container > small {
display: block;
margin-block-end: 0.5rem;
font-weight: bold;
}
#color-picker-container label {
margin-inline-end: 0.25rem;
color: var(--fg-muted-5);
}
#color-picker-light,
#color-picker-dark {
margin-inline-end: 0.25rem;
}

View File

@ -1,56 +0,0 @@
// Slider
var slider = document.getElementById("range");
var output = document.getElementById("range-value");
output.innerHTML = slider.value;
slider.oninput = function() {
output.innerHTML = this.value;
}
// Spaceship control center
const colorPickerLight = document.querySelector("#color-picker-light");
const colorPickerDark = document.querySelector("#color-picker-dark");
let accentColorLight = colorPickerLight.value;
let accentColorDark = colorPickerDark.value;
colorPickerLight.addEventListener("input", updateAccentColorLight);
colorPickerDark.addEventListener("input", updateAccentColorDark);
function updateAccentColorLight() {
accentColorLight = colorPickerLight.value;
updateStyles();
}
function updateAccentColorDark() {
accentColorDark = colorPickerDark.value;
updateStyles();
}
function updateStyles() {
let styleElement = document.getElementById("dynamic-styles");
if (!styleElement) {
styleElement = document.createElement("style");
styleElement.id = "dynamic-styles";
document.head.appendChild(styleElement);
}
let styles = `
:root {
--accent-color: ${accentColorLight};
}
[data-theme="dark"] {
--accent-color: ${accentColorDark};
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--accent-color: ${accentColorDark};
}
}
`;
styleElement.textContent = styles;
}
updateStyles();

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,677 +0,0 @@
+++
title = "Demo Page"
[extra]
go_to_top = true
styles = ["demo/demo.css"]
scripts = ["demo/demo.js"]
katex = true
archive = "This page is in fact not archived. It is only here to demonstrate the archival statement."
trigger = "This page contains blackjack and hookers, and bad jokes such as this one."
disclaimer = """
- All tricks in this page are performed by the lab boys, don't try this at home.
- Don't expose yourself to 4000° kelvin.
- Don't take party escort submission position.
- Don't interact with asbestos and moon rocks.
"""
+++
## Markdown
Text can be **bold**, *italic*, ~~strikethrough~~, and ***~~all at the same time~~***.
[Link to another page](@/demo/page.md).
There should be whitespace between paragraphs[^1].
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
This is a normal paragraph[^2] following a header.
😭😂🥺🤣❤️✨🙏😍🥰😊
```
Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this.
```
> "Original content is original only for a few seconds before getting old"
> > Rule #21 of the internet
- Item 1
- Item 2
- Item 2.1
- Item 2.2
- Item 3
- `Item 4`
1. Perform step #1
2. Proceed to step #2
3. Conclude with step #3
- [ ] Milk
- [x] Eggs
- [x] Flour
- [ ] Coffee
- [x] Combustible lemons
[![Male mallard duck](https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Male_mallard_duck_2.jpg/800px-Male_mallard_duck_2.jpg)](https://upload.wikimedia.org/wikipedia/commons/2/24/Male_mallard_duck_2.jpg)
| Mare | Rating | Additional info |
| :----------- | :---------------- | :--------------- |
| Fluttershy | Best pone | Shy and adorable |
| Apple Jack | Good pone | Honest and nice |
| Pinkie Pie | Fun pone | Parties and ADHD |
| Twilight | Main pone | Neeerd |
| Rainbow Dash | Yes | Looks badass |
| Rarity | Fancy pone | Generous |
| Derpy Hooves | *M u f f i n s* | [REDACTED] |
```rust
let highlight = true;
```
```scss, linenos, linenostart=10, hl_lines=3-4 8-9, hide_lines=2 7
pre mark {
// If you want your highlights to take the full width
display: block;
color: currentcolor;
}
pre table td:nth-of-type(1) {
// Select a colour matching your theme
color: #6b6b6b;
font-style: italic;
}
```
***
## Extra
### KaTeX
Duckquill can render LaTeX using the [KaTeX](https://katex.org) library. It can be enabled using the `extra.katex` config variable.
```latex
$$\relax f(x) = \int_{-\infty}^\infty\hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$$
```
$$\relax f(x) = \int_{-\infty}^\infty\hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$$
```latex
$\relax f(x) = \int_{-\infty}^\infty\hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$
```
$\relax f(x) = \int_{-\infty}^\infty\hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi$
### Shortcodes
Duckquill provides a few useful [shortcodes](https://www.getzola.org/documentation/content/shortcodes/) that simplify some tasks. They can be used on all pages.
#### Alerts
[GitHub-style](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts) alerts. Simply wrap the text of desired alert inside the shortcode to get the desired look.
Available alert types:
- `note`: Useful information that users should know, even when skimming content.
- `tip`: Helpful advice for doing things better or more easily.
- `important`: Key information users need to know to achieve their goal.
- `warning`: Urgent info that needs immediate user attention to avoid problems.
- `caution`: Advises about risks or negative outcomes of certain actions.
```jinja2
{%/* alert(note=true) */%}
-> Alert text <-
{%/* end */%}
```
{% alert(note=true) %}
Useful information that users should know, even when skimming content.
{% end %}
{% alert(tip=true) %}
Helpful advice for doing things better or more easily.
{% end %}
{% alert(important=true) %}
Key information users need to know to achieve their goal.
{% end %}
{% alert(warning=true) %}
Urgent info that needs immediate user attention to avoid problems.
{% end %}
{% alert(caution=true) %}
Advises about risks or negative outcomes of certain actions.
{% end %}
#### Images and Videos
By default images and videos come with some generic styling, such as rounded corners and shadow. To fine-tune these, you can use shortcodes with different variable combinations.
Available variables are:
- `url`: URL to an image.
- `url_min`: URL to compressed version of an image, original can be opened by clicking on the image.
- `alt`: Alt text, same as if the text were inside square brackets in Markdown.
- `full`: Forces image to be full-width.
- `full_bleed`: Forces image to fill all the available screen width. Removes shadow, rounded corners and zoom on hover.
- `start`: Float image to the start of paragraph and scale it down.
- `end`: Float image to the end of paragraph and scale it down.
- `pixels`: Uses nearest neighbor algorithm for scaling, useful for keeping pixel-art sharp.
- `transparent`: Removes rounded corners and shadow, useful for images with transparency.
- `no_hover`: Removes zoom on hover.
- `spoiler`: Blurs image until hovered over/pressed on, useful for plot rich game screenshots.
- `spoiler` with `solid`: Ditto, but makes the image completely hidden.
```jinja2
{{/* image(url="image.png", alt="This is an image", no_hover=true) */}}
```
<figure>
{{ image(url="https://i1.theportalwiki.net/img/2/23/Ashpd_blueprint.jpg", alt="Portal Gun blueprint", no_hover=true) }}
<figcaption>Image with an alt text and without zoom on hover</figcaption>
</figure>
<figure>
{{ image(url="https://upload.wikimedia.org/wikipedia/commons/b/b4/JPEG_example_JPG_RIP_100.jpg", url_min="https://upload.wikimedia.org/wikipedia/commons/3/38/JPEG_example_JPG_RIP_010.jpg", alt="The gravestone of J.P.G.", no_hover=true) }}
<figcaption>Image with compressed version, an alt text, and without zoom on hover</figcaption>
</figure>
<figure>
{{ image(url="https://files.catbox.moe/lk7nee.jpg", alt="Portal Gun blueprint", spoiler=true) }}
<figcaption>Image with an alt text, hidden behind a spoiler</figcaption>
</figure>
Alternatively, you can append the following URL anchors. It can be more handy in some cases, e.g. such images will render normally in any Markdown editor, opposed to the Zola shortcodes.
- `#full`: Forces image to be full-width.
- `#full-bleed`: Forces image to fill all the available screen width. Removes shadow, rounded corners and zoom on hover.
- `#start`: Float image to the start of paragraph and scale it down.
- `#end`: Float image to the end of paragraph and scale it down.
- `#pixels`: Uses nearest neighbor algorithm for scaling, useful for keeping pixel-art sharp.
- `#transparent`: Removes rounded corners and shadow, useful for images with transparency.
- `#no-hover`: Removes zoom on hover.
- `#spoiler`: Blurs image until hovered over/pressed on, useful for plot rich game screenshots.
- `#spoiler` with `#solid`: Ditto, but makes the image completely hidden.
<br />
<figure>
[![Toolbx header image](https://containertoolbx.org/assets/toolbx.gif#full#pixels#transparent#no-hover)](https://containertoolbx.org)
<figcaption>Full-width image with an alt text, pixel-art rendering, no shadow and rounded corners, and no zoom on hover</figcaption>
</figure>
<br />
![1966 Ford Mustang coupe white](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/1966_Ford_Mustang_coupe_white_003.jpg/320px-1966_Ford_Mustang_coupe_white_003.jpg#start)
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim aeque doleamus animo, cum corpore dolemus, fieri tamen permagna accessio potest, si aliquod aeternum et infinitum impendere malum nobis opinemur.
\
[![Picture of the magnificent lej da staz just before sunrise in october](https://images.unsplash.com/photo-1635410773896-da585e1fe138?q=80&w=2063&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D#full-bleed)](https://unsplash.com/photos/a-mountain-lake-surrounded-by-trees-and-snow-CqTOTZh5vrs)
For videos it's all the same except for a few differences: `no_hover` and `url_min` variables are not available.
Additionally, the following [attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#attributes) can be set:
- `autoplay`: Start playing the video automatically.
- `controls`: Display video controls such as volume control, seeking and pause/resume.
- `loop`: Play the video again once it ends.
- `muted`: Turn off the audio by default.
- `playsinline`: Prevent the video from playing in fullscreen by default (depends on the browser).
```jinja2
{{/* video(url="video.webm", alt="This is a video", controls=true) */}}
```
<figure>
{{ video(url="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm", alt="Red flower wakes up", controls=true) }}
<figcaption>WebM video example from MDN</figcaption>
</figure>
<figure>
{{ video(url="https://upload.wikimedia.org/wikipedia/commons/transcoded/0/0e/Duckling_preening_%2881313%29.webm/Duckling_preening_%2881313%29.webm.720p.vp9.webm", alt="Duckling preening", full_bleed=true, controls=true) }}
<figcaption>Duckling preening</figcaption>
</figure>
#### CRT
Alright, this one doesn't simplify anything, it just adds a CRT-like effect around Markdown code blocks.
```jinja2
{%/* crt() */%}
-> Markdown code block <-
{%/* end */%}
```
{% crt() %}
```
_____________________________________________
|.'', Public_Library_Halls ,''.|
|.'.'', ,''.'.|
|.'.'.'', ,''.'.'.|
|.'.'.'.'', ,''.'.'.'.|
|.'.'.'.'.| |.'.'.'.'.|
|.'.'.'.'.|===; ;===|.'.'.'.'.|
|.'.'.'.'.|:::|', ,'|:::|.'.'.'.'.|
|.'.'.'.'.|---|'.|, _______ ,|.'|---|.'.'.'.'.|
|.'.'.'.'.|:::|'.|'|???????|'|.'|:::|.'.'.'.'.|
|,',',',',|---|',|'|???????|'|,'|---|,',',',',|
|.'.'.'.'.|:::|'.|'|???????|'|.'|:::|.'.'.'.'.|
|.'.'.'.'.|---|',' /%%%\ ','|---|.'.'.'.'.|
|.'.'.'.'.|===:' /%%%%%\ ':===|.'.'.'.'.|
|.'.'.'.'.|%%%%%%%%%%%%%%%%%%%%%%%%%|.'.'.'.'.|
|.'.'.'.',' /%%%%%%%%%\ ','.'.'.'.|
|.'.'.',' /%%%%%%%%%%%\ ','.'.'.|
|.'.',' /%%%%%%%%%%%%%\ ','.'.|
|.',' /%%%%%%%%%%%%%%%\ ','.|
|;____________/%%%%%Spicer%%%%%%\____________;|
```
{% end %}
There's also a `cursor` class that you can add to a span with e.g. `` character to simulate the terminal cursor. It doesn't work from inside Markdown code blocks though.
#### YouTube
Allows to embed a YouTube video using youtube-nocookie.
Available variables are:
- `autoplay`: Whether the video should autoplay.
- `start`: On which second video should start.
```jinja2
{{/* youtube(id="0Da8ZhKcNKQ") */}}
```
{{ youtube(id="0Da8ZhKcNKQ") }}
#### Vimeo
Allows to embed a Vimeo video.
Available variables are:
- `autoplay`: Whether the video should autoplay.
```jinja2
{{/* vimeo(id="869483483") */}}
```
{{ vimeo(id="869483483") }}
#### Mastodon
Allows to embed a Mastodon post.
Available variables are:
- `host`: The instance on which the post resides. If not set, it will fallback to the one set in the `[extra.comments]` section of `config.toml`.
- `user`: The poster. If not set, it will fallback to the one set in the `[extra.comments]` section of `config.toml`.
- `id`: The ID of the post, usually at the end of the URL.
```jinja2
{{/* mastodon(host="toot.community", user="sungsphinx", id="111789185826519979") */}}
```
{{ mastodon(host="toot.community", user="sungsphinx", id="111789185826519979") }}
### Description List (`<dl>`)
```html
<dl>
<dt>Something</dt>
<dd>And its description</dd>
</dl>
```
<dl>
<dt>Name</dt>
<dd>Godzilla</dd>
<dt>Born</dt>
<dd>1952</dd>
<dt>Birthplace</dt>
<dd>Japan</dd>
<dt>Color</dt>
<dd>Green</dd>
</dl>
### Form Input (`<input>`)
```html
<input type="checkbox" />
<label>Checkbox</label>
```
<ul>
<li>
<input type="checkbox" />
<label>&nbsp;Milk</label>
</li>
<li>
<input type="checkbox" />
<label>&nbsp;Eggs</label>
</li>
<li>
<input type="checkbox" />
<label>&nbsp;Flour</label>
</li>
<li>
<input type="checkbox" checked />
<label>&nbsp;Coffee</label>
</li>
<li>
<input type="checkbox" disabled />
<label>&nbsp;Combustible lemons</label>
</li>
</ul>
With `switch` class:
```html
<input class="switch" type="checkbox" />
<label>Checkbox</label>
```
<ul>
<li>
<input class="switch" type="checkbox" />
<label>&nbsp;Milk</label>
</li>
<li>
<input class="switch" type="checkbox" />
<label>&nbsp;Eggs</label>
</li>
<li>
<input class="switch" type="checkbox" />
<label>&nbsp;Flour</label>
</li>
<li>
<input class="switch" type="checkbox" checked />
<label>&nbsp;Coffee</label>
</li>
<li>
<input class="switch" type="checkbox" disabled />
<label>&nbsp;Combustible lemons</label>
</li>
</ul>
With `switch` and `big` classes:
```html
<input class="switch big" type="checkbox" />
<label>Checkbox</label>
```
<ul>
<li>
<input class="switch big" type="checkbox" />
<label>&nbsp;Milk</label>
</li>
<li>
<input class="switch big" type="checkbox" />
<label>&nbsp;Eggs</label>
</li>
<li>
<input class="switch big" type="checkbox" />
<label>&nbsp;Flour</label>
</li>
<li>
<input class="switch big" type="checkbox" checked />
<label>&nbsp;Coffee</label>
</li>
<li>
<input class="switch big" type="checkbox" disabled />
<label>&nbsp;Combustible lemons</label>
</li>
</ul>
With `radio` type:
```html
<input type="radio" name="test" />
<label>Radio</label>
```
<ul>
<li>
<input type="radio" name="test" />
<label>&nbsp;Milk</label>
</li>
<li>
<input type="radio" name="test" />
<label>&nbsp;Eggs</label>
</li>
<li>
<input type="radio" name="test" />
<label>&nbsp;Flour</label>
</li>
<li>
<input type="radio" name="test" checked />
<label>&nbsp;Coffee</label>
</li>
<li>
<input type="radio" name="test" disabled />
<label>&nbsp;Combustible lemons</label>
</li>
</ul>
With `color` type:
```html
<label>Color:</label>
<input type="color" value="#000000" />
```
<label for="color">Color:</label>
<input id="color" type="color" value="#b57edc" />
<label for="color">Disabled:</label>
<input id="color" type="color" value="#b57edc" disabled />
With `range` type:
```html
<input type="range" max="100" value="33">
```
<input type="range" max="100" value="33" id="range">
<!-- For the demo purposes only -->
<small id="range-value"></small>
<!-- End -->
### Figure Captions (`<figcaption>`)
```markdown
<figure>
-> Whatever content <-
<figcaption>Caption of content above</figcaption>
</figure>
```
<figure>
![The Office](https://i.ibb.co/MPDJRsT/ImMAXM3.png)
<figcaption>The Office where Stanley works, it has yellow floor and beige walls</figcaption>
</figure>
### Accordion (`<details>`)
```markdown
<details>
<summary>Accordion title</summary>
-> Contents here <-
</details>
```
<details>
<summary>Reveal accordion</summary>
Get it? I know, it's an awful pun.
![Piano Accordion](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/PianoAccordeon.jpg/916px-PianoAccordeon.jpg#transparent#no-hover)
</details>
### Side Comment (`<small>`)
```html
<small>Small, cute text that doesn't catch attention.</small>
```
<small>Small, cute text that doesn't catch attention.</small>
### Abbreviation (`<abbr>`)
```html
<abbr title="American Standard Code for Information Interchange">ASCII</abbr>
```
The <abbr title="American Standard Code for Information Interchange">ASCII</abbr> art is awesome!
### Aside (`<aside>`)
```html
<aside>
-> Contents here <-
</aside>
```
<aside>
Quill and a parchment
<img class="transparent no-hover" style="margin-block-end: 0; border-radius: 0;" alt="Quill and a parchment" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/%D7%A7%D7%9C%D7%A3%2C_%D7%A0%D7%95%D7%A6%D7%94_%D7%95%D7%93%D7%99%D7%95.jpg/326px-%D7%A7%D7%9C%D7%A3%2C_%D7%A0%D7%95%D7%A6%D7%94_%D7%95%D7%93%D7%99%D7%95.jpg" />
</aside>
A quill is a writing tool made from a moulted flight feather (preferably a primary wing-feather) of a large bird. Quills were used for writing with ink before the invention of the dip pen, the metal-nibbed pen, the fountain pen, and, eventually, the ballpoint pen.
As with the earlier reed pen (and later dip pen), a quill has no internal ink reservoir and therefore needs to periodically be dipped into an inkwell during writing. The hand-cut goose quill is rarely used as a calligraphy tool anymore because many papers are now derived from wood pulp and would quickly wear a quill down. However it is still the tool of choice for a few scribes who have noted that quills provide an unmatched sharp stroke as well as greater flexibility than a steel pen.
### Keyboard Input (`<kbd>`)
```html
<kbd>⌘ Command</kbd>.
```
To switch the keyboard layout, press <kbd>⌘ Super</kbd> + <kbd>Space</kbd>.
### Mark Text (`<mark>`)
```html
<mark>Marked text</mark>
```
You know what? I'm gonna say some <mark>very important</mark> stuff, so <mark>important</mark> that even **bold** is not enough.
### Deleted and Inserted Text (`<del>` and `<ins>`)
```html
<del>Something deleted</del> <ins>Something added</ins>
```
<del>Text deleted</del> <ins>Text added</ins>
### Progress Indicator (`<progress>`)
```html
<progress></progress>
<progress value="33" max="100"></progress>
```
<progress></progress>
<progress value="33" max="100"></progress>
### Sample Output (`<samp>`)
```html
<samp>Sample Output</samp>
```
<samp>Sample Output</samp>
### Inline Quotation (`<q>`)
```html
<q>Someone said something</q>
```
Blah blah <q>Inline Quote</q> hmm.
### Unarticulated Annotation (`<u>`)
```html
<u>Gmarrar mitsakes</u>
```
<u>Yeet</u> the <u>sus</u> drip while <u>vibing</u> with the <u>TikTok</u> <u>fam</u> on a cap-free boomerang.
### External Links
```html
<a class="external" href="https://example.org">External link</a>
```
<a class="external" href="https://example.org">Link to site</a>
### Spoilers
```html
<span class="spoiler">Some spoiler</span>
```
You know, <span class="spoiler">Duckquill is a pretty dumb name.</span> I know, crazy.
With `solid` class:
```html
<span class="spoiler solid">Some spoiler</span>
```
You know, <span class="spoiler solid">Duckquill is a pretty dumb name.</span> I know, crazy.
### Buttons Dialog
```html.j2
<div class="buttons">
<a href="#top">Go to Top</a>
<a class="colored external" href="https://example.org">Example</a>
</div>
```
<div class="buttons">
<a href="#top">Go to Top</a>
<a class="colored external" href="https://example.org">Example</a>
</div>
With `centered` and `big` classes:
```html.j2
<div class="buttons centered">
<button class="big colored">Do Something…</button>
</div>
```
<div class="buttons centered">
<button class="big colored">Do Something…</button>
</div>
[^1]: Footnote
[^2]: [Footnote (link)](https://example.org)
<!-- For the demo purposes only -->
<div id="color-picker-container">
<small>Accent color:</small>
<input id="color-picker-light" type="color" value="#ff7800" />
<label for="color-picker-light">Light theme</label>
<br />
<input id="color-picker-dark" type="color" value="#ffa348" />
<label for="color-picker-dark">Dark theme</label>
</div>
<!-- End -->

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1,11 +0,0 @@
+++
title = "Cake Party"
+++
<img class="transparent no-hover" style="width: min(calc(var(--container-width) / 2), 100%)" src="https://i1.theportalwiki.net/img/0/0a/Portal_Cake.png"/>
Sadly, the cake is a _lie_
<div class="buttons">
<a href="../">Go Crying</a>
</div>

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
page.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1,116 +0,0 @@
+++
title = "Mods"
[extra]
toc = true
toc_sidebar = true
+++
Mods enhance/change some Duckquill visuals. They are updated alongside Duckquill to ensure that you don't need to manually update them every release.
To enable these mods, you need to paste provided Sass to [appropriate file](@/_index.md#custom-styles), e.g `sass/mods.scss` under your website, then enable it in `config.toml`:
```toml
[extra]
styles = ["mods.css"]
```
## Background Image
Want to set some nice image as a background? We got you covered:
![background image](https://files.catbox.moe/no8vfc.png)
```scss
body {
background-image: var(--bg-overlay), url("https://images.unsplash.com/photo-1523712999610-f77fbcfc3843");
background-position: center;
background-size: cover;
background-attachment: fixed;
}
```
Most of the time contrast should be okay, but what if it's not? Simply adjust the opacity of `--bg-overlay` based on your needs:
```scss
@import "../themes/duckquill/sass/_variables.scss";
@include theme-variables using ($theme) {
@if $theme == "dark" {
--bg-overlay: linear-gradient(rgb(0 0 0 / 0.9), rgb(0 0 0 / 0.9));
}
@else {
--bg-overlay: linear-gradient(rgb(255 255 255 / 0.8), rgb(255 255 255 / 0.8));
}
}
```
## Classic Article List
Prefer the less fancy look of the article list used in Duckquill some time ago (to some extent)? It can be done with the `classic-article-list` mod:
![classic article list](https://files.catbox.moe/yf5feo.png)
```scss
@use "../themes/duckquill/sass/mods/classic-article-list";
```
## Classic Navbar
You can make navbar have more traditional look by using the `classic-nav` mod:
![classic navabr](https://files.catbox.moe/ga4dmv.png)
```scss
@use "../themes/duckquill/sass/mods/classic-nav";
```
Or you can make it sticked to top but not full-width with the `sticked-nav` mod:
{% alert(note=true) %}
Not compatible with the `classic-nav` mod.
{% end %}
![sticked navabr](https://files.catbox.moe/bfu3p7.png)
```scss
@use "../themes/duckquill/sass/mods/sticked-nav";
```
## Classic Strikethrough
The default strikethrough style is too much? It can be fixed using the `classic-del` mod:
![plain strikethrough](https://files.catbox.moe/y2tbwm.png)
```scss
@use "../themes/duckquill/sass/mods/classic-del";
```
## Modern Headings
Default headings might not fit your taste, that's understandable. They can be ~~made boring~~ fixed with the `modern-headings` mod:
![boring headings](https://files.catbox.moe/6ok740.png)
```scss
@use "../themes/duckquill/sass/mods/modern-headings";
```
## Modern Horizontal Rule
Don't like that fancy horizontal rule? Make it more modern with the `modern-hr` mod:
![modern horizontal rule](https://files.catbox.moe/qyqzoy.png)
```scss
@use "../themes/duckquill/sass/mods/modern-hr";
```
## No Edge Highlight
Hate the skeuomorphic edge highlight on all semi-transparent elements? Let's get rid of it using the `no-edge-highlight` mod:
```scss
@use "../themes/duckquill/sass/mods/no-edge-highlight";
```

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

View File

@ -1 +0,0 @@
index.md

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB