Move from Hugo to Zola
1
.gitignore
vendored
|
|
@ -1,3 +1,2 @@
|
||||||
/public/
|
/public/
|
||||||
.hugo_build.lock
|
|
||||||
.direnv
|
.direnv
|
||||||
|
|
|
||||||
7
.helix/languages.toml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[[language]]
|
||||||
|
name = "css"
|
||||||
|
auto-format = false
|
||||||
|
|
||||||
|
[[language]]
|
||||||
|
name = "html"
|
||||||
|
auto-format = false
|
||||||
|
|
@ -4,4 +4,4 @@
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
CC0 1.0 \| Jan Kremer \| 2021–2025
|
CC0 1.0 | Jan Kremer | 2021–2025
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
+++
|
|
||||||
title = {{ replace .Name "-" " " | title }}
|
|
||||||
date = {{ .Date }}
|
|
||||||
description =
|
|
||||||
tags =
|
|
||||||
draft = true
|
|
||||||
+++
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
+++
|
|
||||||
title = {{ replace .Name "-" " " | title }}
|
|
||||||
date = {{ .Date }}
|
|
||||||
draft = true
|
|
||||||
+++
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
+++
|
|
||||||
title = {{ replace .Name "-" " " | title }}
|
|
||||||
date = {{ .Date }}
|
|
||||||
description =
|
|
||||||
tags =
|
|
||||||
draft = true
|
|
||||||
+++
|
|
||||||
|
|
@ -1,2 +1,6 @@
|
||||||
+++
|
+++
|
||||||
|
title = "Jan Kremer"
|
||||||
|
sort_by = "date"
|
||||||
|
template = "index.html"
|
||||||
|
page_template = "blog-page.html"
|
||||||
+++
|
+++
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
+++
|
+++
|
||||||
date = '2024-12-12'
|
title = "Über mich"
|
||||||
title = 'Über mich'
|
date = 2024-12-12
|
||||||
|
updated = 2026-03-06
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Mein Name ist _Jan Kremer_. Ich bin 29 Jahre alt und habe *Pharmazie* studiert. Manchmal schreibe ich über Technik und Software die ich benutze.
|
Mein Name ist _Jan Kremer_. Ich bin 29 Jahre alt und habe *Pharmazie* studiert. Manchmal schreibe ich über Technik und Software die ich benutze.
|
||||||
|
|
|
||||||
6
content/blog/_index.md
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
+++
|
||||||
|
title = "Blog"
|
||||||
|
sort_by = "date"
|
||||||
|
template = "blog.html"
|
||||||
|
page_template = "blog-page.html"
|
||||||
|
+++
|
||||||
|
|
@ -1,13 +1,23 @@
|
||||||
+++
|
+++
|
||||||
date = '2026-02-16T19:45:02+01:00'
|
title = "Discord"
|
||||||
tags = 'micro'
|
date = 2026-02-16T19:45:02+01:00
|
||||||
title = 'Discord'
|
tags = [ "micro" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Since [Discord announced](https://discord.com/press-releases/discord-launches-teen-by-default-settings-globally) it will start asking users for age verification, I became obsessed with reading about alternatives to the platform. And there are a lot of them. As a self-hoster, I immediately thought of Matrix and XMPP. Both have their pros and cons and different implementations.
|
Since
|
||||||
|
[Discord announced](https://discord.com/press-releases/discord-launches-teen-by-default-settings-globally)
|
||||||
|
it will start asking users for age verification, I became obsessed with reading
|
||||||
|
about alternatives to the platform. And there are a lot of them. As a
|
||||||
|
self-hoster, I immediately thought of Matrix and XMPP. Both have their pros and
|
||||||
|
cons and different implementations.
|
||||||
|
|
||||||
I was almost ready to pick one of them when I stopped and thought to myself, _would I really use them?_
|
I was almost ready to pick one of them when I stopped and thought to myself,
|
||||||
|
_would I really use them?_
|
||||||
|
|
||||||
And my answer is a clear: **No!**
|
And my answer is a clear: **No!**
|
||||||
|
|
||||||
I will not replace Discord because _I don't even use Discord now_. I haven't had an account there for years. When I message my friends, it's either on Signal, WhatsApp, or iMessage, which are all end-to-end-encrypted (E2EE) messengers. The only thing I'm waiting for is E2EE RCS (Rich Communication Services) so I can ditch WhatsApp at some point.
|
I will not replace Discord because _I don't even use Discord now_. I haven't had
|
||||||
|
an account there for years. When I message my friends, it's either on Signal,
|
||||||
|
WhatsApp, or iMessage, which are all end-to-end-encrypted (E2EE) messengers. The
|
||||||
|
only thing I'm waiting for is E2EE RCS (Rich Communication Services) so I can
|
||||||
|
ditch WhatsApp at some point.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
+++
|
+++
|
||||||
date = '2026-02-20T15:46:52+01:00'
|
title = "Email"
|
||||||
tags = 'micro'
|
date = 2026-02-20T15:46:52+01:00
|
||||||
title = 'Email'
|
tags = [ "micro" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
It's a shame we don't have _ubiquitous decentralized chat_ equivalent to **email**. I know **Matrix** and **XMPP** exist, but neither are complete enough. And they dont't have a lot of users.
|
It's a shame we don't have _ubiquitous decentralized chat_ equivalent to
|
||||||
|
**email**. I know **Matrix** and **XMPP** exist, but neither are complete
|
||||||
|
enough. And they dont't have a lot of users.
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
+++
|
+++
|
||||||
date = '2023-12-25T16:28:52+01:00'
|
title = "Markdown Tables Suck"
|
||||||
tags = ['micro']
|
date = 2023-12-25T16:28:52+01:00
|
||||||
title = 'Markdown Tables Suck'
|
tags = [ "micro" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Tables are arguably the worst part of Markdown.
|
Tables are arguably the worst part of Markdown. No horizontal lines except for
|
||||||
No horizontal lines except for the mandatory one at the top.
|
the mandatory one at the top. The only feature is the possibility to align
|
||||||
The only feature is the possibility to align cells.
|
cells.
|
||||||
|
|
||||||
Org Mode does much better, but isn't perfect either.
|
Org Mode does much better, but isn't perfect either.
|
||||||
|
|
||||||
Don't get me wrong. It's nice to have a simple tool for simple tables.
|
Don't get me wrong. It's nice to have a simple tool for simple tables. But
|
||||||
But sometimes I need more customizability.
|
sometimes I need more customizability.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
+++
|
+++
|
||||||
date = '2025-04-14'
|
title = "Selbsthosting"
|
||||||
description = 'Kleiner Computer, große Pläne'
|
date = 2025-04-14
|
||||||
tags = ['selbsthosting', 'nixos', 'git']
|
description = "Kleiner Computer, große Pläne"
|
||||||
title = 'Selbsthosting'
|
tags = [ "selbsthosting", "nixos", "git" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Seit etwa 2020 hat mich die Idee fasziniert, meinen _eigenen Server zu betreiben_ – also die volle Kontrolle über Daten, Dienste und Medien zu haben. Vor allem auf Reddit, und dort besonders in den Communities [r/selfhosted](https://www.reddit.com/r/selfhosted) und [r/homelab](https://www.reddit.com/r/homelab), habe ich immer wieder spannende Projekte gesehen. Lange blieb das für mich ein Traum – zu wenig Zeit, zu wenig Geld. Aber im April 2024 war es so weit: Mein kleines Selbsthosting-Abenteuer begann.
|
Seit etwa 2020 hat mich die Idee fasziniert, meinen _eigenen Server zu betreiben_ – also die volle Kontrolle über Daten, Dienste und Medien zu haben. Vor allem auf Reddit, und dort besonders in den Communities [r/selfhosted](https://www.reddit.com/r/selfhosted) und [r/homelab](https://www.reddit.com/r/homelab), habe ich immer wieder spannende Projekte gesehen. Lange blieb das für mich ein Traum – zu wenig Zeit, zu wenig Geld. Aber im April 2024 war es so weit: Mein kleines Selbsthosting-Abenteuer begann.
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
+++
|
+++
|
||||||
date = '2023-11-15T10:12:30+01:00'
|
title= "Use Timestamps"
|
||||||
tags = ['micro']
|
date= 2023-11-15T10:12:30+01:00
|
||||||
title = 'Use Timestamps'
|
tags= ["micro"]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
Every blog post should include a timestamp.
|
Every blog post should include a timestamp. In fact, this extends to almost
|
||||||
In fact, this extends to almost anything online and even offline.
|
anything online and even offline.
|
||||||
|
|
||||||
Also, don't make me look for the date.
|
Also, don't make me look for the date. Put the date as obvious as possible,
|
||||||
Put the date as obvious as possible, preferably at the beginning of the post.
|
preferably at the beginning of the post.
|
||||||
|
|
||||||
I was reading [Julia Evans post about nix](https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/) and it was not immediately clear to me if this was a recent post.
|
I was reading
|
||||||
Only when I copied the URL to complain about it I discovered the date there.
|
[Julia Evans post about nix](https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/)
|
||||||
Safari hides most of the URL by default.
|
and it was not immediately clear to me if this was a recent post. Only when I
|
||||||
|
copied the URL to complain about it I discovered the date there. Safari hides
|
||||||
|
most of the URL by default.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
+++
|
+++
|
||||||
date = '2022-12-10'
|
title = "Bitcoin"
|
||||||
tags = ['crypto']
|
date = 2022-12-10
|
||||||
title = 'Bitcoin'
|
tags = [ "crypto" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
## Address
|
## Address
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
+++
|
+++
|
||||||
date = '2022-12-10'
|
title = "Ethereum"
|
||||||
tags = ['crypto']
|
date = 2022-12-10
|
||||||
title = 'Ethereum'
|
tags = [ "crypto" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
## Address
|
## Address
|
||||||
|
|
|
||||||
6
content/fotos/_index.md
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
+++
|
||||||
|
title = "Fotos"
|
||||||
|
sort_by = "date"
|
||||||
|
template = "blog.html"
|
||||||
|
page_template = "blog-page.html"
|
||||||
|
+++
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
+++
|
+++
|
||||||
date = '2023-07-19T10:48:33+02:00'
|
title = "Abendliche Bewölkung"
|
||||||
description = 'über Regensburg'
|
date = 2023-07-19T10:48:33+02:00
|
||||||
tags = ['fotos', 'regensburg']
|
description = "über Regensburg"
|
||||||
title = 'Abendliche Bewölkung'
|
tags = ["fotos", "regensburg"]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="./abendliche-bewoelkung.webp", alt="Abendliche Bewölkung über Regensburg")}}
|
||||||
src="./abendliche-bewoelkung.webp"
|
|
||||||
alt="Abendliche Bewölkung über Regensburg"
|
|
||||||
caption="Abendliche Bewölkung über Regensburg"
|
|
||||||
fetchpriority="high" >}}
|
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,21 @@
|
||||||
+++
|
+++
|
||||||
date = '2025-11-15T21:53:01+01:00'
|
title = "Ustronie Morskie"
|
||||||
description = 'Polen'
|
description = "Polen"
|
||||||
tags = ['fotos', 'polen']
|
date = 2025-11-15T21:53:01+01:00
|
||||||
title = 'Ustronie Morskie'
|
tags = ["fotos", "polen"]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="holzwall.jpeg" alt="Holzwall" caption="Holzwall"
|
||||||
src="holzwall.jpeg"
|
first=true) }}
|
||||||
alt="Holzwall"
|
|
||||||
caption="Holzwall"
|
|
||||||
fetchpriority="high" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="pfote.jpeg" alt="Pfote" caption="Pfote") }}
|
||||||
src="pfote.jpeg"
|
|
||||||
alt="Pfote"
|
|
||||||
caption="Pfote" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="nala.jpeg" alt="Nala" caption="Nala") }}
|
||||||
src="nala.jpeg"
|
|
||||||
alt="Nala"
|
|
||||||
caption="Nala" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="pier.jpeg" alt="Pier" caption="Pier") }}
|
||||||
src="pier.jpeg"
|
|
||||||
alt="Pier"
|
|
||||||
caption="Pier" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="dom-1.jpeg" alt="Kolberger Dom" caption="Kolberger Dom")}}
|
||||||
src="Dom-1.jpeg"
|
|
||||||
alt="Kolberger Dom"
|
|
||||||
caption="Kolberger Dom" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="dom-2.jpeg" alt="Kolberger Dom" caption="Kolberger Dom")}}
|
||||||
src="dom-2.jpeg"
|
|
||||||
alt="Kolberger Dom"
|
|
||||||
caption="Kolberger Dom" >}}
|
|
||||||
|
|
||||||
{{< figure
|
{{ figure(src="moeve.jpeg" alt="Möve" caption="Möve")}}
|
||||||
src="moeve.jpeg"
|
|
||||||
alt="Möve"
|
|
||||||
caption="Möve" >}}
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
+++
|
+++
|
||||||
date = '2022-12-10'
|
title = "Monero"
|
||||||
tags = ['crypto']
|
date = 2022-12-10
|
||||||
title = 'Monero'
|
tags = [ "crypto" ]
|
||||||
+++
|
+++
|
||||||
|
|
||||||
## Address
|
## Address
|
||||||
|
|
|
||||||
12
flake.lock
generated
|
|
@ -2,11 +2,11 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768364046,
|
"lastModified": 1771892004,
|
||||||
"narHash": "sha256-PDFfpswLiuG/DcadTBb7dEfO3jX1fcGlCD4ZKSkC0M8=",
|
"narHash": "sha256-V96pa9awm6hjnf8yGJeoC4uOirYDEPsaBbuU0stROQI=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ea30586ee015f37f38783006a9bc9e4aa64d7d61",
|
"rev": "5e4522be6bdf1600682a6f383434b057b2d77a37",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -44,11 +44,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768158989,
|
"lastModified": 1770228511,
|
||||||
"narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=",
|
"narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca",
|
"rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
11
flake.nix
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
description = "Jan Kremer blog";
|
description = "Blog von Jan Kremer";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
treefmt = {
|
treefmt = {
|
||||||
|
|
@ -24,10 +24,9 @@
|
||||||
{
|
{
|
||||||
devShells = eachSystem (pkgs: {
|
devShells = eachSystem (pkgs: {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
name = "Hugo website";
|
name = "Zola website";
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
go
|
zola
|
||||||
hugo
|
|
||||||
vscode-langservers-extracted
|
vscode-langservers-extracted
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
@ -50,7 +49,7 @@
|
||||||
program =
|
program =
|
||||||
(pkgs.writeShellScript "build-website" ''
|
(pkgs.writeShellScript "build-website" ''
|
||||||
set -e
|
set -e
|
||||||
${pkgs.hugo}/bin/hugo --minify
|
${pkgs.zola}/bin/zola build --minify
|
||||||
'').outPath;
|
'').outPath;
|
||||||
};
|
};
|
||||||
deploy = {
|
deploy = {
|
||||||
|
|
@ -63,7 +62,7 @@
|
||||||
program =
|
program =
|
||||||
(pkgs.writeShellScript "deploy-website" ''
|
(pkgs.writeShellScript "deploy-website" ''
|
||||||
set -e
|
set -e
|
||||||
${pkgs.hugo}/bin/hugo --minify
|
${pkgs.zola}/bin/zola build --minify
|
||||||
cd public
|
cd public
|
||||||
git commit --all -m "Deploy"
|
git commit --all -m "Deploy"
|
||||||
git push
|
git push
|
||||||
|
|
|
||||||
50
hugo.toml
|
|
@ -1,50 +0,0 @@
|
||||||
baseURL = "https://jankremer.eu/"
|
|
||||||
title = "Jan Kremer"
|
|
||||||
copyright = "CC0 1.0"
|
|
||||||
defaultContentLanguage = "de"
|
|
||||||
enableGitInfo = true
|
|
||||||
|
|
||||||
[params]
|
|
||||||
[params.author]
|
|
||||||
name = "Jan Kremer"
|
|
||||||
email = "mail@jankremer.eu"
|
|
||||||
|
|
||||||
[menus]
|
|
||||||
[[menus.main]]
|
|
||||||
name = "Blog"
|
|
||||||
pageRef = "/blog"
|
|
||||||
weight = 1
|
|
||||||
[[menus.main]]
|
|
||||||
name = "Fotos"
|
|
||||||
pageRef = "/fotos"
|
|
||||||
weight = 2
|
|
||||||
[[menus.main]]
|
|
||||||
name = "Über mich"
|
|
||||||
pageRef = "/about"
|
|
||||||
weight = 3
|
|
||||||
|
|
||||||
[markup]
|
|
||||||
[markup.goldmark]
|
|
||||||
[markup.goldmark.renderer]
|
|
||||||
unsafe = true
|
|
||||||
[markup.goldmark.parser]
|
|
||||||
wrapStandAloneImageWithinParagraph = false
|
|
||||||
[markup.goldmark.parser.attribute]
|
|
||||||
block = true
|
|
||||||
[markup.highlight]
|
|
||||||
style = "github"
|
|
||||||
|
|
||||||
[mediaTypes]
|
|
||||||
[mediaTypes.'application/atom+xml']
|
|
||||||
suffixes = ['atom']
|
|
||||||
|
|
||||||
[outputFormats]
|
|
||||||
[outputFormats.atom]
|
|
||||||
mediaType = 'application/atom+xml'
|
|
||||||
noUgly = true
|
|
||||||
|
|
||||||
[outputs]
|
|
||||||
home = ['html', 'rss', 'atom']
|
|
||||||
section = ['html', 'rss', 'atom']
|
|
||||||
taxonomy = ['html', 'rss', 'atom']
|
|
||||||
term = ['html', 'rss', 'atom']
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="https://creativecommons.org/publicdomain/zero/1.0/"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
aria-label="CC0: This work has been marked as dedicated to the public domain.">
|
|
||||||
{{ partial "cc.svg" . }}
|
|
||||||
{{ partial "zero.svg" . }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="/about" id="title">
|
|
||||||
{{ partial "logo.svg" . }}
|
|
||||||
{{ site.Title }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<!-- <li>
|
|
||||||
{{ with .GitInfo }}
|
|
||||||
<a href="https://github.com/jukremer/jukremer.github.io/commit/{{ .Hash }}">
|
|
||||||
{{ partial "git.svg" }} {{ .Subject }} ({{ .AbbreviatedHash }})
|
|
||||||
</a>
|
|
||||||
{{ end }}
|
|
||||||
</li> -->
|
|
||||||
<li>2021–{{ now.Year }}</li>
|
|
||||||
</ul>
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<meta name="description" content="Blog von Jan Kremer" />
|
|
||||||
<meta name="author" content="Jan Kremer" />
|
|
||||||
<meta name="apple-mobile-web-app-title" content="Jan Kremer" />
|
|
||||||
<meta name="keywords" content="Blog" />
|
|
||||||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
||||||
<link rel="shortcut icon" href="/favicon.ico" />
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
|
||||||
<link rel="manifest" href="/site.webmanifest" />
|
|
||||||
<title>
|
|
||||||
{{ if .IsHome }}
|
|
||||||
{{ site.Title }}
|
|
||||||
{{ else }}
|
|
||||||
{{ printf "%s – %s" .Title
|
|
||||||
site.Title
|
|
||||||
}}
|
|
||||||
{{ end }}
|
|
||||||
</title>
|
|
||||||
{{ partialCached "head/css.html" . }}
|
|
||||||
{{ partialCached "head/js.html" . }}
|
|
||||||
{{ with .OutputFormats.Get "rss" }}
|
|
||||||
{{ printf `<link rel=%q type=%q href=%q title=%q>` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
|
|
||||||
{{ end }}{{ with .OutputFormats.Get "atom" }}
|
|
||||||
{{ printf `<link rel=%q type=%q href=%q title=%q>` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
{{- with resources.Get "css/main.css" }}
|
|
||||||
{{- if eq hugo.Environment
|
|
||||||
"development"
|
|
||||||
}}
|
|
||||||
<link rel="stylesheet" href="{{ .RelPermalink }}" />
|
|
||||||
{{- else }}
|
|
||||||
{{- with . | minify | fingerprint }}
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="{{ .RelPermalink }}"
|
|
||||||
integrity="{{ .Data.Integrity }}"
|
|
||||||
crossorigin="anonymous" />
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
{{- with resources.Get "js/main.js" }}
|
|
||||||
{{- if eq hugo.Environment "development" }}
|
|
||||||
{{- with . | js.Build }}
|
|
||||||
<script src="{{ .RelPermalink }}"></script>
|
|
||||||
{{- end }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $opts := dict "minify" true }}
|
|
||||||
{{- with . | js.Build
|
|
||||||
$opts | fingerprint
|
|
||||||
}}
|
|
||||||
<script src="{{ .RelPermalink }}"
|
|
||||||
integrity="{{- .Data.Integrity }}"
|
|
||||||
crossorigin="anonymous"></script>
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{{- $attrs := dict "class" "title" }}
|
|
||||||
{{- if .IsHome }}
|
|
||||||
{{- $attrs = merge $attrs (dict "class" "title active" "aria-current" "page") }}
|
|
||||||
{{- end }}
|
|
||||||
<a href="/" {{ range $k, $v :=$attrs }}{{ $k }}="{{ $v }}" {{ end }}>{{ partial "logo.svg" . }}{{ site.Title }}</a>
|
|
||||||
{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
{{- /*
|
|
||||||
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 }}
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
{{- /* For a given taxonomy, renders a list of terms assigned to the page.
|
|
||||||
@context {page} page The current page. @context {string} taxonomy The taxonony.
|
|
||||||
@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .)
|
|
||||||
}}
|
|
||||||
*/}}
|
|
||||||
{{- $page := .page }}
|
|
||||||
{{- $taxonomy := .taxonomy }}
|
|
||||||
{{- with $page.GetTerms
|
|
||||||
$taxonomy
|
|
||||||
}}
|
|
||||||
{{- $label := (index . 0).Parent.LinkTitle }}
|
|
||||||
<div class="tags">
|
|
||||||
<ul>
|
|
||||||
<li>Tags:</li>
|
|
||||||
<ul>
|
|
||||||
{{- range . }}
|
|
||||||
<li>
|
|
||||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
|
||||||
</li>
|
|
||||||
{{- end }}
|
|
||||||
</ul>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{- end }}
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="{{ or site.Language.LanguageCode site.Language.Lang }}"
|
|
||||||
dir="{{ or site.Language.LanguageDirection `ltr` }}">
|
|
||||||
<head>{{ partial "head.html" . }}</head>
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
{{ partial "header.html" . }}
|
|
||||||
</header>
|
|
||||||
<main>
|
|
||||||
{{ block "main" . }}{{ end }}
|
|
||||||
</main>
|
|
||||||
<footer>
|
|
||||||
{{ partial "footer.html" . }}
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
{{ define "main" }}
|
|
||||||
{{ .Content }}
|
|
||||||
{{ $pages := .Paginate (where
|
|
||||||
.Site.RegularPages "Type" "ne" "page")
|
|
||||||
}}
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
{{ range $pages.Pages }}
|
|
||||||
<li>
|
|
||||||
<a href="{{ .RelPermalink }}" style="display: block">
|
|
||||||
<h2>{{ .Title }}</h2>
|
|
||||||
<p class="lead">{{ .Description }}</p>
|
|
||||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
|
||||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
|
||||||
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
{{- $authorEmail := "" }}
|
|
||||||
{{- with site.Params.author }}
|
|
||||||
{{- if reflect.IsMap . }}
|
|
||||||
{{- with .email }}
|
|
||||||
{{- $authorEmail = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- $authorName := "" }}
|
|
||||||
{{- with site.Params.author }}
|
|
||||||
{{- if reflect.IsMap . }}
|
|
||||||
{{- with .name }}
|
|
||||||
{{- $authorName = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $authorName = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- $pctx := . }}
|
|
||||||
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
|
|
||||||
{{- $pages := slice }}
|
|
||||||
{{- if or $.IsHome $.IsSection }}
|
|
||||||
{{- $pages = $pctx.RegularPages }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $pages = $pctx.Pages }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $limit := .Site.Config.Services.RSS.Limit }}
|
|
||||||
{{- if ge $limit 1 }}
|
|
||||||
{{- $pages = $pages | first $limit }}
|
|
||||||
{{- end }}
|
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
|
||||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
|
||||||
<link href="{{ .Permalink }}index.atom" rel="self"/>
|
|
||||||
<link href="{{ .Permalink }}"/>
|
|
||||||
<updated>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated>
|
|
||||||
<id>{{ .Permalink }}</id>
|
|
||||||
<author>
|
|
||||||
<name>{{ with $authorName }}{{ . }}{{ end }}</name>
|
|
||||||
<email>{{ with $authorEmail }}{{ . }}{{ end }}</email>
|
|
||||||
</author>
|
|
||||||
<generator>Hugo</generator>
|
|
||||||
{{- range $pages }}
|
|
||||||
<entry>
|
|
||||||
<title type="html">{{ .Title }}</title>
|
|
||||||
<link href="{{ .Permalink }}"/>
|
|
||||||
<id>{{ .Permalink }}</id>
|
|
||||||
<author>
|
|
||||||
<name>{{ with $authorName }}{{ . }}{{ end }}</name>
|
|
||||||
<email>{{ with $authorEmail }}{{ . }}{{ end }}</email>
|
|
||||||
</author>
|
|
||||||
<published>{{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</published>
|
|
||||||
<updated>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</updated>
|
|
||||||
<content type="html">
|
|
||||||
{{ .Content | transform.XMLEscape | safeHTML }}
|
|
||||||
</content>
|
|
||||||
</entry>
|
|
||||||
{{- end }}
|
|
||||||
</feed>
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
{{ define "main" }}
|
|
||||||
{{ .Content }}
|
|
||||||
<div class="list">
|
|
||||||
<ul>
|
|
||||||
{{ range .Pages }}
|
|
||||||
<li>
|
|
||||||
<a href="{{ .RelPermalink }}" style="display: block">
|
|
||||||
<h2>{{ .Title }}</h2>
|
|
||||||
<p class="lead">{{ .Description }}</p>
|
|
||||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
|
||||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
|
||||||
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{{ end }}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
{{- $authorEmail := "" }}
|
|
||||||
{{- with site.Params.author }}
|
|
||||||
{{- if reflect.IsMap . }}
|
|
||||||
{{- with .email }}
|
|
||||||
{{- $authorEmail = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- $authorName := "" }}
|
|
||||||
{{- with site.Params.author }}
|
|
||||||
{{- if reflect.IsMap . }}
|
|
||||||
{{- with .name }}
|
|
||||||
{{- $authorName = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $authorName = . }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- $pctx := . }}
|
|
||||||
{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
|
|
||||||
{{- $pages := slice }}
|
|
||||||
{{- if or $.IsHome $.IsSection }}
|
|
||||||
{{- $pages = $pctx.RegularPages }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $pages = $pctx.Pages }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $limit := .Site.Config.Services.RSS.Limit }}
|
|
||||||
{{- if ge $limit 1 }}
|
|
||||||
{{- $pages = $pages | first $limit }}
|
|
||||||
{{- end }}
|
|
||||||
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
|
|
||||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
|
||||||
<channel>
|
|
||||||
<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }}</title>
|
|
||||||
<link>{{ .Permalink }}</link>
|
|
||||||
<description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }}</description>
|
|
||||||
<generator>Hugo</generator>
|
|
||||||
<language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
|
|
||||||
<managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
|
|
||||||
<webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
|
|
||||||
<copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
|
|
||||||
<lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
|
|
||||||
{{- with .OutputFormats.Get "RSS" }}
|
|
||||||
{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
|
|
||||||
{{- end }}
|
|
||||||
{{- range $pages }}
|
|
||||||
<item>
|
|
||||||
<title>{{ .Title }}</title>
|
|
||||||
<link>{{ .Permalink }}</link>
|
|
||||||
<pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
|
|
||||||
{{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
|
|
||||||
<guid>{{ .Permalink }}</guid>
|
|
||||||
<description>
|
|
||||||
<strong>{{ .Description | transform.XMLEscape | safeHTML }}</strong>
|
|
||||||
|
|
||||||
{{ .Content | transform.XMLEscape | safeHTML }}
|
|
||||||
</description>
|
|
||||||
</item>
|
|
||||||
{{- end }}
|
|
||||||
</channel>
|
|
||||||
</rss>
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
{{ define "main" }}
|
|
||||||
<article>
|
|
||||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
|
||||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
|
||||||
{{ $lastmodDateHuman := .Lastmod | time.Format ":date_long" }}
|
|
||||||
{{ $lastmodDateMachine := .Lastmod | time.Format "2006-01-02T15:04:05-07:00" }}
|
|
||||||
<div class="dates">
|
|
||||||
<p>
|
|
||||||
Editiert:
|
|
||||||
<time datetime="{{ $lastmodDateMachine }}">{{ $lastmodDateHuman }}</time>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<h1>{{ .Title }}</h1>
|
|
||||||
<p class="lead">{{ .Description }}</p>
|
|
||||||
{{ .Content }}
|
|
||||||
</article>
|
|
||||||
{{ end }}
|
|
||||||
|
|
@ -164,11 +164,6 @@ svg {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
|
||||||
text-decoration: underline;
|
|
||||||
text-decoration-color: var(--uchu-blue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
|
|
@ -351,24 +346,14 @@ footer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
.giallo {
|
||||||
font-family: var(--mono);
|
|
||||||
border-radius: 0.3rem;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.highlight {
|
|
||||||
font-family: var(--mono);
|
|
||||||
border: 1px solid light-dark(var(--uchu-gray), var(--uchu-dark-gray));
|
border: 1px solid light-dark(var(--uchu-gray), var(--uchu-dark-gray));
|
||||||
border-radius: 0.3rem;
|
border-radius: 0.3rem;
|
||||||
margin: 1rem 0;
|
}
|
||||||
padding: 0 1rem;
|
|
||||||
overflow: auto;
|
.giallo-l {
|
||||||
|
font-family: var(--mono);
|
||||||
pre {
|
padding: 1rem;
|
||||||
margin: 0;
|
overflow: auto;
|
||||||
padding: 0;
|
display: block;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
▄▄▀▀▄▀▀▀▀▀▀▀▀▄▄
|
|
||||||
▄▀ █
|
|
||||||
▄▀ ▄▄▄ █
|
|
||||||
█ ▄▀▀▀ ▀▀▀▀▀▀▀█▀
|
|
||||||
▀▄▄█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
|
|
||||||
█ █ █
|
|
||||||
▀█▀▄ ▄▀▄ ▄▀
|
|
||||||
█ ▀▀▀▀▀ ▀▀▀▀█
|
|
||||||
█ █
|
|
||||||
█ ▀▀▀▀ █
|
|
||||||
█ ▄▀
|
|
||||||
█ █▀▀▀▀▀▀
|
|
||||||
▄▀▀▀▄ ▄▀▀▀▄
|
|
||||||
█ ▀▄▀ █
|
|
||||||
█ █ ▀▀ █
|
|
||||||
|
Before Width: | Height: | Size: 282 B |
70
templates/base.html
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
{% import "macros.html" as macros %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>
|
||||||
|
{% if current_path == "/" %}
|
||||||
|
{{ config.title }}
|
||||||
|
{% elif section %}
|
||||||
|
{{ section.title }} – {{ config.title }}
|
||||||
|
{% elif page %}
|
||||||
|
{{ page.title }} – {{ config.title }}
|
||||||
|
{% endif %}
|
||||||
|
</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta name="description" content="Blog von Jan Kremer" />
|
||||||
|
<meta name="author" content="Jan Kremer" />
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Jan Kremer" />
|
||||||
|
<meta name="keywords" content="Blog" />
|
||||||
|
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico" />
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||||||
|
<link rel="manifest" href="/site.webmanifest" />
|
||||||
|
{% block rss %}
|
||||||
|
<link rel="alternate"
|
||||||
|
type="application/atom+xml"
|
||||||
|
title="Atom feed"
|
||||||
|
href="{{ get_url(path=" atom.xml", trailing_slash=false) }}">
|
||||||
|
<link rel="alternate"
|
||||||
|
type="application/rss+xml"
|
||||||
|
title="RSS"
|
||||||
|
href="{{ get_url(path=" rss.xml", trailing_slash=false) }}">
|
||||||
|
{% endblock %}
|
||||||
|
<link rel="stylesheet" href="/main.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<a href="/" class="title">{{ load_data(path="templates/logo.svg") | safe }}Jan Kremer</a>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
{{ macros::menu_item(url="/blog/", name="Blog") }}
|
||||||
|
{{ macros::menu_item(url="/fotos/", name="Fotos") }}
|
||||||
|
{{ macros::menu_item(url="/about/", name="Über mich") }}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
{% block content %}
|
||||||
|
{% endblock content %}
|
||||||
|
</main>
|
||||||
|
<footer>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://creativecommons.org/publicdomain/zero/1.0/"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
aria-label="CC0: This work has been marked as dedicated to the public domain.">
|
||||||
|
{{ load_data(path="templates/cc.svg") | safe }}
|
||||||
|
{{ load_data(path="templates/zero.svg") | safe }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/" id="title">{{ load_data(path="templates/logo.svg") | safe }}Jan Kremer</a>
|
||||||
|
</li>
|
||||||
|
<li>2021–{{ now() | date(format="%Y") }}</li>
|
||||||
|
</ul>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
19
templates/blog-page.html
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<article>
|
||||||
|
<div class="dates">
|
||||||
|
<p>
|
||||||
|
<time datetime="{{ page.date }}">{{ page.date | date(format="%e. %B %Y", locale="de_DE") }}</time>
|
||||||
|
</p>
|
||||||
|
{% if page.updated %}
|
||||||
|
<p>
|
||||||
|
Aktualisiert: <time datetime="{{ page.updated }}">{{ page.updated | date(format="%e. %B %Y", locale="de_DE")
|
||||||
|
}}</time>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<h1>{{ page.title }}</h1>
|
||||||
|
<p class="lead">{{ page.description }}</p>
|
||||||
|
{{ page.content | safe }}
|
||||||
|
</article>
|
||||||
|
{% endblock content %}
|
||||||
18
templates/blog.html
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="list">
|
||||||
|
<ul>
|
||||||
|
<!-- If you are using pagination, section.pages will be empty.
|
||||||
|
You need to use the paginator object -->
|
||||||
|
{% for page in section.pages %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ page.permalink | safe }}" style="display: block">
|
||||||
|
<h2>{{ page.title }}</h2>
|
||||||
|
<p class="lead">{{ page.description | safe }}</p>
|
||||||
|
<time datetime="{{ page.date | date(format="%Y-%m-%d %H:%M") }}">{{ page.date | date(format="%e. %B %Y", locale="de_DE") }}</time>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 310 B |
21
templates/index.html
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="list">
|
||||||
|
<ul>
|
||||||
|
<!-- If you are using pagination, section.pages will be empty.
|
||||||
|
You need to use the paginator object -->
|
||||||
|
{% set blog = get_section(path="blog/_index.md") %}
|
||||||
|
{% set fotos = get_section(path="fotos/_index.md") %}
|
||||||
|
{% set all_pages = blog.pages | concat(with=fotos.pages) | sort(attribute="date") | reverse %}
|
||||||
|
{% for page in all_pages %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ page.permalink | safe }}" style="display: block">
|
||||||
|
<h2>{{ page.title }}</h2>
|
||||||
|
<p class="lead">{{ page.description | safe }}</p>
|
||||||
|
<time datetime="{{ page.date | date(format="%Y-%m-%d %H:%M") }}">{{ page.date | date(format="%e. %B %Y", locale="de_DE") }}</time>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
6
templates/macros.html
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{% macro menu_item(url, name) %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ url }}" {% if current_path==url %} class="active" aria-current="page" {% elif current_path is
|
||||||
|
starting_with(url) and url !="/" %} class="ancestor" aria-current="true" {% endif %}>{{ name }}</a>
|
||||||
|
</li>
|
||||||
|
{% endmacro %}
|
||||||
15
templates/shortcodes/figure.html
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<figure>
|
||||||
|
<img src="{{ src }}" {% if alt %}alt="{{ alt }}"{% endif %} {% if first %} fetchpriority="high" decoding="async" {%
|
||||||
|
else %} loading="lazy" decoding="async" {% endif %}>
|
||||||
|
{% if caption or alt %}
|
||||||
|
<figcaption>
|
||||||
|
<p>
|
||||||
|
{% if caption %}
|
||||||
|
{{ caption }}
|
||||||
|
{% elif alt %}
|
||||||
|
{{ alt }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
</figcaption>
|
||||||
|
{% endif %}
|
||||||
|
</figure>
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
|
@ -2,6 +2,7 @@
|
||||||
programs = {
|
programs = {
|
||||||
nixfmt.enable = true;
|
nixfmt.enable = true;
|
||||||
taplo.enable = true;
|
taplo.enable = true;
|
||||||
|
mdformat.enable = true;
|
||||||
djlint.enable = true;
|
djlint.enable = true;
|
||||||
};
|
};
|
||||||
settings.global.excludes = [
|
settings.global.excludes = [
|
||||||
|
|
|
||||||
85
zola.toml
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
# The URL the site will be built for
|
||||||
|
base_url = "https://jankremer.eu"
|
||||||
|
|
||||||
|
title = "Jan Kremer"
|
||||||
|
description = "Blog von Jan Kremer"
|
||||||
|
author = "Jan Kremer"
|
||||||
|
|
||||||
|
default_language = "de"
|
||||||
|
|
||||||
|
# Whether dotfiles at the root level of the output directory are preserved when (re)building the site.
|
||||||
|
# Enabling this also prevents the deletion of the output folder itself on rebuilds.
|
||||||
|
# preserve_dotfiles_in_output = true
|
||||||
|
|
||||||
|
generate_feeds = true
|
||||||
|
feed_filenames = ["atom.xml", "rss.xml"]
|
||||||
|
|
||||||
|
# Whether to build a search index to be used later on by a JavaScript library
|
||||||
|
build_search_index = true
|
||||||
|
|
||||||
|
[markdown]
|
||||||
|
|
||||||
|
# CSS class to add to external links (e.g. "external-link")
|
||||||
|
# external_links_class =
|
||||||
|
|
||||||
|
# Whether to set decoding="async" and loading="lazy" for all images
|
||||||
|
# When turned on, the alt text must be plain text.
|
||||||
|
# For example, `` is ok but `` isn’t ok
|
||||||
|
lazy_async_image = true
|
||||||
|
definition_list = true
|
||||||
|
bottom_footnotes = true
|
||||||
|
smart_punctuation = true
|
||||||
|
|
||||||
|
# When set to "true", support for GitHub-style alerts, a.k.a. callouts or admonitions, is enabled in the Markdown parser.
|
||||||
|
# For example, this Markdown syntax:
|
||||||
|
#
|
||||||
|
# > [!NOTE]
|
||||||
|
# > alert note
|
||||||
|
#
|
||||||
|
# will result in the following generated HTML:
|
||||||
|
#
|
||||||
|
# <blockquote class="markdown-alert-note">
|
||||||
|
# <p>alert note</p>
|
||||||
|
# </blockquote>
|
||||||
|
#
|
||||||
|
# where the CSS class name suffix may be `note`, `tip`, `important`, `warning`, or `caution`, depending on the alert type.
|
||||||
|
# Visual appearance depends on theme-level support; refer to your theme's documentation for more information.
|
||||||
|
github_alerts = false
|
||||||
|
|
||||||
|
# insert_anchor_links = "left"
|
||||||
|
|
||||||
|
[markdown.highlighting]
|
||||||
|
error_on_missing_language = true
|
||||||
|
|
||||||
|
# Whether to use inline hex colours (`inline`) or CSS classes (`class`)
|
||||||
|
style = "inline"
|
||||||
|
|
||||||
|
light_theme = "catppuccin-latte"
|
||||||
|
dark_theme = "catppuccin-macchiato"
|
||||||
|
|
||||||
|
# A list of files for additional JSON TextMate grammars
|
||||||
|
extra_grammars = []
|
||||||
|
|
||||||
|
[search]
|
||||||
|
# Whether to include the title of the page/section in the index
|
||||||
|
include_title = true
|
||||||
|
# Whether to include the description of the page/section in the index
|
||||||
|
include_description = false
|
||||||
|
# Whether to include the RFC3339 datetime of the page in the search index
|
||||||
|
include_date = false
|
||||||
|
# Whether to include the path of the page/section in the index (the permalink is always included)
|
||||||
|
include_path = false
|
||||||
|
# Whether to include the rendered content of the page/section in the index
|
||||||
|
include_content = true
|
||||||
|
# At which code point to truncate the content to. Useful if you have a lot of pages and the index would
|
||||||
|
# become too big to load on the site. Defaults to not being set.
|
||||||
|
# truncate_content_length = 100
|
||||||
|
|
||||||
|
# Whether to produce the search index as a javascript file or as a JSON file
|
||||||
|
# Accepted values:
|
||||||
|
# - "elasticlunr_javascript", "elasticlunr_json"
|
||||||
|
# - "fuse_javascript", "fuse_json"
|
||||||
|
index_format = "elasticlunr_javascript"
|
||||||
|
|
||||||
|
[extra]
|
||||||
|
# Put all your custom variables here
|
||||||