summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustZvan <justzvan@justzvan.xyz>2026-03-24 20:14:42 +0100
committerJustZvan <justzvan@justzvan.xyz>2026-03-24 20:14:42 +0100
commita60a600522b9c638cf06fc484d80209dfb7d5c20 (patch)
tree9801ae967ac65724333abf15a35d445a05167095
feat: initial commit
-rw-r--r--.gitignore13
-rw-r--r--archetypes/default.md5
-rw-r--r--content/JZSCL.md142
-rw-r--r--content/_index.md12
-rw-r--r--content/posts/systemd be gone.md35
-rw-r--r--hugo.toml4
-rw-r--r--themes/JustZvan/archetypes/default.md5
-rw-r--r--themes/JustZvan/assets/css/main.css206
-rw-r--r--themes/JustZvan/assets/js/main.js1
-rw-r--r--themes/JustZvan/hugo.toml22
-rw-r--r--themes/JustZvan/layouts/_partials/footer.html1
-rw-r--r--themes/JustZvan/layouts/_partials/head.html5
-rw-r--r--themes/JustZvan/layouts/_partials/head/css.html9
-rw-r--r--themes/JustZvan/layouts/_partials/head/js.html16
-rw-r--r--themes/JustZvan/layouts/_partials/header.html1
-rw-r--r--themes/JustZvan/layouts/_partials/menu.html51
-rw-r--r--themes/JustZvan/layouts/_partials/terms.html23
-rw-r--r--themes/JustZvan/layouts/baseof.html21
-rw-r--r--themes/JustZvan/layouts/home.html17
-rw-r--r--themes/JustZvan/layouts/page.html18
-rw-r--r--themes/JustZvan/layouts/posts/single.html11
-rw-r--r--themes/JustZvan/layouts/section.html26
-rw-r--r--themes/JustZvan/layouts/taxonomy.html7
-rw-r--r--themes/JustZvan/layouts/term.html26
-rw-r--r--themes/JustZvan/static/favicon.icobin0 -> 15406 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Bold.woff2bin0 -> 94588 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-BoldItalic.woff2bin0 -> 98152 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-ExtraBold.woff2bin0 -> 93692 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-ExtraBoldItalic.woff2bin0 -> 96864 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-ExtraLight.woff2bin0 -> 92712 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-ExtraLightItalic.woff2bin0 -> 95816 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Italic.woff2bin0 -> 95864 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Light.woff2bin0 -> 93856 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-LightItalic.woff2bin0 -> 97280 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Medium.woff2bin0 -> 93824 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-MediumItalic.woff2bin0 -> 97808 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Regular.woff2bin0 -> 92164 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-SemiBold.woff2bin0 -> 94472 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-SemiBoldItalic.woff2bin0 -> 98124 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-Thin.woff2bin0 -> 90612 bytes
-rw-r--r--themes/JustZvan/static/fonts/JetBrainsMono-ThinItalic.woff2bin0 -> 94316 bytes
-rw-r--r--themes/JustZvan/static/fonts/Pencil Child.ttfbin0 -> 32556 bytes
42 files changed, 677 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7b62a71
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+# Generated files by hugo
+/public/
+/resources/_gen/
+/assets/jsconfig.json
+hugo_stats.json
+
+# Executable may be added to repository
+hugo.exe
+hugo.darwin
+hugo.linux
+
+# Temporary lock file while building
+/.hugo_build.lock \ No newline at end of file
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..25b6752
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+date = '{{ .Date }}'
+draft = true
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
++++
diff --git a/content/JZSCL.md b/content/JZSCL.md
new file mode 100644
index 0000000..aec151a
--- /dev/null
+++ b/content/JZSCL.md
@@ -0,0 +1,142 @@
+---
+title: 'JustZvan Standard Creative License'
+---
+
+*Based on Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0), with an additional No Artificial Intelligence clause.*
+
+---
+
+## Preamble
+
+This license governs the use of all material published under it. By exercising any of the rights granted below, you accept and agree to be bound by these terms. If you do not agree, you may not use the material.
+
+---
+
+## Section 1 — Definitions
+
+**a. Adapted Material** means material derived from or based upon the Licensed Material in which it is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under copyright law.
+
+**b. Adapter's License** means the license you apply to your contributions to Adapted Material, which must be this license or a compatible BY-NC-SA license.
+
+**c. Copyright and Similar Rights** means copyright and related rights including performance, broadcast, sound recording, and Sui Generis Database Rights.
+
+**d. Licensed Material** means the content to which the Licensor has applied this license.
+
+**e. Licensed Rights** means the rights granted to you under this license, limited to Copyright and Similar Rights that apply to your use and that the Licensor has authority to license.
+
+**f. Licensor** means JustZvan, the individual granting rights under this license.
+
+**g. NonCommercial** means not primarily intended for or directed toward commercial advantage or monetary compensation.
+
+**h. Share** means to provide material to the public by any means — reproduction, distribution, public display, communication, importation, or making available online.
+
+**i. You** means the individual or entity exercising the Licensed Rights under this license.
+
+---
+
+## Section 2 — Scope
+
+### a. License Grant
+
+Subject to the terms of this license, the Licensor grants you a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to:
+
+1. Reproduce and Share the Licensed Material, in whole or in part, for **NonCommercial purposes only**; and
+2. Produce, reproduce, and Share **Adapted Material** for NonCommercial purposes only, provided you comply with Section 3(b).
+
+### b. Exceptions and Limitations
+
+Where fair use, fair dealing, or other exceptions to copyright apply to your use, this license does not apply, and you do not need to comply with its terms.
+
+### c. Technical Modifications
+
+The Licensor authorizes you to exercise the Licensed Rights in all media and formats, and to make technical modifications necessary to do so. Technical modifications alone do not produce Adapted Material.
+
+### d. No Endorsement
+
+Nothing in this license constitutes permission to assert that your use is connected with, sponsored by, or endorsed by the Licensor.
+
+---
+
+## Section 3 — License Conditions
+
+### a. Attribution (BY)
+
+If you Share the Licensed Material (including in modified form), you must:
+
+1. Credit the creator (JustZvan) in any reasonable manner;
+2. Provide a link to the original material;
+3. Include a copyright notice;
+4. Note whether changes were made, and retain any indication of previous modifications;
+5. Include a reference to this license (name + URI or link);
+6. Not imply that the Licensor endorses you or your use.
+
+You may satisfy these conditions in any reasonable manner appropriate to the medium and context.
+
+### b. ShareAlike (SA)
+
+If you Share Adapted Material you produce, you must apply **this license** (JZSCL 1.0) or a Creative Commons BY-NC-SA 4.0 Compatible License to your contributions. You may not impose additional restrictions on recipients of Adapted Material beyond those in this license.
+
+### c. No Commercial Use (NC)
+
+You may not use the Licensed Material, in whole or in part, for commercial purposes without explicit prior written permission from the Licensor. This includes but is not limited to: selling, licensing for profit, using in commercial advertising, or embedding in paid products or services.
+
+### d. No Artificial Intelligence (No-AI)
+
+You may not, without explicit prior written permission from the Licensor:
+
+1. **Scrape, crawl, copy, or collect** the Licensed Material by automated means;
+2. **Use, pipe, or ingest** the Licensed Material into any Artificial Intelligence system, machine learning model, neural network, or generative AI system;
+3. Use the Licensed Material for **training, fine-tuning, distillation, alignment, or evaluation** of any AI or ML model;
+4. Use the Licensed Material to produce **AI-generated derivative output** — including text, images, audio, or code — that is substantially based on or derived from the Licensed Material;
+5. Include the Licensed Material in any **dataset, corpus, or data pipeline** used in connection with AI or ML development.
+
+This clause applies regardless of whether the AI system is commercial or non-commercial, public or private, open-source or proprietary.
+
+---
+
+## Section 4 — Term and Termination
+
+**a.** This license applies for the duration of the applicable copyright term. If you fail to comply with these terms, your rights under this license terminate automatically.
+
+**b.** Terminated rights reinstate:
+1. Automatically, if the violation is cured within 30 days of your discovery of it; or
+2. Upon express written reinstatement by the Licensor.
+
+**c.** The Licensor may offer the Licensed Material under separate terms or stop distributing it at any time; this does not terminate licenses already granted.
+
+**d.** Sections 1, 5, 6, and 7 survive termination.
+
+---
+
+## Section 5 — Disclaimer of Warranties and Limitation of Liability
+
+**a.** The Licensed Material is provided **as-is and as-available**, with no warranties of any kind — express, implied, statutory, or otherwise — including fitness for a particular purpose, accuracy, or absence of errors.
+
+**b.** To the fullest extent permitted by applicable law, the Licensor shall not be liable for any direct, indirect, incidental, consequential, punitive, or other damages arising from this license or use of the Licensed Material.
+
+---
+
+## Section 6 — Governing Law
+
+This license is governed by the laws of the **Republic of Croatia**, without regard to its conflict of law provisions.
+
+---
+
+## Section 7 — Other Terms
+
+**a.** The Licensor is not bound by any additional or different terms communicated by you unless expressly agreed in writing.
+
+**b.** Any arrangements regarding the Licensed Material not stated here are separate from and independent of this license.
+
+**c.** If any provision of this license is found unenforceable, it shall be reformed to the minimum extent necessary to make it enforceable. If it cannot be reformed, it shall be severed without affecting the remaining terms.
+
+---
+
+## Section 8 — Contact
+
+To request permission to use the Licensed Material outside these terms, contact the Licensor directly.
+
+---
+
+*JZSCL 1.0 — JustZvan Standard Creative License, version 1.0*
+*Derived from CC BY-NC-SA 4.0 International. This is not a Creative Commons license and is not affiliated with or endorsed by Creative Commons.* \ No newline at end of file
diff --git a/content/_index.md b/content/_index.md
new file mode 100644
index 0000000..336cc79
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,12 @@
+---
+socials:
+ - name: mastodon
+ url: https://fosstodon.org/@justzvan
+ - name: gitlab
+ url: https://gitlab.com/zvan
+ - name: github
+ url: https://github.com/justzvan
+---
+
+hobbyist developer from Croatia 🇭🇷
+
diff --git a/content/posts/systemd be gone.md b/content/posts/systemd be gone.md
new file mode 100644
index 0000000..4d449cd
--- /dev/null
+++ b/content/posts/systemd be gone.md
@@ -0,0 +1,35 @@
+---
+title: 'a "love" letter to systemd'
+date: 2026-03-24
+subtitle: 'a rant on how systemd is trash.'
+---
+
+[Wikipedia](https://en.wikipedia.org/wiki/Systemd) describes systemd as a software suite for system and service management on Linux. In other words, an init system that bootstraps Linux and manages your services. However systemd is a LOT more.
+
+## THE BLOAT
+
+The systemd project isn't just an init system. It manages DNS via resolvectl. It has a bootloader (systemd-boot). It stores info on users, and recently started storing user provided birth dates to try to comply with the new OS-level verification bills in places like California.
+This is just opposite to the UNIX philosophy: Do one thing and do it well.
+
+systemd also absorbed udev and made it incompatible with other init systems. This lead Gentoo to develop a fork called eudev.
+
+## THE EVIL
+
+So what if it violates the UNIX philosophy? Who cares?
+
+I think that not caring about the UNIX philosophy is totally okay. But systemd seems to be trying to obtain a monopoly (which will not happen).
+
+systemd contributors tried and tried to push systemd specific code into other FOSS software. We're talking big stuff. GNOME, for example.
+
+## SECURITY
+
+I'm not aware of any vulnerabilities in systemd but I am aware of one concept: the more code you have, the bigger the chance of vulnerabilities.
+
+## WTF DO I DO
+
+Just get a non-systemd distro.
+
+If you're on Arch Linux check out [Artix](https://artixlinux.org)
+If you like Debian check out [Devuan](https://devuan.org)
+
+Check out [nosystemd](https://nosystemd.org/) for more info.
diff --git a/hugo.toml b/hugo.toml
new file mode 100644
index 0000000..138d3de
--- /dev/null
+++ b/hugo.toml
@@ -0,0 +1,4 @@
+baseURL = 'https://example.org/'
+languageCode = 'en-us'
+title = 'JustZvan'
+theme = 'JustZvan'
diff --git a/themes/JustZvan/archetypes/default.md b/themes/JustZvan/archetypes/default.md
new file mode 100644
index 0000000..25b6752
--- /dev/null
+++ b/themes/JustZvan/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+date = '{{ .Date }}'
+draft = true
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
++++
diff --git a/themes/JustZvan/assets/css/main.css b/themes/JustZvan/assets/css/main.css
new file mode 100644
index 0000000..9804cf4
--- /dev/null
+++ b/themes/JustZvan/assets/css/main.css
@@ -0,0 +1,206 @@
+body {
+ background: #000;
+ color: #fff;
+ font-family: "JetBrains Mono Regular";
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+a {
+ color: #fff;
+}
+
+a:visited {
+ color: #fff;
+}
+
+.sitename {
+ font-family: "Pencil Child";
+ font-size: 5rem;
+ margin: 0;
+}
+
+header {
+ padding: 1rem;
+ display: flex;
+ justify-content: center;
+}
+
+footer {
+ text-align: center;
+ padding: 1rem;
+ opacity: 0.7;
+ font-size: 0.9rem;
+}
+
+main {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+.home-hero {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 1.5rem;
+ text-align: center;
+ padding: 1rem;
+}
+
+.home-about {
+ max-width: 60ch;
+ line-height: 1.6;
+}
+
+.home-about p {
+ margin: 0;
+}
+
+nav ul {
+ list-style: none;
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: center;
+ align-items: center;
+ gap: 1.25rem;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+ overflow-x: auto;
+}
+
+nav li {
+ flex: 0 0 auto;
+}
+
+nav a {
+ letter-spacing: 0.03em;
+}
+
+.home-social-links {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: center;
+ align-items: center;
+ gap: 1rem;
+ white-space: nowrap;
+ overflow-x: auto;
+}
+
+.home-social-links a {
+ text-decoration: none;
+}
+
+.home-social-links a:hover {
+ text-decoration: underline;
+}
+
+.post-page {
+ flex: 1;
+ width: min(65ch, 100%);
+ margin: 0 auto;
+ padding: 2.5rem 1rem;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: stretch;
+ text-align: left;
+}
+
+.post-page > * {
+ width: 100%;
+}
+
+.post-page h1,
+.post-page time {
+ text-align: center;
+}
+
+.post-page img,
+.post-page video,
+.post-page iframe,
+.post-page table,
+.post-page pre {
+ max-width: 100%;
+}
+
+.post-page pre {
+ overflow-x: auto;
+}
+
+.post-page p,
+.post-page li {
+ overflow-wrap: anywhere;
+}
+
+.list-page {
+ width: min(65ch, 100%);
+ margin: 0 auto;
+ padding: 2.5rem 1rem;
+ display: flex;
+ flex-direction: column;
+ gap: 2rem;
+}
+
+.page-title {
+ text-align: center;
+ margin: 0 0 2rem 0;
+}
+
+.post-list {
+ display: flex;
+ flex-direction: column;
+ gap: 3rem;
+}
+
+.post-list-item {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.post-list-meta time {
+ font-size: 0.9rem;
+ opacity: 0.7;
+ letter-spacing: 0.05em;
+}
+
+.post-list-title {
+ margin: 0;
+ font-size: 1.5rem;
+}
+
+.post-list-title a {
+ text-decoration: none;
+}
+
+.post-list-title a:hover {
+ text-decoration: underline;
+}
+
+.post-list-summary {
+ margin: 0;
+ opacity: 0.8;
+ line-height: 1.6;
+}
+
+@font-face {
+ font-family: "JetBrains Mono Regular";
+ src: url("/fonts/JetBrainsMono-Regular.woff2");
+}
+
+@font-face {
+ font-family: "Pencil Child";
+ src: url("/fonts/Pencil Child.ttf");
+}
diff --git a/themes/JustZvan/assets/js/main.js b/themes/JustZvan/assets/js/main.js
new file mode 100644
index 0000000..e2aac52
--- /dev/null
+++ b/themes/JustZvan/assets/js/main.js
@@ -0,0 +1 @@
+console.log('This site was generated by Hugo.');
diff --git a/themes/JustZvan/hugo.toml b/themes/JustZvan/hugo.toml
new file mode 100644
index 0000000..4015a68
--- /dev/null
+++ b/themes/JustZvan/hugo.toml
@@ -0,0 +1,22 @@
+baseURL = 'https://example.org/'
+languageCode = 'en-US'
+title = 'My New Hugo Site'
+
+[menus]
+ [[menus.main]]
+ name = 'Home'
+ pageRef = '/'
+ weight = 10
+
+ [[menus.main]]
+ name = 'Posts'
+ pageRef = '/posts'
+ weight = 20
+
+[taxonomies]
+ category = 'categories'
+
+[module]
+ [module.hugoVersion]
+ extended = false
+ min = '0.146.0'
diff --git a/themes/JustZvan/layouts/_partials/footer.html b/themes/JustZvan/layouts/_partials/footer.html
new file mode 100644
index 0000000..53920d0
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/footer.html
@@ -0,0 +1 @@
+<p>Copyright JustZvan {{ now.Year }}. All blog posts on this website are licensed under the <a href="/jzscl/">JZSCL</a>.</p>
diff --git a/themes/JustZvan/layouts/_partials/head.html b/themes/JustZvan/layouts/_partials/head.html
new file mode 100644
index 0000000..02c2240
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/head.html
@@ -0,0 +1,5 @@
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width">
+<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
+{{ partialCached "head/css.html" . }}
+{{ partialCached "head/js.html" . }}
diff --git a/themes/JustZvan/layouts/_partials/head/css.html b/themes/JustZvan/layouts/_partials/head/css.html
new file mode 100644
index 0000000..d76d23a
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/head/css.html
@@ -0,0 +1,9 @@
+{{- with resources.Get "css/main.css" }}
+ {{- if hugo.IsDevelopment }}
+ <link rel="stylesheet" href="{{ .RelPermalink }}">
+ {{- else }}
+ {{- with . | minify | fingerprint }}
+ <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/themes/JustZvan/layouts/_partials/head/js.html b/themes/JustZvan/layouts/_partials/head/js.html
new file mode 100644
index 0000000..16ffbed
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/head/js.html
@@ -0,0 +1,16 @@
+{{- with resources.Get "js/main.js" }}
+ {{- $opts := dict
+ "minify" (not hugo.IsDevelopment)
+ "sourceMap" (cond hugo.IsDevelopment "external" "")
+ "targetPath" "js/main.js"
+ }}
+ {{- with . | js.Build $opts }}
+ {{- if hugo.IsDevelopment }}
+ <script src="{{ .RelPermalink }}"></script>
+ {{- else }}
+ {{- with . | fingerprint }}
+ <script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
+ {{- end }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/themes/JustZvan/layouts/_partials/header.html b/themes/JustZvan/layouts/_partials/header.html
new file mode 100644
index 0000000..8995308
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/header.html
@@ -0,0 +1 @@
+{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
diff --git a/themes/JustZvan/layouts/_partials/menu.html b/themes/JustZvan/layouts/_partials/menu.html
new file mode 100644
index 0000000..14245b5
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/menu.html
@@ -0,0 +1,51 @@
+{{- /*
+Renders a menu for the given menu ID.
+
+@context {page} page The current page.
+@context {string} menuID The menu ID.
+
+@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
+*/}}
+
+{{- $page := .page }}
+{{- $menuID := .menuID }}
+
+{{- with index site.Menus $menuID }}
+ <nav>
+ <ul>
+ {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
+ </ul>
+ </nav>
+{{- end }}
+
+{{- define "_partials/inline/menu/walk.html" }}
+ {{- $page := .page }}
+ {{- range .menuEntries }}
+ {{- $attrs := dict "href" .URL }}
+ {{- if $page.IsMenuCurrent .Menu . }}
+ {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
+ {{- else if $page.HasMenuCurrent .Menu .}}
+ {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
+ {{- end }}
+ {{- $name := .Name }}
+ {{- with .Identifier }}
+ {{- with T . }}
+ {{- $name = . }}
+ {{- end }}
+ {{- end }}
+ <li>
+ <a
+ {{- range $k, $v := $attrs }}
+ {{- with $v }}
+ {{- printf " %s=%q" $k $v | safeHTMLAttr }}
+ {{- end }}
+ {{- end -}}
+ >{{ $name }}</a>
+ {{- with .Children }}
+ <ul>
+ {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
+ </ul>
+ {{- end }}
+ </li>
+ {{- end }}
+{{- end }}
diff --git a/themes/JustZvan/layouts/_partials/terms.html b/themes/JustZvan/layouts/_partials/terms.html
new file mode 100644
index 0000000..8a6ebec
--- /dev/null
+++ b/themes/JustZvan/layouts/_partials/terms.html
@@ -0,0 +1,23 @@
+{{- /*
+For a given taxonomy, renders a list of terms assigned to the page.
+
+@context {page} page The current page.
+@context {string} taxonomy The taxonomy.
+
+@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
+*/}}
+
+{{- $page := .page }}
+{{- $taxonomy := .taxonomy }}
+
+{{- with $page.GetTerms $taxonomy }}
+ {{- $label := (index . 0).Parent.LinkTitle }}
+ <div>
+ <div>{{ $label }}:</div>
+ <ul>
+ {{- range . }}
+ <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
+ {{- end }}
+ </ul>
+ </div>
+{{- end }}
diff --git a/themes/JustZvan/layouts/baseof.html b/themes/JustZvan/layouts/baseof.html
new file mode 100644
index 0000000..36ca140
--- /dev/null
+++ b/themes/JustZvan/layouts/baseof.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="{{ site.Language.LanguageCode }}" dir="{{ or site.Language.LanguageDirection `ltr` }}">
+<head>
+ {{ partial "head.html" . }}
+</head>
+<body>
+ {{ if not .IsHome }}
+ <header>
+ {{ partial "header.html" . }}
+ </header>
+ {{ end }}
+ <main>
+ {{ block "main" . }}{{ end }}
+ </main>
+ {{ if not .IsHome }}
+ <footer>
+ {{ partial "footer.html" . }}
+ </footer>
+ {{ end }}
+</body>
+</html>
diff --git a/themes/JustZvan/layouts/home.html b/themes/JustZvan/layouts/home.html
new file mode 100644
index 0000000..9897f4a
--- /dev/null
+++ b/themes/JustZvan/layouts/home.html
@@ -0,0 +1,17 @@
+{{ define "main" }}
+ <section class="home-hero">
+ <h1 class="sitename">{{ site.Title }}</h1>
+ {{ with .Content }}
+ <div class="home-about">{{ . }}</div>
+ {{ end }}
+ {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
+ {{ with .Params.socials }}
+ <div class="home-social-links" aria-label="Social links">
+ {{ range . }}
+ <a href="{{ .url }}" rel="me noopener noreferrer" target="_blank">{{ .name }}</a>
+ {{ end }}
+ </div>
+ {{ end }}
+ </section>
+ <footer class="home-footer">This site doesnt store any information. Privacy is a human right. Go donate to the EFF, Signal and the Matrix Foundation.</footer>
+{{ end }}
diff --git a/themes/JustZvan/layouts/page.html b/themes/JustZvan/layouts/page.html
new file mode 100644
index 0000000..0c74e02
--- /dev/null
+++ b/themes/JustZvan/layouts/page.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+<div class="post-page">
+ <div class="page-header">
+ <h1>{{ .Title }}</h1>
+ {{ if .Date }}
+ {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{ $dateHuman := .Date | time.Format ":date_long" }}
+ <time datetime="{{ $dateMachine }}" class="page-date">{{ $dateHuman }}</time>
+ {{ end }}
+ </div>
+
+ <div class="page-content">
+ {{ .Content }}
+ </div>
+
+ {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
+</div>
+{{ end }}
diff --git a/themes/JustZvan/layouts/posts/single.html b/themes/JustZvan/layouts/posts/single.html
new file mode 100644
index 0000000..2ead5ce
--- /dev/null
+++ b/themes/JustZvan/layouts/posts/single.html
@@ -0,0 +1,11 @@
+{{ define "main" }}
+ <article class="post-page">
+ <h1>{{ .Title }}</h1>
+
+ {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{ $dateHuman := .Date | time.Format ":date_long" }}
+ <time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
+
+ {{ .Content }}
+ </article>
+{{ end }} \ No newline at end of file
diff --git a/themes/JustZvan/layouts/section.html b/themes/JustZvan/layouts/section.html
new file mode 100644
index 0000000..1712416
--- /dev/null
+++ b/themes/JustZvan/layouts/section.html
@@ -0,0 +1,26 @@
+{{ define "main" }}
+ <div class="list-page">
+ <h1 class="page-title">{{ .Title }}</h1>
+ {{ with .Content }}
+ <div class="page-content">{{ . }}</div>
+ {{ end }}
+
+ <div class="post-list">
+ {{ range .Pages }}
+ <article class="post-list-item">
+ {{ if .Date }}
+ <div class="post-list-meta">
+ {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{ $dateHuman := .Date | time.Format "2006-01-02" }}
+ <time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
+ </div>
+ {{ end }}
+ <h2 class="post-list-title"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+ {{ with .Params.subtitle }}
+ <div class="post-list-summary">{{ . }}</div>
+ {{ end }}
+ </article>
+ {{ end }}
+ </div>
+ </div>
+{{ end }}
diff --git a/themes/JustZvan/layouts/taxonomy.html b/themes/JustZvan/layouts/taxonomy.html
new file mode 100644
index 0000000..c2e7875
--- /dev/null
+++ b/themes/JustZvan/layouts/taxonomy.html
@@ -0,0 +1,7 @@
+{{ define "main" }}
+ <h1>{{ .Title }}</h1>
+ {{ .Content }}
+ {{ range .Pages }}
+ <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+ {{ end }}
+{{ end }}
diff --git a/themes/JustZvan/layouts/term.html b/themes/JustZvan/layouts/term.html
new file mode 100644
index 0000000..1712416
--- /dev/null
+++ b/themes/JustZvan/layouts/term.html
@@ -0,0 +1,26 @@
+{{ define "main" }}
+ <div class="list-page">
+ <h1 class="page-title">{{ .Title }}</h1>
+ {{ with .Content }}
+ <div class="page-content">{{ . }}</div>
+ {{ end }}
+
+ <div class="post-list">
+ {{ range .Pages }}
+ <article class="post-list-item">
+ {{ if .Date }}
+ <div class="post-list-meta">
+ {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{ $dateHuman := .Date | time.Format "2006-01-02" }}
+ <time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
+ </div>
+ {{ end }}
+ <h2 class="post-list-title"><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
+ {{ with .Params.subtitle }}
+ <div class="post-list-summary">{{ . }}</div>
+ {{ end }}
+ </article>
+ {{ end }}
+ </div>
+ </div>
+{{ end }}
diff --git a/themes/JustZvan/static/favicon.ico b/themes/JustZvan/static/favicon.ico
new file mode 100644
index 0000000..67f8b77
--- /dev/null
+++ b/themes/JustZvan/static/favicon.ico
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Bold.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Bold.woff2
new file mode 100644
index 0000000..4917f43
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Bold.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-BoldItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-BoldItalic.woff2
new file mode 100644
index 0000000..536d3f7
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-BoldItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBold.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBold.woff2
new file mode 100644
index 0000000..8f88c54
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBold.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBoldItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..d1478ba
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraBoldItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLight.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLight.woff2
new file mode 100644
index 0000000..b97239f
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLight.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLightItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLightItalic.woff2
new file mode 100644
index 0000000..be01aac
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-ExtraLightItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Italic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Italic.woff2
new file mode 100644
index 0000000..d60c270
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Italic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Light.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Light.woff2
new file mode 100644
index 0000000..6538498
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Light.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-LightItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-LightItalic.woff2
new file mode 100644
index 0000000..66ca3d2
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-LightItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Medium.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Medium.woff2
new file mode 100644
index 0000000..669d04c
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Medium.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-MediumItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-MediumItalic.woff2
new file mode 100644
index 0000000..80cfd15
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-MediumItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Regular.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Regular.woff2
new file mode 100644
index 0000000..40da427
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Regular.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-SemiBold.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-SemiBold.woff2
new file mode 100644
index 0000000..5ead7b0
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-SemiBold.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-SemiBoldItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-SemiBoldItalic.woff2
new file mode 100644
index 0000000..c5dd294
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-SemiBoldItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-Thin.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-Thin.woff2
new file mode 100644
index 0000000..17270e4
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-Thin.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/JetBrainsMono-ThinItalic.woff2 b/themes/JustZvan/static/fonts/JetBrainsMono-ThinItalic.woff2
new file mode 100644
index 0000000..a643215
--- /dev/null
+++ b/themes/JustZvan/static/fonts/JetBrainsMono-ThinItalic.woff2
Binary files differ
diff --git a/themes/JustZvan/static/fonts/Pencil Child.ttf b/themes/JustZvan/static/fonts/Pencil Child.ttf
new file mode 100644
index 0000000..7d88a2d
--- /dev/null
+++ b/themes/JustZvan/static/fonts/Pencil Child.ttf
Binary files differ