diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..313a3e4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,52 @@ +name: Deploy Hugo site to Pages + +on: + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +defaults: + run: + shell: bash + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@main + with: + submodules: true + fetch-depth: 0 + - name: Setup Pages + id: pages + uses: actions/configure-pages@main + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/flake-checker-action@main + - name: Build with Hugo + run: nix run . + - name: Upload to GitHub Pages + uses: actions/upload-pages-artifact@main + with: + path: ./public + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@main diff --git a/.gitignore b/.gitignore index 565c39b..088f2dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /public/ +.hugo_build.lock .direnv diff --git a/.helix/languages.toml b/.helix/languages.toml deleted file mode 100644 index 7b022c7..0000000 --- a/.helix/languages.toml +++ /dev/null @@ -1,7 +0,0 @@ -[[language]] -name = "css" -auto-format = false - -[[language]] -name = "html" -auto-format = false diff --git a/README.md b/README.md index 3491a2e..fa9426f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Webseite von Jan Kremer -[Webseite](https://jankremer.de) +[Webseite](https://jankremer.eu) ## Lizenz -CC0 1.0 | Jan Kremer | 2021–2026 +CC0 1.0 \| Jan Kremer \| 2021–2025 diff --git a/archetypes/blog.md b/archetypes/blog.md new file mode 100644 index 0000000..9b03f36 --- /dev/null +++ b/archetypes/blog.md @@ -0,0 +1,7 @@ +--- +title: {{ replace .Name "-" " " | title }} +date: {{ .Date }} +description: +tags: +draft: true +--- diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..29346c2 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ +--- +title: {{ replace .Name "-" " " | title }} +date: {{ .Date }} +draft: true +--- diff --git a/archetypes/photos.md b/archetypes/photos.md new file mode 100644 index 0000000..9b03f36 --- /dev/null +++ b/archetypes/photos.md @@ -0,0 +1,7 @@ +--- +title: {{ replace .Name "-" " " | title }} +date: {{ .Date }} +description: +tags: +draft: true +--- diff --git a/static/main.css b/assets/css/main.css similarity index 96% rename from static/main.css rename to assets/css/main.css index 7aab05c..7622b10 100644 --- a/static/main.css +++ b/assets/css/main.css @@ -157,7 +157,6 @@ svg { margin: 0.5rem; vertical-align: middle; fill: light-dark(var(--uchu-yin), var(--uchu-yang)); - @media (prefers-color-scheme: dark) { path { fill: white; @@ -207,7 +206,7 @@ article { height: auto; margin: 0; - figcaption>p { + figcaption > p { margin: 0.25rem 0 2rem; font-family: var(--sans-serif); text-align: center; @@ -219,7 +218,7 @@ article { height: auto; } - >p:nth-of-type(2)::first-letter { + > p:nth-of-type(2)::first-letter { font-size: 3.3rem; float: left; line-height: 3rem; @@ -303,7 +302,6 @@ footer { width: 0.75rem; vertical-align: middle; margin: 0 1px; - @media (prefers-color-scheme: dark) { path { fill: white; @@ -346,14 +344,24 @@ footer { } } -.giallo { - border: 1px solid light-dark(var(--uchu-gray), var(--uchu-dark-gray)); +code { + font-family: var(--mono); border-radius: 0.3rem; + font-size: 0.8rem; + margin: 0; + padding: 0 1rem; } -.giallo-l { +.highlight { font-family: var(--mono); - padding: 1rem; + border: 1px solid light-dark(var(--uchu-gray), var(--uchu-dark-gray)); + border-radius: 0.3rem; + margin: 1rem 0; + padding: 0 1rem; overflow: auto; - display: block; + + pre { + margin: 0; + padding: 0; + } } diff --git a/content/_index.md b/content/_index.md index e0db12e..a845151 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,6 +1,2 @@ -+++ -title = "Jan Kremer" -sort_by = "date" -template = "index.html" -page_template = "blog-page.html" -+++ +--- +--- diff --git a/content/about.md b/content/about.md index 6695b6a..78e227e 100644 --- a/content/about.md +++ b/content/about.md @@ -1,13 +1,12 @@ -+++ -title = "Über mich" -date = 2024-12-12 -updated = 2026-03-17 -+++ +--- +title: Über mich +date: 2024-12-12 +--- -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 bin *Apotheker*. Manchmal schreibe ich über Technik und Software die ich benutze. Wenn ich nicht gerade lerne, mache ich gerne Sport, vor allem Joggen, Kraftsport und Tanzen. ## Kontakt -[mail@jankremer.de](mailto:mail@jankremer.de) +[mail@jankremer.eu](mailto:mail@jankremer.eu) diff --git a/content/blog/_index.md b/content/blog/_index.md deleted file mode 100644 index c504e1b..0000000 --- a/content/blog/_index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Blog" -sort_by = "date" -template = "blog.html" -page_template = "blog-page.html" -+++ diff --git a/content/blog/discord.md b/content/blog/discord.md index 604c168..9fcd7e1 100644 --- a/content/blog/discord.md +++ b/content/blog/discord.md @@ -1,23 +1,13 @@ -+++ -title = "Discord" -date = 2026-02-16T19:45:02+01:00 -tags = [ "micro" ] -+++ +--- +title: Discord +date: 2026-02-16T19:45:02+01:00 +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!** -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. diff --git a/content/blog/email.md b/content/blog/email.md index addc03c..6197f32 100644 --- a/content/blog/email.md +++ b/content/blog/email.md @@ -1,9 +1,8 @@ -+++ -title = "Email" -date = 2026-02-20T15:46:52+01:00 -tags = [ "micro" ] -+++ +--- +title: Email +date: 2026-02-20T15:46:52+01:00 +description: +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. diff --git a/content/blog/github.md b/content/blog/github.md deleted file mode 100644 index 9f6d0c7..0000000 --- a/content/blog/github.md +++ /dev/null @@ -1,9 +0,0 @@ -+++ -title = "Leaving GitHub" -date = 2026-03-27 -description = "" -tags = [] -draft = true -+++ - -About a year ago I wrote a post about my self hosting journey which ended with me shutting down my server diff --git a/content/blog/markdown-tables.md b/content/blog/markdown-tables.md index 94c92e3..222ca2f 100644 --- a/content/blog/markdown-tables.md +++ b/content/blog/markdown-tables.md @@ -1,14 +1,15 @@ -+++ -title = "Markdown Tables Suck" -date = 2023-12-25T16:28:52+01:00 -tags = [ "micro" ] -+++ +--- +title: Markdown Tables Suck +date: 2023-12-25T16:28:52+01:00 +tags: + - micro +--- -Tables are arguably the worst part of Markdown. No horizontal lines except for -the mandatory one at the top. The only feature is the possibility to align -cells. +Tables are arguably the worst part of Markdown. +No horizontal lines except for the mandatory one at the top. +The only feature is the possibility to align cells. 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. But -sometimes I need more customizability. +Don't get me wrong. It's nice to have a simple tool for simple tables. +But sometimes I need more customizability. diff --git a/content/blog/selbsthosting.md b/content/blog/selbsthosting.md index 27ec044..9296d42 100644 --- a/content/blog/selbsthosting.md +++ b/content/blog/selbsthosting.md @@ -1,9 +1,12 @@ -+++ -title = "Selbsthosting" -date = 2025-04-14 -description = "Kleiner Computer, große Pläne" -tags = [ "selbsthosting", "nixos", "git" ] -+++ +--- +title: Selbsthosting +date: 2025-04-14 +description: Kleiner Computer, große Pläne +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. @@ -35,7 +38,7 @@ Das Betriebssystem meiner Wahl ist [NixOS](https://nixos.org/). Hauptsächlich, **Deklarativ** bedeutet: Ich beschreibe in einer Konfigurationsdatei, _was_ das System tun soll – nicht _wie_. Dadurch ist mein Setup reproduzierbar, nachvollziehbar und schnell wiederherstellbar. -Viele Dienste lassen sich mit nur wenigen Zeilen Code aktivieren. ~~Ich habe meine Konfiguration auf GitHub veröffentlicht, falls jemand reinschauen oder sie als Grundlage verwenden möchte.~~ +Viele Dienste lassen sich mit nur wenigen Zeilen Code aktivieren. Ich habe [meine Konfiguration](https://github.com/jukremer/nix-config) auf GitHub veröffentlicht, falls jemand reinschauen oder sie als Grundlage verwenden möchte. ### Tailscale @@ -69,4 +72,4 @@ Ein weiterer Grund: Ich habe den Server _kaum genutzt_. Meine iCloud läuft noch Aber: Ich habe in den letzten 8 Monaten extrem viel gelernt – über Linux, Netzwerke, NixOS, Systemadministration, Sicherheit und mehr. Das Projekt hat mir gezeigt, wie viel man aus einem alten Mini-PC herausholen kann. Vielleicht wird der Server eines Tages reaktiviert – in neuer Form. Für den Moment war es vor allem: _ein spannendes Lernprojekt_. -Falls du Fragen hast oder selbst mit Selbsthosting starten willst: Schreib mir gern ~~oder schau dir meine Konfiguration auf GitHub an~~. Vielleicht hilft dir mein Weg ja bei deinem Einstieg. +Falls du Fragen hast oder selbst mit Selbsthosting starten willst: Schreib mir gern oder schau dir [meine Konfiguration](https://github.com/jukremer/nix-config) auf GitHub an. Vielleicht hilft dir mein Weg ja bei deinem Einstieg. diff --git a/content/blog/still-self-hosting.md b/content/blog/still-self-hosting.md deleted file mode 100644 index 5336f00..0000000 --- a/content/blog/still-self-hosting.md +++ /dev/null @@ -1,9 +0,0 @@ -+++ -title = "Still self hosting" -date = 2026-03-27 -description = "Guess who's back" -tags = [ "selbsthosting", "nixos", "git" ] -draft = true -+++ - -About a year ago I wrote a post about my self hosting journey which ended with me shutting down my server diff --git a/content/blog/timestamps.md b/content/blog/timestamps.md index 9009b05..4723039 100644 --- a/content/blog/timestamps.md +++ b/content/blog/timestamps.md @@ -1,17 +1,16 @@ -+++ -title= "Use Timestamps" -date= 2023-11-15T10:12:30+01:00 -tags= ["micro"] -+++ +--- +title: Use Timestamps +date: 2023-11-15T10:12:30+01:00 +tags: + - micro +--- -Every blog post should include a timestamp. In fact, this extends to almost -anything online and even offline. +Every blog post should include a timestamp. +In fact, this extends to almost anything online and even offline. -Also, don't make me look for the date. Put the date as obvious as possible, -preferably at the beginning of the post. +Also, don't make me look for the date. +Put the date as obvious as possible, 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. Only when I -copied the URL to complain about it I discovered the date there. Safari hides -most of the URL by default. +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. +Only when I copied the URL to complain about it I discovered the date there. +Safari hides most of the URL by default. diff --git a/content/btc.md b/content/btc.md index c5511a3..fd5fafc 100644 --- a/content/btc.md +++ b/content/btc.md @@ -1,8 +1,8 @@ -+++ -title = "Bitcoin" -date = 2022-12-10 -tags = [ "crypto" ] -+++ +--- +title: Bitcoin +date: 2022-12-10 +tags: [crypto] +--- ## Address @@ -17,9 +17,9 @@ bc1qf8qjt4gut2la8k4v3emfv7wrj6f3pfcjrj3slplnwrldkz7hqmaqaju7ym ## OpenAlias ```txt -jankremer.de +jankremer.eu ``` ```txt -btc.jankremer.de +btc.jankremer.eu ``` diff --git a/content/eth.md b/content/eth.md index 7f0cb51..210d534 100644 --- a/content/eth.md +++ b/content/eth.md @@ -1,8 +1,8 @@ -+++ -title = "Ethereum" -date = 2022-12-10 -tags = [ "crypto" ] -+++ +--- +title: Ethereum +date: 2022-12-10 +tags: [crypto] +--- ## Address diff --git a/content/fotos/_index.md b/content/fotos/_index.md deleted file mode 100644 index e2e2303..0000000 --- a/content/fotos/_index.md +++ /dev/null @@ -1,6 +0,0 @@ -+++ -title = "Fotos" -sort_by = "date" -template = "blog.html" -page_template = "blog-page.html" -+++ diff --git a/content/fotos/abendliche-bewoelkung/index.md b/content/fotos/abendliche-bewoelkung/index.md index 2bd2054..5ba0487 100644 --- a/content/fotos/abendliche-bewoelkung/index.md +++ b/content/fotos/abendliche-bewoelkung/index.md @@ -1,8 +1,12 @@ -+++ -title = "Abendliche Bewölkung" -date = 2023-07-19T10:48:33+02:00 -description = "über Regensburg" -tags = ["fotos", "regensburg"] -+++ +--- +title: Abendliche Bewölkung +date: 2023-07-19T10:48:33+02:00 +description: "über Regensburg" +tags: [fotos, regensburg] +--- -{{ figure(src="./abendliche-bewoelkung.webp", alt="Abendliche Bewölkung über Regensburg")}} +{{< figure +src="./abendliche-bewoelkung.webp" +alt="Abendliche Bewölkung über Regensburg" +caption="Abendliche Bewölkung über Regensburg" +fetchpriority="high" >}} diff --git a/content/fotos/ustronie-morskie/index.md b/content/fotos/ustronie-morskie/index.md index d51dbf0..7dd98c5 100644 --- a/content/fotos/ustronie-morskie/index.md +++ b/content/fotos/ustronie-morskie/index.md @@ -1,21 +1,42 @@ -+++ -title = "Ustronie Morskie" -description = "Polen" -date = 2025-11-15T21:53:01+01:00 -tags = ["fotos", "polen"] -+++ +--- +title: Ustronie Morskie +description: Polen +date: 2025-11-15T21:53:01+01:00 +tags: [fotos, polen] +--- -{{ figure(src="holzwall.jpeg" alt="Holzwall" caption="Holzwall" -first=true) }} +{{< figure +src="holzwall.jpeg" +alt="Holzwall" +caption="Holzwall" +fetchpriority="high" >}} -{{ figure(src="pfote.jpeg" alt="Pfote" caption="Pfote") }} +{{< figure +src="pfote.jpeg" +alt="Pfote" +caption="Pfote" >}} -{{ figure(src="nala.jpeg" alt="Nala" caption="Nala") }} +{{< figure +src="nala.jpeg" +alt="Nala" +caption="Nala" >}} -{{ figure(src="pier.jpeg" alt="Pier" caption="Pier") }} +{{< figure +src="pier.jpeg" +alt="Pier" +caption="Pier" >}} -{{ figure(src="dom-1.jpeg" alt="Kolberger Dom" caption="Kolberger Dom")}} +{{< figure +src="Dom-1.jpeg" +alt="Kolberger Dom" +caption="Kolberger Dom" >}} -{{ figure(src="dom-2.jpeg" alt="Kolberger Dom" caption="Kolberger Dom")}} +{{< figure +src="dom-2.jpeg" +alt="Kolberger Dom" +caption="Kolberger Dom" >}} -{{ figure(src="moeve.jpeg" alt="Möve" caption="Möve")}} +{{< figure +src="moeve.jpeg" +alt="Möve" +caption="Möve" >}} diff --git a/content/xmr.md b/content/xmr.md index e1789f6..e3b033b 100644 --- a/content/xmr.md +++ b/content/xmr.md @@ -1,8 +1,8 @@ -+++ -title = "Monero" -date = 2022-12-10 -tags = [ "crypto" ] -+++ +--- +title: Monero +date: 2022-12-10 +tags: [crypto] +--- ## Address @@ -17,9 +17,9 @@ tags = [ "crypto" ] ## OpenAlias ```txt -jankremer.de +jankremer.eu ``` ```txt -xmr.jankremer.de +xmr.jankremer.eu ``` diff --git a/flake.lock b/flake.lock index c7cfc97..22f9724 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1771892004, - "narHash": "sha256-V96pa9awm6hjnf8yGJeoC4uOirYDEPsaBbuU0stROQI=", + "lastModified": 1768364046, + "narHash": "sha256-PDFfpswLiuG/DcadTBb7dEfO3jX1fcGlCD4ZKSkC0M8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e4522be6bdf1600682a6f383434b057b2d77a37", + "rev": "ea30586ee015f37f38783006a9bc9e4aa64d7d61", "type": "github" }, "original": { @@ -44,11 +44,11 @@ ] }, "locked": { - "lastModified": 1770228511, - "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", + "lastModified": 1768158989, + "narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", + "rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 424ac44..fd9a551 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Blog von Jan Kremer"; + description = "Hugo website"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; treefmt = { @@ -24,10 +24,10 @@ { devShells = eachSystem (pkgs: { default = pkgs.mkShell { - name = "Zola website"; + name = "Hugo website"; buildInputs = with pkgs; [ - zola - vscode-langservers-extracted + go + hugo ]; }; }); @@ -42,28 +42,30 @@ default = { type = "app"; meta = { - description = "Build website"; - homepage = "https://jankremer.de"; + description = "Build my blog"; + homepage = "https://jankremer.eu"; license = nixpkgs.lib.licenses.cc0; }; program = (pkgs.writeShellScript "build-website" '' set -e - ${pkgs.zola}/bin/zola build --minify + ${pkgs.hugo}/bin/hugo --minify '').outPath; }; deploy = { type = "app"; meta = { - description = "Deploy to nimbus (Oracle)"; - homepage = "https://jankremer.de"; + description = "Deploy to Codeberg"; + homepage = "https://kremer.codeberg.page"; license = nixpkgs.lib.licenses.cc0; }; program = (pkgs.writeShellScript "deploy-website" '' set -e - ${pkgs.zola}/bin/zola build --minify - ${pkgs.rsync}/bin/rsync -avP --delete public/ jan@jankremer.de:/var/www/jankremer.de/ + ${pkgs.hugo}/bin/hugo --minify + cd public + git commit --all -m "Deploy" + git push '').outPath; }; }); diff --git a/hugo.toml b/hugo.toml new file mode 100644 index 0000000..c866ab6 --- /dev/null +++ b/hugo.toml @@ -0,0 +1,50 @@ +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 = "/" +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'] diff --git a/templates/cc.svg b/layouts/_partials/cc.svg similarity index 100% rename from templates/cc.svg rename to layouts/_partials/cc.svg diff --git a/layouts/_partials/footer.html b/layouts/_partials/footer.html new file mode 100644 index 0000000..f1bce7b --- /dev/null +++ b/layouts/_partials/footer.html @@ -0,0 +1,25 @@ + diff --git a/templates/git.svg b/layouts/_partials/git.svg similarity index 100% rename from templates/git.svg rename to layouts/_partials/git.svg diff --git a/layouts/_partials/head.html b/layouts/_partials/head.html new file mode 100644 index 0000000..f58d3f2 --- /dev/null +++ b/layouts/_partials/head.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + {{ if .IsHome }} + {{ site.Title }} +{{ else }} + {{ printf "%s – %s" .Title + site.Title + }} + {{ end }} + +{{ partialCached "head/css.html" . }} +{{ partialCached "head/js.html" . }} +{{ with .OutputFormats.Get "rss" }} +{{ printf `` .Rel .MediaType.Type .Permalink site.Title | safeHTML }} +{{ end }}{{ with .OutputFormats.Get "atom" }} +{{ printf `` .Rel .MediaType.Type .Permalink site.Title | safeHTML }} +{{ end }} diff --git a/layouts/_partials/head/css.html b/layouts/_partials/head/css.html new file mode 100644 index 0000000..2b0820f --- /dev/null +++ b/layouts/_partials/head/css.html @@ -0,0 +1,14 @@ +{{- with resources.Get "css/main.css" }} +{{- if eq hugo.Environment +"development" +}} + +{{- else }} +{{- with . | minify | fingerprint }} + +{{- end }} +{{- end }} +{{- end }} diff --git a/layouts/_partials/head/js.html b/layouts/_partials/head/js.html new file mode 100644 index 0000000..925267e --- /dev/null +++ b/layouts/_partials/head/js.html @@ -0,0 +1,16 @@ +{{- with resources.Get "js/main.js" }} +{{- if eq hugo.Environment "development" }} +{{- with . | js.Build }} + +{{- end }} +{{- else }} +{{- $opts := dict "minify" true }} +{{- with . | js.Build +$opts | fingerprint +}} + +{{- end }} +{{- end }} +{{- end }} diff --git a/layouts/_partials/header.html b/layouts/_partials/header.html new file mode 100644 index 0000000..e3dfeea --- /dev/null +++ b/layouts/_partials/header.html @@ -0,0 +1,2 @@ +{{ partial "logo.svg" . }}{{ site.Title }} +{{ partial "menu.html" (dict "menuID" "main" "page" .) }} diff --git a/templates/logo.svg b/layouts/_partials/logo.svg similarity index 100% rename from templates/logo.svg rename to layouts/_partials/logo.svg diff --git a/layouts/_partials/menu.html b/layouts/_partials/menu.html new file mode 100644 index 0000000..da71505 --- /dev/null +++ b/layouts/_partials/menu.html @@ -0,0 +1,47 @@ +{{- /* + 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 }} + +{{- 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 }} +
  • + {{ $name }} + {{- with .Children }} + + {{- end }} +
  • +{{- end }} +{{- end }} diff --git a/layouts/_partials/terms.html b/layouts/_partials/terms.html new file mode 100644 index 0000000..b10860d --- /dev/null +++ b/layouts/_partials/terms.html @@ -0,0 +1,24 @@ +{{- /* 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 }} +
    + +
    +{{- end }} diff --git a/templates/zero.svg b/layouts/_partials/zero.svg similarity index 100% rename from templates/zero.svg rename to layouts/_partials/zero.svg diff --git a/layouts/baseof.html b/layouts/baseof.html new file mode 100644 index 0000000..a949b43 --- /dev/null +++ b/layouts/baseof.html @@ -0,0 +1,16 @@ + + + {{ partial "head.html" . }} + +
    + {{ partial "header.html" . }} +
    +
    + {{ block "main" . }}{{ end }} +
    + + + diff --git a/layouts/home.html b/layouts/home.html new file mode 100644 index 0000000..50eeecd --- /dev/null +++ b/layouts/home.html @@ -0,0 +1,21 @@ +{{ define "main" }} +{{ .Content }} +{{ $pages := .Paginate (where +.Site.RegularPages "Type" "ne" "page") +}} +
    + +
    +{{ end }} diff --git a/layouts/list.atom.atom b/layouts/list.atom.atom new file mode 100644 index 0000000..1085f74 --- /dev/null +++ b/layouts/list.atom.atom @@ -0,0 +1,60 @@ +{{- $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 }} + + {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }} + + + {{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + {{ .Permalink }} + + {{ with $authorName }}{{ . }}{{ end }} + {{ with $authorEmail }}{{ . }}{{ end }} + + Hugo + {{- range $pages }} + + {{ .Title }} + + {{ .Permalink }} + + {{ with $authorName }}{{ . }}{{ end }} + {{ with $authorEmail }}{{ . }}{{ end }} + + {{ .Date.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + {{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }} + + {{ .Content | transform.XMLEscape | safeHTML }} + + + {{- end }} + diff --git a/layouts/list.html b/layouts/list.html new file mode 100644 index 0000000..c62e475 --- /dev/null +++ b/layouts/list.html @@ -0,0 +1,18 @@ +{{ define "main" }} +{{ .Content }} +
    + +
    +{{ end }} diff --git a/layouts/list.rss.xml b/layouts/list.rss.xml new file mode 100644 index 0000000..3860ac1 --- /dev/null +++ b/layouts/list.rss.xml @@ -0,0 +1,63 @@ +{{- $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 "" | safeHTML }} + + + {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} on {{ end }}{{ .Site.Title }}{{ end }} + {{ .Permalink }} + Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{ . }} {{ end }}{{ end }}on {{ .Site.Title }} + Hugo + {{ site.Language.LanguageCode }}{{ with $authorEmail }} + {{.}}{{ with $authorName }} ({{ . }}){{ end }}{{ end }}{{ with $authorEmail }} + {{ . }}{{ with $authorName }} ({{ . }}){{ end }}{{ end }}{{ with .Site.Copyright }} + {{ . }}{{ end }}{{ if not .Date.IsZero }} + {{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} + {{- with .OutputFormats.Get "RSS" }} + {{ printf "" .Permalink .MediaType | safeHTML }} + {{- end }} + {{- range $pages }} + + {{ .Title }} + {{ .Permalink }} + {{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} + {{- with $authorEmail }}{{ . }}{{ with $authorName }} ({{ . }}){{ end }}{{ end }} + {{ .Permalink }} + + <strong>{{ .Description | transform.XMLEscape | safeHTML }}</strong> + + {{ .Content | transform.XMLEscape | safeHTML }} + + + {{- end }} + + diff --git a/layouts/single.html b/layouts/single.html new file mode 100644 index 0000000..9ce735a --- /dev/null +++ b/layouts/single.html @@ -0,0 +1,20 @@ +{{ define "main" }} +
    + {{ $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" }} +
    +

    + Editiert: + +

    +

    + +

    +
    +

    {{ .Title }}

    +

    {{ .Description }}

    + {{ .Content }} +
    +{{ end }} diff --git a/static/pharmacist-0.png b/static/pharmacist-0.png new file mode 100644 index 0000000..dec2d66 Binary files /dev/null and b/static/pharmacist-0.png differ diff --git a/static/pharmacist-0.txt b/static/pharmacist-0.txt new file mode 100644 index 0000000..a9f5d1d --- /dev/null +++ b/static/pharmacist-0.txt @@ -0,0 +1,15 @@ + ▄▄▀▀▄▀▀▀▀▀▀▀▀▄▄ + ▄▀ █ + ▄▀ ▄▄▄ █ + █ ▄▀▀▀ ▀▀▀▀▀▀▀█▀ + ▀▄▄█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄ + █ █ █ + ▀█▀▄ ▄▀▄ ▄▀ + █ ▀▀▀▀▀ ▀▀▀▀█ + █ █ + █ ▀▀▀▀ █ + █ ▄▀ + █ █▀▀▀▀▀▀ +▄▀▀▀▄ ▄▀▀▀▄ +█ ▀▄▀ █ +█ █ ▀▀ █ diff --git a/static/pharmacist-0.webp b/static/pharmacist-0.webp new file mode 100644 index 0000000..a86eebb Binary files /dev/null and b/static/pharmacist-0.webp differ diff --git a/static/pharmacist-1-blue.png b/static/pharmacist-1-blue.png new file mode 100644 index 0000000..ff841be Binary files /dev/null and b/static/pharmacist-1-blue.png differ diff --git a/static/pharmacist-1-bluegray.png b/static/pharmacist-1-bluegray.png new file mode 100644 index 0000000..1305e24 Binary files /dev/null and b/static/pharmacist-1-bluegray.png differ diff --git a/static/pharmacist-1-darkblue.png b/static/pharmacist-1-darkblue.png new file mode 100644 index 0000000..35c1f8c Binary files /dev/null and b/static/pharmacist-1-darkblue.png differ diff --git a/static/pharmacist-1-darkgreen.png b/static/pharmacist-1-darkgreen.png new file mode 100644 index 0000000..8787dac Binary files /dev/null and b/static/pharmacist-1-darkgreen.png differ diff --git a/static/pharmacist-1-green.png b/static/pharmacist-1-green.png new file mode 100644 index 0000000..660f597 Binary files /dev/null and b/static/pharmacist-1-green.png differ diff --git a/static/pharmacist-1-lightblue.png b/static/pharmacist-1-lightblue.png new file mode 100644 index 0000000..35e140d Binary files /dev/null and b/static/pharmacist-1-lightblue.png differ diff --git a/static/pharmacist-1-lightgreen.png b/static/pharmacist-1-lightgreen.png new file mode 100644 index 0000000..79b133f Binary files /dev/null and b/static/pharmacist-1-lightgreen.png differ diff --git a/static/pharmacist-1-lightviolet.png b/static/pharmacist-1-lightviolet.png new file mode 100644 index 0000000..6d63272 Binary files /dev/null and b/static/pharmacist-1-lightviolet.png differ diff --git a/static/pharmacist-1-orange.png b/static/pharmacist-1-orange.png new file mode 100644 index 0000000..6dcb006 Binary files /dev/null and b/static/pharmacist-1-orange.png differ diff --git a/static/pharmacist-1-pink.png b/static/pharmacist-1-pink.png new file mode 100644 index 0000000..7604d61 Binary files /dev/null and b/static/pharmacist-1-pink.png differ diff --git a/static/pharmacist-1-red.png b/static/pharmacist-1-red.png new file mode 100644 index 0000000..455f794 Binary files /dev/null and b/static/pharmacist-1-red.png differ diff --git a/static/pharmacist-1-violet.png b/static/pharmacist-1-violet.png new file mode 100644 index 0000000..f3338e8 Binary files /dev/null and b/static/pharmacist-1-violet.png differ diff --git a/static/pharmacist-1-yellow.png b/static/pharmacist-1-yellow.png new file mode 100644 index 0000000..8aa3e4a Binary files /dev/null and b/static/pharmacist-1-yellow.png differ diff --git a/static/pharmacist-1-yellow.webp b/static/pharmacist-1-yellow.webp new file mode 100644 index 0000000..b7258b4 Binary files /dev/null and b/static/pharmacist-1-yellow.webp differ diff --git a/static/skier-1-1.png b/static/skier-1-1.png new file mode 100644 index 0000000..085eb45 Binary files /dev/null and b/static/skier-1-1.png differ diff --git a/static/skier-1-2.png b/static/skier-1-2.png new file mode 100644 index 0000000..8addb74 Binary files /dev/null and b/static/skier-1-2.png differ diff --git a/static/skier-1-3.png b/static/skier-1-3.png new file mode 100644 index 0000000..b907cfa Binary files /dev/null and b/static/skier-1-3.png differ diff --git a/templates/404.html b/templates/404.html deleted file mode 100644 index ef8f50e..0000000 --- a/templates/404.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - 404 – {{ config.title }} - - - - - - - - - - - - - -
    - {{ load_data(path="templates/logo.svg") | safe }}Jan Kremer - -
    -
    -
    -

    404 Not Found

    -
    -
    - - - diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index c7f6a6a..0000000 --- a/templates/base.html +++ /dev/null @@ -1,70 +0,0 @@ -{% import "macros.html" as macros %} - - - - - - {% if current_path == "/" %} - {{ config.title }} - {% elif section %} - {{ section.title }} – {{ config.title }} - {% elif page %} - {{ page.title }} – {{ config.title }} - {% endif %} - - - - - - - - - - - - {% block rss %} - - - {% endblock %} - - - -
    - {{ load_data(path="templates/logo.svg") | safe }}Jan Kremer - -
    -
    - {% block content %} - {% endblock content %} -
    - - - diff --git a/templates/blog-page.html b/templates/blog-page.html deleted file mode 100644 index 680bead..0000000 --- a/templates/blog-page.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% block content %} -
    -
    -

    - -

    - {% if page.updated %} -

    - Aktualisiert: -

    - {% endif %} -
    -

    {{ page.title }}

    -

    {{ page.description }}

    - {{ page.content | safe }} -
    -{% endblock content %} diff --git a/templates/blog.html b/templates/blog.html deleted file mode 100644 index c4b4f0c..0000000 --- a/templates/blog.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "base.html" %} -{% block content %} -
    - -
    -{% endblock content %} diff --git a/templates/index.html b/templates/index.html deleted file mode 100644 index b2afb98..0000000 --- a/templates/index.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base.html" %} -{% block content %} -
    - -
    -{% endblock content %} diff --git a/templates/macros.html b/templates/macros.html deleted file mode 100644 index b1750b5..0000000 --- a/templates/macros.html +++ /dev/null @@ -1,6 +0,0 @@ -{% macro menu_item(url, name) %} -
  • - {{ name }} -
  • -{% endmacro %} diff --git a/templates/shortcodes/figure.html b/templates/shortcodes/figure.html deleted file mode 100644 index c4ff249..0000000 --- a/templates/shortcodes/figure.html +++ /dev/null @@ -1,15 +0,0 @@ -
    - - {% if caption or alt %} -
    -

    - {% if caption %} - {{ caption }} - {% elif alt %} - {{ alt }} - {% endif %} -

    -
    - {% endif %} -
    diff --git a/treefmt.nix b/treefmt.nix index 9bc011c..7205383 100644 --- a/treefmt.nix +++ b/treefmt.nix @@ -2,7 +2,6 @@ programs = { nixfmt.enable = true; taplo.enable = true; - mdformat.enable = true; djlint.enable = true; }; settings.global.excludes = [ diff --git a/zola.toml b/zola.toml deleted file mode 100644 index 004c09b..0000000 --- a/zola.toml +++ /dev/null @@ -1,85 +0,0 @@ -# The URL the site will be built for -base_url = "https://jankremer.de" - -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, `![xx](...)` is ok but `![*x*x](...)` 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: -# -#
    -#

    alert note

    -#
    -# -# 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