diff --git a/.gitignore b/.gitignore
index f4a575c..c4b387a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,2 @@
.hugo_build.lock
public/
-public.tar.gz
-auth.txt
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..521161a
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "themes/etch"]
+ path = themes/etch
+ url = https://github.com/LukasJoswiak/etch.git
diff --git a/.woodpecker.yml b/.woodpecker.yml
index 6ce20f7..74ef768 100644
--- a/.woodpecker.yml
+++ b/.woodpecker.yml
@@ -1,9 +1,9 @@
platform: 'linux/amd64'
-branches: 'main'
+branch: 'main'
pipeline:
release:
- image: 'hugomods/hugo:latest'
+ image: 'klakegg/hugo:alpine'
commands:
- hugo
- 'cd public && tar czvf ../public.tar.gz *'
@@ -13,4 +13,4 @@ pipeline:
secrets:
- 'api_key'
commands:
- - 'curl -XPOST --fail -s -H "Authorization: Bearer $API_KEY" -T public.tar.gz https://rustybever.be/_root'
+ - 'curl -XPOST --fail -s -H "Authorization: Bearer $API_KEY" -T public.tar.gz https://rustybever.be/api/deploy'
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..61eb75f
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,24 @@
+FROM alpine:3.15.3 AS builder
+
+RUN apk update && \
+ apk add --no-cache \
+ hugo
+
+WORKDIR /app
+
+COPY . ./
+
+# Build the site
+RUN hugo
+
+
+FROM nginx:1.21.6-alpine
+
+ENV MATRIX_SERVER=matrix.rustybever.be:443 \
+ MATRIX_CLIENT_SERVER=https://matrix.rustybever.be
+
+COPY nginx/nginx.conf /etc/nginx/nginx.conf
+COPY nginx/default.conf /etc/nginx/conf.d/default.conf
+COPY nginx/*.conf.template /etc/nginx/templates/
+
+COPY --from=builder /app/public /usr/share/nginx/html
diff --git a/Justfile b/Justfile
deleted file mode 100644
index 62e2885..0000000
--- a/Justfile
+++ /dev/null
@@ -1,13 +0,0 @@
-serve:
- hugo serve -D
-
-publish:
- rm -f public.tar.gz
- hugo build
- cd public && tar czvf ../public.tar.gz *
- curl \
- -XPOST \
- --fail \
- -H @./auth.txt \
- -T public.tar.gz \
- https://rustybever.be/_root
diff --git a/config.toml b/config.toml
index bf4ce3f..eb755cf 100644
--- a/config.toml
+++ b/config.toml
@@ -1,56 +1,35 @@
baseURL = "https://rustybever.be"
title = "The Rusty Bever"
-theme = "rb"
+theme = "etch"
languageCode = "en-US"
enableInlineShortcodes = true
pygmentsCodeFences = true
pygmentsUseClasses = true
-[taxonomies]
-project = "projects"
-tag = "tags"
-
[params]
description = "The Rusty Bever"
- copyright = "Copyright © 2025 Jef Roosens"
+ copyright = "Copyright © 2022 Jef Roosens"
dark = "auto"
highlight = true
[menu]
[[menu.main]]
- identifier = "blog"
- name = "blog"
- title = "blog"
- url = "/blog/"
- weight = 1
-
- [[menu.main]]
- identifier = "projects"
- name = "projects"
- title = "projects"
- url = "/dev/"
+ identifier = "posts"
+ name = "posts"
+ title = "posts"
+ url = "/"
weight = 10
- [[menu.main]]
- identifier = "garden"
- name = "garden"
- title = "garden"
- url = "/garden/"
- weight = 20
-
[[menu.main]]
identifier = "about"
name = "about"
title = "about"
url = "/about/"
- weight = 40
+ weight = 20
-# [permalinks]
-# blog = "/b/:filename/"
+[permalinks]
+ posts = "/:title/"
[markup.goldmark.renderer]
# Allows HTML in Markdown
unsafe = true
-
-[services.rss]
-limit = 15
diff --git a/content/_index.md b/content/_index.md
index 1dd64e2..914b1f9 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -1,14 +1,5 @@
---
title: "Home"
---
-
-Welcome! I'm Jef, a Belgian CS student looking for his place on the internet.
-
-I develop most of my projects on my personal [Gitea](/gitea) instance, but I'm
-also present on GitHub, [GitLab](/gitlab) &
-[Codeberg](/codeberg). You can contact me on [Matrix](/matrix).
-
-Besides that, I love music, hanging out with friends, and whisky! If you're
-interested, I have a more in-depth [about](/about) page :) I also maintain a
-few packages on the [AUR](/aur).
-
+Welcome to my site! You can learn more about who I am [here](/about), or have a
+look at my posts below :)
diff --git a/content/about/beaver-computer.jpg b/content/about/beaver-computer.jpg
deleted file mode 100644
index 1afff61..0000000
Binary files a/content/about/beaver-computer.jpg and /dev/null differ
diff --git a/content/about/gentse-feesten-alpaca.jpg b/content/about/gentse-feesten-alpaca.jpg
deleted file mode 100644
index f866d2c..0000000
Binary files a/content/about/gentse-feesten-alpaca.jpg and /dev/null differ
diff --git a/content/about/index.md b/content/about/index.md
index 2683fec..429d997 100644
--- a/content/about/index.md
+++ b/content/about/index.md
@@ -20,9 +20,14 @@ Trackmania Esports scene!
Music has been an important part of my life for many years. I'm one of those
people that listens to music multiple hours a day, during studying, cooking,
anything really. It really calms the chaos in my head, allowing me to think
-more clearly. It's also a great way to improve my mood, or to help me process
-my current thoughts.
+more clearly. It's also a great way to improve my mood, or just to help me
+process my current thoughts.
-{{< figure src="./gentse-feesten-alpaca.jpg" title="Me with a broken wrist" >}}
+Some interesting links:
-{{< figure src="./beaver-computer.jpg" title="Artistic depiction, courtesy of a good friend ;p" >}}
+* My personal projects can be found on
+ [my Gitea instance](https://git.rustybever.be/Chewing_Bever).
+* GitHub: [ChewingBever](https://github.com/ChewingBever)
+* GitLab: [Chewing_Bever](https://gitlab.com/Chewing_Bever)
+* Codeberg: [Chewing_Bever](https://codeberg.org/Chewing_Bever) (Rarely used)
+* Matrix: [@jef:rustybever.be](https://matrix.to/#/@jef:rustybever.be)
diff --git a/content/blog/_index.md b/content/blog/_index.md
deleted file mode 100644
index dd5e27d..0000000
--- a/content/blog/_index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "Blog"
----
-
-Sometimes I want to talk about things that aren't related to any of my
-projects. These posts end up here!
diff --git a/content/blog/audio-setup/index.md b/content/blog/audio-setup/index.md
deleted file mode 100644
index 8c2fe26..0000000
--- a/content/blog/audio-setup/index.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: "Audio Setup"
-date: 2022-08-16
----
-
-Over the years, I've invested in a (in my opinion) pretty good audio setup that
-I use very frequently (especially during the winter). I'm quite fond of it, so
-I'd like to show it off! And perhaps, someone out there might find the
-information interesting :)
-
-# Hardware
-
-The hardware consists of four main parts. I use a [Focusrite Scarlett
-2i2](https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-2i2) both
-as a USB-connected DAC and an interface for my microphone. I'm quite satisified
-with the 2i2; it has served me well for a few years now. The fact that it can
-act both as a DAC and a mic input allows me to declutter my desk a bit.
-Otherwise, I'd have to buy a separate DAC and microphone receiver. Perhaps
-someday I'll find a use for the second microphone input ;p Before I had the
-2i2, I used a USB microphone and an AUX adapter that connected directly to my
-headphone amp, so this really was a big upgrade for me.
-
-The 2i2's line outputs connect to a [Schiit Magni
-Heresy](https://www.schiit.com/products/magni-1); the headphone amplifier.
-Besides the glorious name, this product really is amazing. It packs a serious
-punch for its size and price and I find it's a great match for my headphones.
-The only issue that I've had with them is that they can crackle when you change
-the volume, but luckily it goes away again once you stop moving the knob.
-Personally, I don't think it's that much of an issue, but I figured I should
-mention it anyways.
-
-Now for the stars of the show; the headphones. Perhaps I went a little
-overboard with this one, but I don't regret it at all. My main drivers are the
-[Sennheiser HD 660S](https://www.sennheiser-hearing.com/en-US/p/hd-660s/). They
-sound absolutely amazing paired with my Magni head amp. I'm by no means an
-expert on audio, but I can definitely tell a major difference between these
-headphones and any other pair we have in the house. The audio is incredibly
-clear; I really can't get enough of it.
-
-Lastly, the microphone. During the pandemic, I bought myself a Devine BM-600
-XLR mic. The quality's quite good, especially for the price. Sadly I don't get
-to use it a lot anymore, as I rarely call people on the computer anymore.
-Before this however, I used the Devine M-Mic USB microphone. I mention this
-because it's probably one of the best budget microphones out there. Last I
-checked, it only cost around 30 euros and the voice quality is insanely good
-for the price.
-
-# Software
-
-While I get the appeal of LPs and CDs, they're just not very practical with the
-amount of music that I listen to every day. That's why I have a
-[Tidal](https://tidal.com/) HiFi subscription. Due to me being a student, I can
-get a 50% discount, meaning I only pay 5 euros per month for high-quality audio
-streaming. I highly recommend Tidal; it has served me well for months and will
-continue to do so.
-
-Due to me using Linux, I sadly can't use a native Tidal client, so I've had to
-resort to using
-[Mastermindzh/tidal-hifi](https://github.com/Mastermindzh/tidal-hifi),
-specifically installed using the
-[tidal-hifi-git](https://aur.archlinux.org/packages?O=0&K=tidal-hifi-git) AUR
-package. It runs the Tidal web player in an electron session, along with some
-wine magic to support HiFi playback. It even has a task bar icon and
-everything, so it works about as well as any other native client.
-
-Right, I have to finish this post. The goal was to describe my audio setup, and
-I think I accomplished that. I'm definitely not an expert on these things, so
-I'm not going to go more in depth than needed. All I am is an audiophile that
-cares a little too much about the quality of his music ;p
-
-Cheers
diff --git a/content/blog/c-project-setup/index.md b/content/blog/c-project-setup/index.md
deleted file mode 100644
index b32e5a8..0000000
--- a/content/blog/c-project-setup/index.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-title: "My C Project Setup"
-date: 2024-03-28
----
-
-For the last couple of months most of my projects have revolved around
-low-level C programming, with the most prominent one being
-[Lander](https://git.rustybever.be/Chewing_Bever/lander), my URL shortener.
-During this time I've developed a method for structuring my repositories in a
-way that works for me and my development style. In this post, I'll be detailing
-my approach!
-
-If you prefer looking at the structure directly, the basic structure's
-available as [a template](https://git.rustybever.be/Chewing_Bever/c-template)
-on my Gitea.
-
-## Basic structure
-
-The basic structure for my repositories looks like this:
-
-```
-.
-├── example
-├── include
-│ └── project_name
-├── src
-│ ├── _include
-│ │ └── project_name
-│ └── project_name
-└── test
-```
-
-Let's break it down.
-
-Naturally, `src` contains the actual source files, both those native to the
-project and those included from thirdparty libraries. `src/project_name`
-contains all source files native to the project, while thirdparty files are
-stored in their own subdirectories separated by library, or directly in `src`.
-
-For header files, we have two relevant directories. `include/project_name`
-contains all header files that are part of the public API for the library.
-`src/_include` on the other hand contains header files that are only used
-internally by the project. Here we once again have the same split where
-`src/_include/project_name` contains internal header files native to the
-project, while thirdparty header files can be placed either directly in
-`src/_include` or in their own subdirectories.
-
-Finally we have `test` and `example`. `test` contains unit tests, while
-`example` contains source files that illustrate how to use the library in a
-practical context.
-
-This setup seems to be fairly standard, and it works perfectly for me. To power
-a C project, we of course need some form of build system, so let's talk about
-*the Makefile*.
-
-## The Makefile
-
-During my years of creating personal projects I started leaning more towards a
-lightweight development style. For a while I was a big fan of CMake, but for my
-projects it's way too complex. As a replacement, I opted for a hand-written
-Makefile. While I'm not going to go into detail on the specifics of the
-[Makefile](https://git.rustybever.be/Chewing_Bever/c-template), I will mention
-its most predominant features.
-
-First and foremost it supports compiling all required files and linking them
-into either a static library or a native binary, depending on the project. It
-allows all source files to include any header file from both `include` and
-`src/_include`. Unit tests and example binaries are compiled separately and
-linked with the static library. Unit tests are allowed to include any internal
-header file for more precise testing where needed, whereas example binaries
-only get access to the public API.
-
-The Makefile properly utilizes the `CC`, `CFLAGS` and `LDFLAGS` variables,
-allowing me to build release binaries and libraries simply by running `make
-CFLAGS='-O3' LDFLAGS='-flto'`. Make also allows running compilation in parallel
-using the `-j` flag, greatly speeding up compilation. A properly written
-Makefile really does make life a lot easier.
-
-It also solves a common issue with C compilation: header files. The usual
-bog-standard Makefile only defines the C source file as a dependency for its
-respective object file. Because to this, object files do not get recompiled
-whenever a header file included by its source file is changed. This can result
-in unexpected errors when linking. The Makefile solves this by setting the
-`-MMD -MP` compiler flags. `-MMD` tells the compiler to generate a Makefile in
-the build directory next to each source file's object file. These Makefiles
-define all included header files as a dependency for its respective object
-file. By importing these Makefiles into our main Makefile, our object files are
-automatically recompiled whenever a relevant header file is changed.
-
-The Makefile also contains some quality-of-life phony targets for stuff I use
-regularly:
-
-* `make lint` and `make fmt` use `clang-format` to lint and format the source
- files
-* `make check` runs `cppcheck` (and possibly other tools in the future) on the
- source code, notifying me of obvious memory leaks or mistakes
-* `make test` compiles all test binaries and runs the unit tests
-* `make run` compiles and runs the main binary
-* `make build-example` builds all examples
-* `make bear` generates a `compile_commands.json` file using
- [Bear](https://github.com/rizsotto/Bear) (the `clangd` LSP server requires
- this to work properly)
-* `make clean` removes all build artifacts
-
-## Testing
-
-My setup currently only supports unit tests, as I haven't really had the need
-for anything more complex. For this, I use
-[acutest](https://github.com/mity/acutest), a simple and easy to use
-header-only testing framework that's perfect for my projects. It's fully
-contained within a single header file that gets imported by all test files
-under the `test` directory. By having the testing framework fully contained in
-the project it also becomes very easy to run tests in a CI. If the CI
-environment can compile the library it can also run the tests without any
-additional dependencies required.
-
-## Combining projects
-
-My projects, specifically libraries, often start as part of a different project
-(e.g. [lnm](https://git.rustybever.be/Chewing_Bever/lnm) used to be part of
-[Lander](https://git.rustybever.be/Chewing_Bever/lander)). As the parent
-project grows, some sections start to grow into their own, self-contained unit.
-At this point, I take the time to properly decouple the codebases, moving the
-new library into its own subdirectory. This subdirectory then gets the same
-structure as described above, allowing the parent project to include it as a
-static library.
-
-This approach gives me a lot of flexibility when it comes to testing, as well
-as giving me the freedom to separate subprojects into their own repositories as
-desired. Each project functions exactly the same if it's a local subdirectory
-or a Git submodule, allowing me to easily use my libraries in multiple projects
-simply by including them as submodules.
-
-## Outro
-
-That was my C project setup in a nutshell. Maybe this post could be of use to
-someone, giving them ideas on how to improve their existing setups.
-
-As is standard with this blog, this post was rather technical. If you got to
-this point, thank you very much for reading.
-
-Jef
diff --git a/content/blog/endeavour-review/index.md b/content/blog/endeavour-review/index.md
deleted file mode 100644
index 9e2ea8e..0000000
--- a/content/blog/endeavour-review/index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: "A Review of EndeavourOS"
-date: 2022-04-05
-draft: true
----
diff --git a/content/blog/feeling-slightly-off/index.md b/content/blog/feeling-slightly-off/index.md
deleted file mode 100644
index 68c624c..0000000
--- a/content/blog/feeling-slightly-off/index.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: "Feeling Slightly Off"
-date: 2023-03-18
----
-
-This weekend's the first time in a couple of weeks that I've had a bit of
-breathing space. I've started to realize that I've been feeling a bit off. I've
-had a busy schedule this semester, lots of people to catch up with, and more
-uni work than I expected. Yesterday was the first climax of this, with two
-deadlines and a group presentation due. It became so busy I had to cancel a fun
-evening solely due to uni work.
-
-These last couple of weeks, I've been going through life chasing my calendar,
-making sure I meet deadlines, while constantly remembering that I still have
-stuff to do in the evening. Don't get me wrong, I loved every social outing,
-but I'm aware that I tend to sacrifice a bit of myself sometimes to keep this
-schedule going. It's not the first time I've been stressed about going out, due
-to me planning too many things to do. I find myself coming home tired from
-studying and classes, taking a quick shower and chugging a Red Bull before
-going out again an hour later. I don't like saying no to outings, and I've
-always got some FOMO.
-
-My sleep's been suffering, but more importantly, I've caught myself caring less
-about my health. When I come home for the weekend, I find myself answering "oh,
-I haven't checked it" when my dad asks whether my blood pressure and weight are
-still in check, and I haven't gone running in a week. After a while I started
-noticing this, and it's given me this slight feeling of dread, and perhaps a
-lack of control. I can be a bit paranoid about my health sometimes, and these
-habits kept that feeling in check, but now it's bubbling up ever so slightly.
-
-Ever since I've had my appendix removed, I've been out of this rhythm I had
-created over the last year. Running was very much a key part of this routine,
-something that helped keep everything grounded. I knew that I went running
-every two days. It didn't feel like an obligation, but the idea of that rigid
-schedule helped me plan everything else. Because I wasn't able to exercise for
-a few weeks after the surgery (partially due to me being too paranoid about it
-all), I've lost this feeling of consistency, and I've been struggling to find
-it back. At this point, my body has fully healed and I'd be perfectly able to
-handle this rhythm again, but I just haven't found that same flow.
-
-My food hasn't been too healthy either. I've eaten a lot of junk food, more
-than usual. Normally I don't mind this considering I partially compensated for
-this by running, but recently that argument hasn't worked, so I'm fearing that
-I'll start gaining weight again. On a brighter note, I've started prepping
-lunches for the week (partially due to uni restaurants being way too expensive
-nowadays), but I want to start pairing this habit with proper evening meals,
-instead of junk food 2-3 times a week.
-
-All this has combined into a sense of fear, fear that it might come to bite me
-in the ass some day. I felt the need to write these thoughts down, to collect
-them properly in my head. On this Saturday, I felt the need to take control of
-my schedule again. Luckily I have some breathing room next week as I have no
-deadlines due, and I hope to use this time to start getting back into this
-rhythm.
-
-As usual, I don't know how to end these posts, they're more of a dump of
-thoughts than anything else. I'm well aware this post could come off as
-pretentious. I'm basically complaining about having too many things to do while
-having shitty time management, and that's fine. After all, I'm collecting *my*
-thoughts. Thanks for reading.
diff --git a/content/blog/losing-weight/index.md b/content/blog/losing-weight/index.md
deleted file mode 100644
index c470d6e..0000000
--- a/content/blog/losing-weight/index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: "I've lost weight!"
-date: 2022-07-10
----
-
-Ever since I started middle school, I've been a bit of a chubby kid. I was
-never into sports & honestly I just like food. The fact that my main hobby,
-computer stuff, requires me to sit down all the time doesn't help my case
-either.
-
-My health was never really a big concern for me, as I generally felt pretty
-good physically. A few months ago however, I finally found the courage to go
-donate blood (I absolutely despise needles)! Whenever you want to donate blood
-(at least, here in Belgium) they check your blood pressure to make sure you're
-allowed to give blood, and that's when I found out that my blood pressure was
-apparently way too high. This was a big eye-opener for me, as it was the first
-time I was being confronted with a consequence of my weight and just general
-lack of self-care.
-
-Shortly after, I made an appointment with a doctor, who then referred me to a
-cardiologist, who then once again told me that my blood pressure is indeed way
-too high. Due to my young age however, they were hesitant to prescribe me
-medication and instead encouraged me to start exercising more to see if this
-helped the problem.
-
-Suffice to say, my health has notably improved ever since I changed my
-lifestyle! I've started running regularly (and have been enjoying it
-surprisingely) and lowered my portion size when eating. For the first couple of
-weeks, I was constantly hungry, but afterwards my stomach adjusted. Nowadays,
-I'm already full after a portion half the size of before!
-
-This post has been in the back of my mind for a while, but I wanted to wait
-until I hit a specific milestone. When I started losing weight, I weighed
-around 111kg, but a few days ago I weighed less than a hundred kilos for the
-first time in years! My weight definitely ballooned when I started university,
-so it felt really good to see that 99.9 on the scale. My blood pressure has
-also notably improved, thanks to the weight loss and exercise.
-
-Of course I'm not going to stop now, but this was a specific goal that I had in
-mind to motivate myself to keep going. My friends and family have been
-commenting on my weight loss, and it's really nice to hear people say that I
-lost weight for a change. I am grateful that this was discovered so soon. Being
-only twenty-one, I'm still more than capable of becoming healthier. I'd rather
-exercise now than deal with the possible implications from high blood pressure
-years down the road.
-
-As usual, I have no idea how to end these posts; I just wanted to share my
-accomplishment, as I'm quite proud of it :) Anyways, if you've gotten this far,
-thank for you reading and have a very nice day <3
diff --git a/content/blog/music/index.md b/content/blog/music/index.md
deleted file mode 100644
index 68f954d..0000000
--- a/content/blog/music/index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: "Music"
-date: 2022-05-16T20:58:18+02:00
----
-
-Music has a profound effect on me. It dictates my mood, helps me process
-emotions or keeps me focused. It motivates me when I'm running & helps me when
-I'm down. And of course, I'm listening to some great music while writing this
-post.
-
-I felt like writing, mostly because I was feeling a bit like shit. It calms me
-down, helps me put things in order. The idea to write about music just popped
-into my head, but I've had it in the back of mind for a while now.
-
-Music really is something special. It can evoke such a wide range of emotions,
-from blissful joy to a depressed pitfall & everything in between. Whenever I'm
-feeling down I just crack up some tunes. Not necessarily happy tunes mind you,
-sometimes it's better to soak in the sadness for a bit, there's no point in
-keeping it inside.
-
-According to most people's standards, I listen to music *a lot*. I put in my
-earbuds when I leave for classes at 8AM, or put on my headphones when I'm
-working behind my desk. Every time I ride my bike, walk or run, I'm listening
-to music. Whenever I'm studying or programming, I'm listening to music. In
-total, I probably listen to music for at least 6 hours a day. Luckily that is
-more than enough to justify buying a Tidal subscription for 10 euros a month ;p
-
-That does bring me to my next point; I'm an audiophile. I love high resolution
-audio & my audio setup reflects that. My Sennheiser HD 660S are very dear to
-me, and they've provided me with hundreds of hours of listening pleasure at
-this point.
-
-I'm not really picky with what genres of music I listen to either. The music
-just has to provide a certain feeling that fits my current mood. I do prefer
-listening to entire albums, which is why I've amassed a great list of albums
-that I love to listen to. Despite my horrible memory I tend to navigate this
-list just fine, with each song just coming up as a feeling in the moment & my
-mind magically navigating to the right album.
-
-My love for music has been around for as long as I can remember. Back in high
-school I was constantly listening to music; I've even played the piano for
-years before stopping due to a lack of interest. Sadly that spirals back to my
-lack of motivation for most things, but I digress.
-
-The truth is, I wanted to write, just write, to process the exam stress that
-I'm going through right now. I've got exams in two weeks & as usual, the stress
-has been killing me. My horrible sleep hygiene doesn't help either. I rarely go
-to bed before midnight & when I do, I just lie awake in bed, thinking. Thinking
-of how I'll have to study more tomorrow, because otherwise I won't make it. A
-constant fear of failure looms above me, ready to eat me up inside.
-
-Well, this post got depressing quite fast, I'm sorry about that. Thing is, I
-want to use this site to express myself, so when I'm feeling stressed, I want
-to express that as well. It's liberating in a way, sharing this information
-with "the world", in my own controlled way.
-
-If you've gotten this far, thank for you reading through my ramblings &
-insecurities, I do truly appreciate it. Au revoir.
diff --git a/content/blog/necessity/index.md b/content/blog/necessity/index.md
deleted file mode 100644
index c149535..0000000
--- a/content/blog/necessity/index.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: "Necessity Creates Productivity"
-date: 2022-04-07T09:46:05+02:00
----
-
-Or at least, that's how I experience it. Let me explain.
-
-I have a lot of sideprojects. Most would say too many (I'm inclined to agree).
-I often start these projects because I feel like it, without a particular
-purpose or useful goal in mind. Programming is just something that I really
-enjoy, so I tend to create ideas out of thin air just because I want to write
-something, anything. There is however another group of sideprojects, the ones
-that I start because I need something. Those that fix an annoyance, or make my
-life easier. What I've noticed is that I'm a lot more productive & less easily
-burned out when I'm working on these kinds of projects.
-
-One of those projects (and my main project atm) is
-[Vieter](https://git.rustybever.be/Chewing_Bever/vieter). I originally wrote a
-full description of Vieter here & why I needed it, but that's really not what
-this post is about. You can still read about it in [the docs](/docs/vieter/#why)
-if you want. The important part to take away from this is that it's something I
-really need. It made me more productive and greatly pushed down my update
-times, which I personally find very important. That's why I'm getting a lot of
-things done for this project, because I know that it'll be worth it in the end
-& improve my life.
-
-To show the other site of the spectrum, my original idea for this site was a
-collection of microservices, with a complex authentication system & a full
-JavaScript frontend ([source](https://git.rustybever.be/rusty-bever)). Let's
-just admit it here, this idea was way too ambitious and not even *that* useful.
-The only part that I'm actually still considering writing is the authentication
-part, because I do have some other ideas to go along with those, but that's
-another post entirely ;p
-
-Due to this overkill idea, I didn't actually set up this site for over a year I
-think, just because I just couldn't get myself to properly work on the
-implementation. I actually really enjoy writing these blog-style posts, so it's
-quite sad I didn't set up a proper Hugo-based site immediately. Gladly at some
-point I got through my stubbornness, and I set up this site in less than a day
-:) This site still runs on [a custom backend](/switch-to-axum), but it's much
-more minimal and only supports what I really need. My mind's a lot calmer now
-that I've properly left my original idea behind.
-
-I'm honestly not quite sure what point I'm trying to make. This post is just an
-observation about how my unpredictable mind can work. Knowing myself, the
-sideprojects will probably never stop coming, but that's okay tbh. The
-important part is that most of them have a purpose, and don't just burn me out
-unnecessarily.
-
-Fin.
diff --git a/content/blog/tour-of-flanders/bert-enjoying-himself.jpg b/content/blog/tour-of-flanders/bert-enjoying-himself.jpg
deleted file mode 100644
index a2b6264..0000000
Binary files a/content/blog/tour-of-flanders/bert-enjoying-himself.jpg and /dev/null differ
diff --git a/content/blog/tour-of-flanders/index.md b/content/blog/tour-of-flanders/index.md
deleted file mode 100644
index 726b1b5..0000000
--- a/content/blog/tour-of-flanders/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: "Tour of Flanders"
-date: 2022-04-04T12:53:23+02:00
----
-
-Yesterday, some friends & I met to "watch" the Tour of Flanders (gonna have to
-trust Google Translate on this one). Mind the quotes, because none of us really
-know anything about cycling ;p One of us just lived close to where the tour
-ended, so we used this as an excuse to organize a party at their place!
-
-It was really fun standing in a big crowd of bystanders while the two
-frontrunners passed by. Everyone went wild! It really shows how cosy a group of
-Belgians can be if we just don't talk about anything besides sports (let's
-leave the politics aside).
-
-Afterwards, we went back to their place, ate some delicious burgers courtesy of
-their mom, and watched [De
-Mol](https://en.wikipedia.org/wiki/De_Mol_(TV_series)) together. For the rest
-of the evening we had some beer & wine (and a glass of Johnnie Walker Black
-Label ;) ), and just talked about everything. I really enjoy these kinds of
-evenings, chilling with friends, no pressure to go out, just relaxing & talking
-with some good booze :)
-
-{{< figure src="./bert-enjoying-himself.jpg" title="Bert having some fun while we're all focused on the big screen" >}}
-
-{{< figure src="./later-in-the-evening.jpg" title="After a few drinks (I gotta shave)" >}}
diff --git a/content/blog/tour-of-flanders/later-in-the-evening.jpg b/content/blog/tour-of-flanders/later-in-the-evening.jpg
deleted file mode 100644
index 601f790..0000000
Binary files a/content/blog/tour-of-flanders/later-in-the-evening.jpg and /dev/null differ
diff --git a/content/blog/tuxedo-book-xp14-review.md b/content/blog/tuxedo-book-xp14-review.md
deleted file mode 100644
index efd2643..0000000
--- a/content/blog/tuxedo-book-xp14-review.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: "Tuxedo Book XP14 12th Gen Review"
-date: 2022-04-02
-draft: true
----
-
-Fro the last couple of years, my main driver was a Macbook Air 13" from 2013.
-It was my sister's old laptop & I claimed it when she replaced it because it
-became too slow. Naturally, I put Linux on it and, after a few distro hops,
-settled on EndeavourOS. This setup worked well for about 3 years, but it was
-getting rather old. After about a year of using it myself I had to replace the
-battery, and after another two years or so that one became useless as well. It
-was time for a change, so I started searching.
-
-Thanks to a recommendation from a friend, I found Tuxedo Computers and I just
-couldn't get them out of my head, so eventually I gave in and bought one! As
-the title already revealed, the model's a Tuxedo Book XP14 Gen12.
-
-My specific version has a 120Hz display, 500GB of a Samsung 980, 2 x 8GB of
-DDR4 RAM, an i5-1135G7 & Intel Iris Xe Graphics G7 80EUs.
-
-Now that we've got the nerd stats out of the way, let's talk about the laptop
-itself.
-
-## The Good
-
-The build quality is very solid. While the top half containing the display is
-made up of a solid metal casing, the bottom part consists of a sturdy plastic.
-There is some deck flex, but definitely not a level I would consider an issue.
-
-The trackpad is very responsive & pairs nicely with the smoothness of the
-cursor on the 120Hz display. I personally think the keyboard is quite amazing.
-It's got a satisfying travel time & feels very solid for a membrane keyboard.
-
-IO is more than enough, with a Kensington lock, SD card reader, gigabit
-Ethernet port, Thunderbolt 4 port, two USB 3 ports, another USB-C port, HDMI &
-two-in-one audio jack.
-
-Under normal load the fans are completely silent, while at peak they're audible
-but not annoying or overly loud.
-
-Battery life is quite decent; under light load with dimmed backlight it can go
-for about 6 hours. I do recommend properly configuring some energy profiles in
-the Tuxedo Control Center.
diff --git a/content/blog/v-workflow/index.md b/content/blog/v-workflow/index.md
deleted file mode 100644
index fdfb4b3..0000000
--- a/content/blog/v-workflow/index.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: "My V Workflow"
-date: 2022-04-27T22:13:04+02:00
----
-
-While I'm trying to find time to work on
-[Vieter](https://git.rustybever.be/Chewing_Bever/vieter) (college is killing me
-right now), I figured I could describe my current workflow for developing
-Vieter, and in general, V!
-
-I've always been a rather minimal developer, preferring simplicity &
-lightweight programs over lots of smart IDE features. While this mentality
-doesn't work for all languages, V's simplicity allows me to write it without
-any smart features whatsoever!
-
-## Tools
-
-### Neovim
-
-We can't do any coding without a text editor of course. My weapon of choice is
-[Neovim](https://neovim.io/), the great Vim fork, ran inside my [st
-build](https://git.rustybever.be/Chewing_Bever/st). My main reason for choosing
-Neovim over Vim (besides the more active development) is the Lua, LSP &
-Treesitter support.
-
-I try to keep [my
-config](https://git.rustybever.be/Chewing_Bever/dotfiles/src/branch/master/.config/nvim)
-& list of plugins rather short by following the basic rule of only adding a
-plugin if I find it adds actual value to my setup. If the plugin or setting
-only adds a gimmick that I don't actively use, I probably won't add it.
-
-### VLS
-
-Thanks to the LSP support in Neovim I'm able to use
-[VLS](https://github.com/vlang/vls) (V Language Server). This gives me better
-autocomplete, useful suggestions & error messages, all without ever having to
-run the compiler myself!
-
-### Treesitter
-
-The VLS repo also comes with grammar definitions for treesitter. This allows me
-to import this into Neovim, providing me with better code highlighting using my
-treesitter-compatible theme.
-
-### Compiler mirror
-
-I don't like it when things break without my permission. While it's a very good
-thing that V is so actively developed, it does make programs rather sensitive
-to change & can cause stuff to break after a compiler update. This is why I
-maintain my own mirror of the compiler which I update regularly. Thanks to
-this, I have full control over how frequently my compiler updates, providing me
-with a level of stability on both my laptops & in my CI that can't be obtained
-when blindly following the master branch.
-
-### Packaging for Arch Linux
-
-My distro of choice for all my devices is EndeavourOS, an Arch-based distro
-(well, it's basically just a very good installer ;p). Thanks to this
-uniformity, it's very easy for me to package my compiler mirror, VLS & the
-treesitter grammar.
-
-For the compiler, I build packages inside my CI
-([PKGBUILD](https://git.rustybever.be/Chewing_Bever/v/src/branch/master/PKGBUILD))
-& publish this package to my personal Vieter instance. Then, using this
-compiler package, I periodically build & package VLS
-([PKGBUILD](https://git.rustybever.be/bur/vieter-vls/src/branch/main/PKGBUILD)).
-This is to make sure my VLS build is compatible with my compiler version. The
-PKGBUILD also shows how to compile the treesitter grammar separately from VLS.
-
-## Workflow
-
-Just like my config, my way of working is rather simple. I really like working
-in the terminal, so I usually write small Makefiles
-([example](https://git.rustybever.be/Chewing_Bever/vieter/src/branch/dev/Makefile))
-that do everything I need, e.g. compile, lint, test etc. Using the
-[toggleterm](https://github.com/akinsho/toggleterm.nvim) plugin, I spawn
-terminals inside Neovim & use `make` to do everything else!
-
-## Outro
-
-I'm not too sure how to end this post. I hope it might help someone who's
-struggling to find a setup that works, or perhaps the links to my PKGBUILDs
-could come in handy for someone ;p
diff --git a/content/blog/vlang/index.md b/content/blog/vlang/index.md
deleted file mode 100644
index 7a97696..0000000
--- a/content/blog/vlang/index.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-title: "My Experience With V"
-date: 2022-06-26
-draft: true
----
-
-For the last half a year or so, I've written code nearly exclusively in the V
-programming language (excluding college projects). In this time, I've learned a
-lot about the language, as well as being an active member of the community.
-
-I don't recall exactly how I discovered V. being the kind of nerd that has a
-list of languages they wanna try, I probably saw it somewhere & added it.
-Luckily, V was the one I wanted to try out the most. After visiting
-[vlang.io](https://vlang.io/), I joined the Discord server & that's where the
-fun began!
-
-Before I talk about the language itself, I would like to take a moment to
-appreciate the community. I felt welcome the moment I joined, and everyone
-(especially the V developers) was very helpful with any questions I had. If it
-wasn't for their help, [Vieter](https://git.rustybever.be/vieter-v/vieter)
-probably wouldn't be as far along as it is today!
-
-## What's V?
-
-While I'm not interested in giving a full description of the language, a short
-introduction is in order. V is a compiled programming language with a syntax
-very similar to Go. The main compiler backend transpiles V to C, providing
-interopt with C code without any effort. This also gives the compilation phase
-access to all optimisations that C compilers have to offer, resulting in very
-fast & optimized binaries. I'd list more things, but then it wouldn't be short
-anymore!
-
-## Developing in V
-
-Now for the relevant part of this post, the actual developing!
-
-Developing locally in V is pretty straightforward. Write some code, run `v .`,
-blink, see if you made a mistake, repeat. For me, this is a very important
-feature of V. Not only does the compiler handle the "build system" for you;
-it's also incredibly fast. This is accomplished by using the tcc compiler, a
-small & extremely fast C compiler, for development builds. Thanks to this,
-compiling my code doesn't take me out of "the flow"; a problem that I've faced
-when working with Rust code, as I'm very sensitive to losing focus.
-
-Building optimized binaries is equally simple; just run `v -prod .`. This will
-use either gcc or clang to compile your code using the max optimisation levels.
-
-Due to the rapidly developing nature of V, it is possible that old code no
-longer compiles on a newer compiler. This won't happen once the language is
-stabilized, but as of today, changes can occur. I don't actually know how
-others handle this, but I personally maintain a mirror of the compiler that I
-update regularly. This way, I decide when code might break, meaning I can react
-quickly to make sure nothing stays broken for long. This brings me to my CI
-setup!
-
-Because overengineering is fun, I have my own CI server that I use to test &
-deploy basically everything I create; V software is no exception! Using Docker
-buildx, I create multi-architecture Alpine-based images containing my compiler
-fork & any C library dependencies that I use. These images are then used in my
-CI to build statically compiled binaries that I can use to create the actual
-Docker images! Due to V compiling to C, compiling static binaries is quite
-simple; just build using a musl-based OS such as Alpine Linux.
-
-Enough drooling over my CI, back to V! Yes, when I was writing code in V, I
-encountered some bugs in the compiler. While a bit inconvenient at times, they
-definitely weren't a showstopper for me. V is still a developing language; I'm
-not gonna try to advertise that it isn't. The thing is though, I was able to
-report these compiler bugs to the community immediately, many of which being
-fixed within 24 hours by one of the V developers! V might still be in
-development, but it's definitely already ready for developing projects. My
-[vieter](https://git.rustybever.be/vieter-v/vieter) project has nearly 4k SLoC
-and still compiles just as quickly as when I started it. The resulting binaries
-are rock-solid; my personal Vieter instance has been running for months without
-issues.
-
-## Conclusion?
-
-It's clear from this post that I've taken a liking to V. The amount of
-evolution I've seen in the months that I've been using it is impressive, and
-I'm certain that V will reach its goal of being a stable language. I'm fine
-tagging along until that day comes :)
-
-In the context of developing Vieter, I've written a multitude of software
-pieces, ranging from a cron daemon to a rewrite of Arch Linux's `repo-add`
-command. This variety gives me confidence that V can already be used to develop
-varied & complex software.
-
-Besides developing Vieter, I'd like to enrich the ecosystem with packages that
-I think will be useful for everyone. To this end, I've started splitting off
-modules of the Vieter codebase & developing them independently. My first goal
-will be writing a Docker client
-[library](https://git.rustybever.be/vieter-v/docker), as I find this to be very
-useful for any language to have (and also I need it myself of course).
-
-Now, I know using these new and/or developing languages is not for everyone.
-Some just prefer sticking to the proven titans of the industry, and that's
-fine. However, for those like me that love using these new langs, I really do
-recommend checking out V. It's fast, it's of course free and open-source, and
-using a language is one of the best ways of helping it move forward. Perhaps
-when you join, you'll see a Chewing Bever babbling on ;)
diff --git a/content/blog/workflow/index.md b/content/blog/workflow/index.md
deleted file mode 100644
index 9243591..0000000
--- a/content/blog/workflow/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: "My Workflow For This Site"
-date: 2022-04-05
----
-
-This blog is about a week old now. I'm still figuring out what kind of content
-I'd like to post, or what kind of writing style I have. What I have figured out
-however, is my workflow.
-
-Thanks to my backend [powered by Axum](/switch-to-axum) I have pretty much full
-creative control over the internal workings of my site. This gave me the
-freedom to implement a system that I think works very well. Let's elaborate a
-bit.
-
-Both the blog & the documentation part of my website are currently being
-generated using Hugo, a static site generator. The lack of JavaScript makes the
-site very fast, which is always a big plus in my opinion. Thanks to my
-[self-hosted CI](https://woodpecker-ci.org/), I can automatically build &
-deploy the static files every time I update anything. My CI builds the static
-website, compresses it into a tarball, & uploads this to my backend. This
-process takes less than 10 seconds on a warm CI runner & it allows me to very
-quickly update my site, correct errors, or just upload a post like this one!
-
-My backend supports a simple system of serving multiple sites. In practice this
-means that I can specify which site I'm uploading using a query parameter in
-the POST request. This is how I'm able to serve my documentation on
-[/docs](/docs) while still having my blog available as the "default" site.
-
-The "source code" for my site(s) is stored in Git repositories using Markdown.
-Considering I use Git on a daily basis, this is perfect for me & I don't see it
-as an "extra step" anymore. For college I use Git as well, so using it in
-personal projects is a no-brainer.
-
-I have no idea how common this setup is, or if it'll work as well down the
-road, but for now, I find it works perfectly.
-
-Thanks for reading!
diff --git a/content/dev/_index.md b/content/dev/_index.md
deleted file mode 100644
index 28646ef..0000000
--- a/content/dev/_index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Projects"
----
-
-Throughout the years, I've created (and dropped) a lot of projects. Some were
-built out of necessity, others simply because I thought it was cool. This
-section of my site is where I can talk about these projects that I'm so
-passionate about!
-
-The posts for the various projects mostly consist of devlogs and version
-release announcements. Each project has its own RSS feed, so you can subscribe
-to the ones you'd like to follow.
diff --git a/content/dev/alex/_index.md b/content/dev/alex/_index.md
deleted file mode 100644
index 13cc263..0000000
--- a/content/dev/alex/_index.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: "Alex"
-summary: "Minecraft server wrapper that automates world backups"
-type: "project"
-params:
- links:
- - name: Source
- url: 'https://git.rustybever.be/Chewing_Bever/alex'
----
-
-Alex was created to solve an issue I'd been having: inconcistent Minecraft
-server backups.
-
-My original backup system involved compressing the server world and config
-directories in a tarball. While this usually worked, the command regularly
-failed due to conflicts while reading a file the server was writing to. Because
-the Minecraft server is unaware of the fact it's being backed up, it
-continuously writes data to disk, preventing the tar command from doing its
-job.
-
-My solution for this consisted of designing a process that wraps the Minecraft
-server process and interacts with its standard input. The Minecraft server
-accepts certain commands (`save-all` and `save-on`/`save-off`) that allow an
-admin to control when and if the server writes data to disk. Using this, the
-wrapper process tells the server to flush all data, stop writing to disk, and
-only resume writing after a successful backup has been created.
-
-This idea was then expanded to implement incremental backups, which greatly
-reduced the time and disk size needed for the backups. For reference, our
-~2.5GB world folder can be backed up incrementally in less than 5 seconds, with
-backups running every thirty minutes, without ever turning off the server.
diff --git a/content/dev/alex/devlog-1/index.md b/content/dev/alex/devlog-1/index.md
deleted file mode 100644
index 7968f9a..0000000
--- a/content/dev/alex/devlog-1/index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: "Automating Minecraft Server Backups"
-date: 2023-09-07
-tags: [minecraft, rust, backups]
----
-
-I started playing Minecraft back in 2012, after the release of version 1.2.5.
-Like many gen Z'ers, I grew up playing the game day in day out, and now 11
-years later, I love the game more than ever. One of the main reasons I still
-play the game is multiplayer, seeing the world evolve as the weeks go by with
-everyone adding their own personal touches.
-
-Naturally, as a nerd, I've grown the habit of hosting my own servers, as well
-as maintaining instances for friends. Having managed these servers, I've
-experienced the same problems that I've heard other people complaining about as
-well: backing up the server.
-
-{{< figure src="./the-village.jpg" title="Sneak peak of the village we live in" >}}
-
-## The Problem
-
-Like any piece of software, a Minecraft server instance writes files to disk,
-and these files, a combination of world data and configuration files, are what
-we wish to back up. The problem is that the server instance is constantly
-writing new data to disk. This conflicts with the "just copy the files"
-approach (e.g. `tar` or `rsync`), as these will often encounter errors because
-they're trying to read a file that's actively being written to. Because the
-server isn't aware it's being backed up, it's also possible it writes to a file
-already read by the backup software while the other files are still being
-processed. This produces an inconsistent backup with data files that do not
-properly belong together.
-
-There are two straightforward ways to solve this problem. One would be to
-simply turn off the server before each backup. While this could definitely work
-without too much interruption, granted the backups are scheduled at times no
-players are online, I don't find this to be very elegant.
-
-The second solution is much more appealing. A Minecraft server can be
-controlled using certain console commands, with the relevant ones here being
-`save-off`, `save-all`, and `save-on`. `save-off` tells the server to stop
-saving its data to disk, and cache it in memory instead. `save-all` flushes the
-server's data to disk, and `save-on` enables writing to disk again. Combining
-these commands provides us with a way to back up a live Minecraft server: turn
-off saving using `save-off`, flush its data using `save-all`, back up the
-files, and turn on saving again using `save-on`. With these tools at my
-disposal, I started work on my own custom solution.
-
-## My solution
-
-After some brainstorming, I ended up with a fairly simple approach: spawn the
-server process as a child process with the parent controlling the server's
-stdin. By taking control of the stdin, we can send commands to the server
-process as if we'd typed them into the terminal ourselves. I wrote the original
-proof-of-concept over two years ago during the pandemic, but this ended up
-sitting in a dead repository afterwards. However, a couple of months ago, some
-new motivation to work on the project popped into my head (I started caring a
-lot about our world), so I turned it into a fully fletched backup tool! The
-project's called [alex](https://git.rustybever.be/Chewing_Bever/alex) and as
-usual, it's open-source and available on my personal Gitea instance.
-
-Although Alex is a lot more advanced now than it was a couple of months back,
-it still functions on the same principle of injecting the above commands into
-the server process's stdin. The real star of the show however is the way it
-handles its backups, which brings us into the next section.
-
-## Incremental backups
-
-You could probably describe my usual projects as overengineered, and Alex is no
-different. Originally, Alex simply created a full tarball every `n` minutes
-(powered by the lovely [tar-rs](https://github.com/alexcrichton/tar-rs)
-library). While this definitely worked, it was *slow*. Compressing several
-gigabytes of world files always takes some time, and this combined with shaky
-hard drive speeds resulted in backups easily taking 5-10 minutes. Normally,
-this wouldn't bother me too much, but with this solution, the Minecraft server
-isn't writing to disk for the entire duration of this backup! If the server
-crashed during this time, all this data would be lost.
-
-This called for a better method: incremental backups. For those unfamiliar, an
-incremental backup is a backup that only stores the changes that occurred since
-the last backup. This not only saves a ton of disk space, but it also greatly
-decreases the amount of data that needs to be compressed, speeding up the
-backup process tremendously.
-
-Along with this, I introduced the concept of "chains". Because an incremental
-backup describes the changes that occurred since the last backup, it needs that
-other backup in order to be fully restored. This also implies that the first
-incremental backup needs to be based off a full backup. A chain defines a list
-of sequential backups that all depend on the one before them, with each chain
-starting with a full backup.
-
-All of this combined resulted in the following configuration for backups: the
-admin can configure one or more backup schedules, with each schedule being
-defined by a name, a frequency, a chain length and how many chains to keep. For
-each of these configurations, a new backup will be created periodically
-according to the defined frequency, and this backup will be appended to the
-current chain for that schedule. If the chain is full (as defined by the chain
-length), a new chain is created. Finally, the admin can configure how many of
-these full chains to keep.
-
-As an example, my server currently uses a dual-schedule system:
-
-* One configuration is called "30min". As the name suggests, it has a frequency
- of 30 minutes. It stores chains of length 48, and keeps 1 full chain. This
- configuration allows me to create incremental backups (which take 5-10
- seconds) every 30 minutes, and I can restore these backups in this 30-minute
- granularity up to 24 hours back.
-* The second configuration is called "daily", and this one simply creates a
- full backup (a chain length of 1) every 24 hours, with 7 chains being stored.
- This allows me to roll back a backup with a 24-hour granularity up to 7 days
- back.
-
-This configuration would've never been possible without incremental backups, as
-the 30 minute backups would've simply taken too long otherwise. The required
-disk space would've also been rather unwieldy, as I'd rather not store 48
-multi-gigabyte backups per day. With the incremental backups system, each
-backup after the initial full backup is only a few megabytes!
-
-Of course, a tool like this wouldn't be complete without some management
-utilities, so the Alex binary contains tools for restoring backups, exporting
-incremental backups as a new full backup, and unpacking a backup.
-
-## What's next?
-
-There's still some improvements I'd like to add to Alex itself, notably making
-Alex more aware of the server's internal state by parsing its logs, and making
-restoring backups possible without having to stop the Alex instance (this is
-rather cumbersome in Docker containers).
-
-On a bigger scale however, there's another possible route to take: add a
-central server component where an Alex instance can publish its backups to.
-This server would then have a user management system to allow certain users of
-the Minecraft server to have access to the backups for offline use. This server
-could perhaps also show the logs of the server instance, as well as handling
-syncing the backups to another location, such as an S3 store. This would make
-the entire system more resistant to data loss.
-
-Of course, I'm well aware these ideas are rather ambitious, but I'm excited to
-see where this project might go next!
-
-That being said, Alex is available as statically compiled binaries for `amd64`
-and `arm64` [on my Gitea](https://git.rustybever.be/Chewing_Bever/alex). If
-you're interested in following the project, Gitea recently added repository
-[RSS feeds](https://git.rustybever.be/Chewing_Bever/alex.rss) ;)
diff --git a/content/dev/alex/devlog-1/the-village.jpg b/content/dev/alex/devlog-1/the-village.jpg
deleted file mode 100644
index 78339b1..0000000
Binary files a/content/dev/alex/devlog-1/the-village.jpg and /dev/null differ
diff --git a/content/dev/lander/_index.md b/content/dev/lander/_index.md
deleted file mode 100644
index 651bf26..0000000
--- a/content/dev/lander/_index.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "Lander"
-summary: "URL shortener, pastebin & file-sharing service, built from the ground up in C"
-type: "project"
-params:
- links:
- - name: Source
- url: 'https://git.rustybever.be/Chewing_Bever/lander'
----
-
-Lander is my personal URL shortener, pastebin and file-sharing service. I've
-always wanted to make one of these myself, and as an added challenge, I built
-everything (except for the HTTP parser) from the ground up. It's built on a
-home-grown epoll-based event loop on top of which I built an HTTP framework
-that I'm also planning to use for some other projects.
diff --git a/content/dev/lander/devlog-1.md b/content/dev/lander/devlog-1.md
deleted file mode 100644
index acd2631..0000000
--- a/content/dev/lander/devlog-1.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: "Designing my own URL shortener"
-date: 2023-10-14
----
-
-One of the projects I've always found to be a good choice for a side project is
-a URL shortener. The core idea is simple and fairly easily to implement, yet it
-allows for a lot of creativity in how you implement it. Once you're done with
-the core idea, you can start expanding the project as you wish: expiring links,
-password protection, or perhaps a management API. The possibilities are
-endless!
-
-Naturally, this post talks about my own version of a URL shortener:
-[Lander](https://git.rustybever.be/Chewing_Bever/lander). In order to add some
-extra challenge to the project, I've chosen to write it from the ground up in C
-by implementing my own event loop, and building an HTTP server on top to use as
-the base for the URL shortener.
-
-## The event loop
-
-Lander consists of three layers: the event loop, the HTTP loop and finally the
-Lander-specific code. Each of these layers utilizes the layer below it, with
-the event loop being the bottom-most layer. This layer directly interacts with
-the networking stack and ensures bytes are received from and written to the
-client. The book [Build Your Own Redis](https://build-your-own.org/redis/) by
-James Smith was an excellent starting point, and I highly recommend checking it
-out! This book taught me everything I needed to know to start this project.
-
-Now for a slightly more techical dive into the inner workings of the event
-loop. The event loop is the layer that listens on the listening TCP socket for
-incoming connections and directly processes requests. In each iteration of the
-event loop, the following steps are taken:
-
-1. For each of the open connections:
- 1. Perform network I/O
- 2. Execute data processing code, provided by the upper layers
- 3. Close finished connections
-2. Accept a new connection if needed
-
-The event loop runs on a single thread, and constantly goes through this cycle
-to process requests. Here, the "data processing code" is a set of function
-pointers passed to the event loop that get executed at specific times. This is
-how the HTTP loop is able to inject its functionality into the event loop.
-
-In the event loop, a connection can be in one of three states: `request`,
-`response`, or `end`. In `request` mode, the event loop tries to read incoming
-data from the client into the read buffer. This read buffer is then used by the
-data processing code's data handler. In `response` mode, the data processing
-code's data writer is called, which populates the write buffer. This buffer is
-then written to the connection socket. Finally, the `end` state simply tells
-the event loop that the connection should be closed without any further
-processing. A connection can switch between `request` and `response` mode as
-many times as needed, allowing connections to be reused for multiple requests
-from the same client.
-
-The event loop provides all the necessary building blocks needed to build a
-client-server type application. These are then used to implement the next
-layer: the HTTP loop.
-
-## The HTTP loop
-
-Before we can design a specific HTTP-based application, we need a base to build
-on. This base is the HTTP loop. It handles both serializing and deserializing
-of HTTP requests & responses, along with providing commonly used functionality,
-such as bearer authentication and reading & writing files to & from disk. The
-request parser is provided by the excellent
-[picohttpparser](https://github.com/h2o/picohttpparser) library. The parsed
-request is stored in the request's data struct, providing access to this data
-for all necessary functions.
-
-The HTTP loop defines a request handler function which is passed to the event
-loop as the data handler. This function first tries to parse the request,
-before routing it accordingly. For routing, literal string matches or
-RegEx-based routing is available.
-
-Each route consists of one or more steps. Each of these steps is a function
-that tries to advance the processing of the current request. The return value
-of these steps tells the HTTP loop whether the step has finished its task or if
-it's still waiting for I/O. The latter instructs the HTTP loop to skip this
-request for now, delaying its processing until the next cycle of the HTTP loop.
-In each cycle of the HTTP loop (or rather, the event loop), a request will try
-to advance its processing by as much as possible by executing as many steps as
-possible, in order. This means that very small requests can be completely
-processed within a single cycle of the HTTP loop. Common functionality is
-provided as predefined steps. One example is the `http_loop_step_body_to_buf`
-step, which reads the request body into a buffer.
-
-The HTTP loop also provides the data writer functionality, which will stream an
-HTTP response to the write buffer. The contents of the response are tracked in
-the request's data struct, and these data structs are recycled between requests
-using the same connection, preventing unnecessary allocations.
-
-## Lander
-
-Above the HTTP loop layer, we finally reach the code specific to Lander. It
-might not surprise you that this layer is the smallest of the three, as the
-abstractions below allow it to focus on the task at hand: serving and storing
-HTTP redirects (and pastes). The way these are stored however is, in my
-opinion, rather interesting.
-
-For our Algorithms & Datastructures 3 course, we had to design three different
-trie implementations in C: a Patricia trie, a ternary trie and a "custom" trie,
-where we were allowed to experiment with different ideas. For those unfamiliar,
-a trie is a tree-like datastructure used for storing strings. The keys used in
-this tree are the strings themselves, with each character causing the tree to
-branch off. Each string is stored at depth `m`, with `m` being the length of
-the string. This also means that the search depth of a string is not bounded by
-the size of the trie, but rather the size of the string! This allows for
-extremely fast lookup times for short keys, even if we have a large number of
-entries.
-
-My design ended up being a combination of both a Patricia and a ternary trie: a
-ternary trie that supports skips the way a Patricia trie does. I ended up
-taking this final design and modifying it for this project by optimising it (or
-at least try to) for shorter keys. This trie structure is stored completely in
-memory, allowing for very low response times for redirects. Pastes are served
-from disk, but their lookup is also performed using the same in-memory trie.
-
-## What's next?
-
-Hopefully the above explanation provides some insight into the inner workings
-of Lander. For those interested, the source code is of course available
-[here](https://git.rustybever.be/Chewing_Bever/lander). I'm not quite done with
-this project though.
-
-My current vision is to have Lander be my personal URL shortener, pastebin &
-file-sharing service. Considering a pastebin is basically a file-sharing
-service for text files specifically, I'd like to combine these into a single
-concept. The goal is to rework the storage system to support arbitrarily large
-files, and to allow storing generic metadata for each entry. The initial
-usecase for this metadata would be storing the content type for uploaded files,
-allowing this header to be correctly served when retrieving the files. This
-combined with supporting large files turns Lander into a WeTransfer
-alternative! Besides this, password protection and expiration of pastes is on
-my to-do list as well. The data structure currently doesn't support removing
-elements either, so this would need to be added in order to support expiration.
-
-Hopefully a follow-up post announcing these changes will come soon ;)
diff --git a/content/dev/otter/0.1.0.md b/content/dev/otter/0.1.0.md
deleted file mode 100644
index c25c91b..0000000
--- a/content/dev/otter/0.1.0.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: "Otter 0.1.0"
-date: 2025-06-12
----
-
-Although life's been busy with university, I've found some time to finish
-things up with the current codebase and release a first version. This version's
-been running on my Raspberry Pi for a couple of months without problems, so it
-seems to be fairly stable.
-
-For context, Otter is a lightweight implementation of the [gpodder.net
-API](https://gpoddernet.readthedocs.io/en/latest/), specifically the parts
-required for synchronizing subscriptions between clients. Its goal is to be an
-easy-to-install alternative to gpodder.net, allowing self-hosters to easily
-use the various Gpodder-based clients available across devices.
-
-Version 0.1.0 has a fairly complete implementation of the parts of the Gpodder
-API that's required for synchronizing clients. I've currently got no plans to
-implement the more social media-related API routes, as these aren't necessary
-for the goal of this project.
-
-## Supported features
-
-Otter 0.1.0 implements the following API sections:
-
-* Authentication
-* Devices
-* Subscriptions
-* Episode actions
-* Device synchronization
-
-This includes both the basic routes and the "advanced" sections, as described
-in the API documentation. OPML and text output formats aren't supported yet, so
-currently the API only supports JSON. I am planning on adding support for the
-other output types later.
-
-In terms of client compatibility, Otter definitely works with AntennaPod and
-Kasts. Kasts does have the strange bug where it crashes if you agree to the
-"synchronize with all devices" popup when adding a new device. However, after
-manually marking the devices as being synchronized on the server, all syncing
-functionality works as expected. The Gpodder client also does not work, as it
-strangely uses a different form of authentication.
-
-Both of these issues should get fixed in a following release, as I'd like Otter
-to be generally usable with any client.
-
-### Ease of use
-
-Otter is distributed as a single binary configurable via a configuration file,
-environment variables and CLI arguments. Everything can be set up via any of
-these three methods (or a combination), allowing Otter to be easily used in
-both Docker containers and directly as a background service. For fun, I've also
-added support for listening on a Unix socket instead of a TCP socket.
-
-The goal is to always keep this setup, as a single binary is by far the easiest
-way this type of software can be distributed. I currently publish binaries for
-`x86_64` and `arm64`, as these are the platforms that I use. It should be
-possible however to compile Otter for any build target supported by Rust.
-
-## Plans
-
-Before Otter reaches version 1.0, there are still some features I'd like to
-add.
-
-### UI
-
-The biggest feature would definitely be a web UI. This UI will contain
-everything required to manage an Otter server, both as a user and an admin.
-Users should be able to see and remove sessions, manage their synced devices,
-and view and edit their subscriptions and other stored data. Admins also
-require the ability to add, remove and edit accounts, as well as seeing other
-global service data. The goal is to have an easy-to-use UI that contains
-everything you'd need to effectively use an Otter server.
-
-Important here is that I don't have any plans to recreate any of the social
-media-related aspects of Gpodder. Otter is just a sync server; it's not meant
-as a full-on replacement of the gpodder.net website.
-
-In terms of technology, I'm using [HTMX](https://htmx.org/) and
-[PicoCSS](https://picocss.com/) to develop the frontend, combined with a
-templating system in the backend. In my opinion, these two are the perfect
-combination for developing simple frontends, especially for someone like me
-that isn't the best at creating UIs.
-
-### CLI
-
-It's always useful to have a more technical CLI-focused way of accessing the
-data of an application. For this, I want to add a full CLI interface that
-allows an admin to interact with the server through the same abstractions used
-by the API. There's already some very basic functionality available right now
-on which I'd like to build to expose the full functionality of the API in CLI
-form.
-
-### Database support
-
-Otter currently only support SQLite as it's easy to develop with and install on
-the server. I do however know lots of people prefer running PostgreSQL, so
-support for this will be added. Due to the way the codebase is structured, this
-shouldn't be too hard, as all database-related functionality is hidden behind
-an abstraction that can simply be implemented for PostgreSQL as well.
-
-Those are my plans for this project! I'm hoping I can keep up the development
-pace, as I should be having a lot more free time the next couple of months.
-I've grown quite fond of this project, as it solves a specific problem I had
-while allowing me to screw around with some design patterns I hadn't used
-before. I hope to continue developing it into a mature application.
-
-As always, thank you for reading, and have a nice day.
diff --git a/content/dev/otter/_index.md b/content/dev/otter/_index.md
deleted file mode 100644
index 00b6ac5..0000000
--- a/content/dev/otter/_index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: "Otter"
-summary: "Lightweight implementation of the Gpodder API"
-type: "project"
-params:
- links:
- - name: Source
- url: 'https://git.rustybever.be/Chewing_Bever/otter'
----
diff --git a/content/dev/otter/devlog-1.md b/content/dev/otter/devlog-1.md
deleted file mode 100644
index 53e44ca..0000000
--- a/content/dev/otter/devlog-1.md
+++ /dev/null
@@ -1,236 +0,0 @@
----
-title: "Gpodder, Rust and Domain Driven Design"
-date: 2025-03-15T12:55:31+01:00
----
-
-Recently I've gotten into listening to podcasts more, notably the
-[Severed](https://open.spotify.com/show/3yJnUXzFvX4p4QlsfVPuyZ) podcast going
-in depth on every Severance episode. I use Kasts on my computers and AntennaPod
-on my phone to listen, and I looked into how I could sync my subscriptions
-between my devices. This search ended with [Gpodder.net](https://gpodder.net/),
-a free and open-source web service that's supported by both AntennaPod and
-Kasts! The server is also self-hostable, but it's quite the behemoth written in
-Python, and I felt like starting another project, so I decided to implement my
-own version of the API instead. That project is Otter.
-
-## The Gpodder API
-
-The API documentation for Gpodder is available on [Read The
-Docs](https://gpoddernet.readthedocs.io/en/latest/). The documentation is okay,
-but it lacks a lot of important information about how the API should behave. My
-development process for this project consisted of trying to implement routes
-via the documentation before testing it using Kasts. This took a lot of trial
-and error, but I ended up getting most of the routes working the way most
-clients expect (I hope).
-
-Currently Otter supports all routes required for clients to synchronize
-subscriptions and play information for episodes. I've based some of my work on
-[Opodsync](https://github.com/kd2org/opodsync), another implementation of the
-same idea, written in PHP.
-
-## Domain Driven Design
-
-Usually the way I develop projects is very chaotic. I try out different things
-to see what sticks and often end up with very interconnected and difficult to
-separate components that join together into a big mess. Usually this does clean
-up after some time, but I still have a tendency to develop too tightly
-connected components. One example of this would be having ORM logic in web
-route handlers, or jumping through hoops to be able to use the same structs for
-the database operations and the web representation. For Otter, I took a step
-back for once.
-
-I took some inspiration from domain driven design and clean architecture to
-structure my codebase. The idea (at least, the way I understand/interpret it)
-is to work with abstractions that cleanly separate various components. The
-first step was designing said abstraction. I introduced the concept of a
-"Gpodder repository", which is an object that provides all the necessary
-methods required to function as the backend data store for a Gpodder server.
-This repository is defined as a collection of traits:
-
-```rust
-pub trait EpisodeActionRepository {
- /// Insert the given episode actions into the datastore.
- fn add_episode_actions(&self, user: &User, actions: Vec 🙈
-
-## Features:
-
-* Homepage with list of posts.
-* Support for pages.
-* Responsive design for optimized mobile experience.
-* Syntax highlighting with customizable theme.
-* Dark theme which automatically adjusts based on users' setting ([example](https://github.com/LukasJoswiak/etch/wiki/Dark-mode)).
-* No external dependencies, no JavaScript, no web fonts.
-* Internationalization friendly: use default English translations or create your own
-
-## Installation
-
-To install `etch`, download the repository into the `themes` folder in the root of your site.
-
-```
-$ git submodule add https://github.com/LukasJoswiak/etch.git themes/etch
-```
-
-Then, use the theme to generate your site.
-
-```
-$ hugo server -t etch
-```
-
-Use the [sample configuration](https://github.com/LukasJoswiak/etch/wiki/Configuration#sample-configuration) as a starting point. See the [configuration](https://github.com/LukasJoswiak/etch/wiki/Configuration) page for more info.
-
-Read the [wiki](https://github.com/LukasJoswiak/etch/wiki) to learn about more options.
diff --git a/themes/rb/archetypes/default.md b/themes/rb/archetypes/default.md
deleted file mode 100644
index ac36e06..0000000
--- a/themes/rb/archetypes/default.md
+++ /dev/null
@@ -1,2 +0,0 @@
-+++
-+++
diff --git a/themes/rb/assets/css/dark.css b/themes/rb/assets/css/dark.css
deleted file mode 100644
index 3ea1dd8..0000000
--- a/themes/rb/assets/css/dark.css
+++ /dev/null
@@ -1,62 +0,0 @@
-{{ if not (eq .Site.Params.dark "on") -}}
-@media (prefers-color-scheme: dark) {
-{{ end -}}
-html {
- scrollbar-color: #6c6c6c #2e2e2e;
-}
-
-body {
- color: #ebebeb;
- background: #121212;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-header#banner a {
- color: #e0e0e0;
- text-decoration: none;
-}
-
-header#banner nav ul li a {
- color: #cccccc;
-}
-
-header#links a {
- color: #e0e0e0;
- text-decoration: none;
-}
-
-header#links nav ul li a {
- color: #00b1ed;
-}
-
-main#content a {
- color: #00b1ed;
-}
-
-main#content p {
- color: #f5f5f5;
-}
-
-main#content hr {
- background: #5c5c5c;
-}
-
-main#content #toc h4 {
- color: #d4d4d4;
-}
-
-main#content ul#posts small {
- color: #a7a7a7;
-}
-
-main#content ul#posts li a:hover {
- color: #21c7ff;
-}
-
-main#content header#post-header div {
- color: #a7a7a7;
-}
-{{- if not (eq .Site.Params.dark "on") -}}
-}
-{{- end -}}
diff --git a/themes/rb/assets/css/main.css b/themes/rb/assets/css/main.css
deleted file mode 100644
index 6b2598a..0000000
--- a/themes/rb/assets/css/main.css
+++ /dev/null
@@ -1,307 +0,0 @@
-*, *:before, *:after {
- box-sizing: border-box;
-}
-
-html {
- font-size: 62.5%;
-}
-
-body {
- font-size: 16px;
- font-size: 1.6rem;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- color: #313a3d;
- width: 100%;
- margin: 0 auto;
- padding: 0 16px;
- line-height: 1.6;
-}
-
-header#banner {
- margin: 25px 0;
-}
-
-header#banner a {
- color: #313a3d;
- text-decoration: none;
-}
-
-header#banner a:hover {
- text-decoration: underline;
-}
-
-header#banner h2 {
- display: inline;
- font-size: 21px;
- font-size: 2.1rem;
- margin: 0 8px 0 0;
-}
-
-header#banner nav {
- display: inline-block;
-}
-
-header#banner nav ul {
- list-style-type: none;
- font-size: 1.05em;
- text-transform: lowercase;
- margin: 0;
- padding: 0;
-}
-
-header#banner nav ul li {
- display: inline;
- margin: 0 3px;
-}
-
-header#banner nav ul li a {
- color: #454545;
-}
-
-main#content a {
- color: #007dfa;
- text-decoration: none;
-}
-
-main#content a:hover {
- text-decoration: underline;
-}
-
-main#content h1,
-main#content h2,
-main#content h3,
-main#content h4,
-main#content h5,
-main#content h6 {
- margin-bottom: 0;
- line-height: 1.15;
-}
-
-main#content h3 {
- font-size: 19px;
- font-size: 1.9rem;
-}
-
-main#content h1 + p,
-main#content h2 + p,
-main#content h3 + p,
-main#content h4 + p,
-main#content h5 + p,
-main#content h6 + p {
- margin-top: 5px;
-}
-
-main#content p {
- color: #394548;
- margin: 16px 0;
-}
-
-main#content hr {
- height: 1px;
- border: 0;
- background: #d8d8d8;
-}
-
-main#content abbr {
- cursor: help;
-}
-
-/* index.html styles */
-main#content ul#posts {
- list-style-type: none;
- font-size: 16px;
- font-size: 1.6rem;
- margin-top: 0;
- padding: 0;
-}
-
-main#content ul#posts li {
- margin: 5px 0;
- padding: 0;
-}
-
-main#content ul#posts small {
- font-size: 0.8em;
- color: #767676;
- margin-left: 10px;
-}
-
-main#content ul#posts li a {
- text-decoration: none;
-}
-
-main#content ul#posts li a:hover {
- color: #369aff;
-}
-
-main#content ul#posts li a:hover small {
- color: inherit;
-}
-
-/* single.html styles */
-main#content header#post-header h1 {
- display: block;
- font-size: 23px;
- font-size: 2.3rem;
- font-weight: 600;
- line-height: 1.15;
-}
-
-main#content header#post-header > div {
- display: block;
- font-size: 0.85em;
- color: #767676;
-}
-
-main#content #toc {
- border: 1px solid #b1b1b1;
- border-radius: 1px;
- line-height: 26px;
- margin: 16px 0;
- padding: 9px 14px;
-}
-
-main#content #toc h4 {
- font-size: 1.06em;
- color: #3d3d3d;
- margin: 0;
-}
-
-main#content #toc nav#TableOfContents {
- margin-top: 4px;
-}
-
-main#content #toc nav#TableOfContents > ul, main#content #toc nav#TableOfContents > ol {
- margin-left: -40px;
-}
-
-main#content #toc ul, main#content #toc ol {
- font-size: 0.98em;
- margin: 0;
- padding: 0 0 0 40px;
-}
-
-main#content #toc ul {
- list-style-type: none;
-}
-
-main#content #toc ol {
- counter-reset: item;
-}
-
-main#content #toc ol li {
- display: block;
-}
-
-main#content #toc ol li:before {
- content: counters(item, ".") ". ";
- counter-increment: item;
-}
-
-main#content img {
- max-width: 100%;
- margin: 0 auto;
-}
-
-main#content figure {
- margin: 16px 0;
-}
-
-main#content figure img {
- display: block;
- max-width: 100%;
- margin: 0 auto;
-}
-
-main#content figure figcaption {
- font-size: 0.92em;
- font-style: italic;
- line-height: 22px;
- text-align: center;
- margin-top: 6px;
- padding: 0 10px;
-}
-
-main#content figure figcaption h4 {
- font-style: normal;
- display: inline;
- margin: 0;
-}
-
-main#content figure figcaption p {
- display: inline;
- margin: 0;
- padding-left: 8px;
-}
-
-main#content blockquote {
- font-style: italic;
- margin-top: 10px;
- margin-bottom: 10px;
- margin-left: 50px;
- padding-left: 15px;
- border-left: 3px solid #ccc;
-}
-
-main#content code,
-main#content pre {
- font-family: 'Menlo', monospace;
-}
-
-main#content code {
- font-size: 0.96em;
- padding: 0 5px;
-}
-
-main#content pre {
- display: block;
- overflow-x: auto;
- font-size: 14px;
- font-size: 1.4rem;
- white-space: pre;
- margin: 20px 0;
- padding: 1.5rem 1.5rem;
- line-height: 1.4;
-}
-
-main#content pre code {
- padding: 0;
-}
-
-main#content section.footnotes {
- font-size: 0.9em;
-}
-
-footer#footer {
- font-size: 14px;
- font-size: 1.4rem;
- font-weight: 400;
- color: #b3b3b3;
- margin: 40px 0;
-}
-
-header#links {
- display: inline-block;
-}
-
-header#links nav {
- display: inline-block;
-}
-
-header#links nav ul {
- list-style-type: none;
- font-size: 1.05em;
- text-transform: lowercase;
- margin: 0;
- padding: 0;
-}
-
-header#links nav ul li {
- display: inline;
- margin: 0 3px;
-}
-
-header#links nav ul li a {
- color: #007dfa;
- text-decoration: none;
-}
diff --git a/themes/rb/assets/css/min770px.css b/themes/rb/assets/css/min770px.css
deleted file mode 100644
index 076fdee..0000000
--- a/themes/rb/assets/css/min770px.css
+++ /dev/null
@@ -1,52 +0,0 @@
-@media (min-width: 770px) {
-body {
- width: 600px;
- line-height: 1.5;
-}
-
-main#content hr {
- width: 108%;
- margin-left: -3.8%;
-}
-
-/* index.html styles */
-header#banner h2 {
- font-size: 25px;
- font-size: 2.5rem;
-}
-
-main#content h3 {
- font-size: 20px;
- font-size: 2rem;
-}
-
-main#content ul#posts {
- font-size: 18px;
- font-size: 1.8rem;
-}
-
-/* single.html styles */
-main#content header#post-header h1 {
- font-size: 24px;
- font-size: 2.4rem;
-}
-
-main#content img {
- max-width: 108%;
- margin-left: -3.8%;
-}
-
-main#content figure {
- margin-left: -3.8%;
-}
-
-main#content figure img {
- max-width: 108%;
-}
-
-main#content pre {
- width: 108%;
- margin-left: -3.8%;
- padding: 1.5rem 2.2rem;
-}
-}
diff --git a/themes/rb/assets/css/syntax.css b/themes/rb/assets/css/syntax.css
deleted file mode 100644
index 350286e..0000000
--- a/themes/rb/assets/css/syntax.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Background */ .chroma { color: #f8f8f2; background-color: #272822 }
-/* Error */ .chroma .err { color: #960050; background-color: #1e0010 }
-/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
-/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
-/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
-/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
-/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
-/* Keyword */ .chroma .k { color: #66d9ef }
-/* KeywordConstant */ .chroma .kc { color: #66d9ef }
-/* KeywordDeclaration */ .chroma .kd { color: #66d9ef }
-/* KeywordNamespace */ .chroma .kn { color: #f92672 }
-/* KeywordPseudo */ .chroma .kp { color: #66d9ef }
-/* KeywordReserved */ .chroma .kr { color: #66d9ef }
-/* KeywordType */ .chroma .kt { color: #66d9ef }
-/* NameAttribute */ .chroma .na { color: #a6e22e }
-/* NameClass */ .chroma .nc { color: #a6e22e }
-/* NameConstant */ .chroma .no { color: #66d9ef }
-/* NameDecorator */ .chroma .nd { color: #a6e22e }
-/* NameException */ .chroma .ne { color: #a6e22e }
-/* NameFunction */ .chroma .nf { color: #a6e22e }
-/* NameOther */ .chroma .nx { color: #a6e22e }
-/* NameTag */ .chroma .nt { color: #f92672 }
-/* Literal */ .chroma .l { color: #ae81ff }
-/* LiteralDate */ .chroma .ld { color: #e6db74 }
-/* LiteralString */ .chroma .s { color: #e6db74 }
-/* LiteralStringAffix */ .chroma .sa { color: #e6db74 }
-/* LiteralStringBacktick */ .chroma .sb { color: #e6db74 }
-/* LiteralStringChar */ .chroma .sc { color: #e6db74 }
-/* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 }
-/* LiteralStringDoc */ .chroma .sd { color: #e6db74 }
-/* LiteralStringDouble */ .chroma .s2 { color: #e6db74 }
-/* LiteralStringEscape */ .chroma .se { color: #ae81ff }
-/* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 }
-/* LiteralStringInterpol */ .chroma .si { color: #e6db74 }
-/* LiteralStringOther */ .chroma .sx { color: #e6db74 }
-/* LiteralStringRegex */ .chroma .sr { color: #e6db74 }
-/* LiteralStringSingle */ .chroma .s1 { color: #e6db74 }
-/* LiteralStringSymbol */ .chroma .ss { color: #e6db74 }
-/* LiteralNumber */ .chroma .m { color: #ae81ff }
-/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
-/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
-/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
-/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
-/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
-/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
-/* Operator */ .chroma .o { color: #f92672 }
-/* OperatorWord */ .chroma .ow { color: #f92672 }
-/* Comment */ .chroma .c { color: #75715e }
-/* CommentHashbang */ .chroma .ch { color: #75715e }
-/* CommentMultiline */ .chroma .cm { color: #75715e }
-/* CommentSingle */ .chroma .c1 { color: #75715e }
-/* CommentSpecial */ .chroma .cs { color: #75715e }
-/* CommentPreproc */ .chroma .cp { color: #75715e }
-/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
-/* GenericDeleted */ .chroma .gd { color: #f92672 }
-/* GenericEmph */ .chroma .ge { font-style: italic }
-/* GenericInserted */ .chroma .gi { color: #a6e22e }
-/* GenericStrong */ .chroma .gs { font-weight: bold }
-/* GenericSubheading */ .chroma .gu { color: #75715e }
diff --git a/themes/rb/exampleSite/config.toml b/themes/rb/exampleSite/config.toml
deleted file mode 100644
index 527434a..0000000
--- a/themes/rb/exampleSite/config.toml
+++ /dev/null
@@ -1,38 +0,0 @@
-baseURL = "https://example.com"
-title = "Website Name"
-theme = "etch"
-languageCode = "en-US"
-enableInlineShortcodes = true
-pygmentsCodeFences = true
-pygmentsUseClasses = true
-
-[params]
- description = "Your site description"
- copyright = "Copyright © 2021 Your Name"
- dark = "auto"
- highlight = true
-
-[menu]
- [[menu.main]]
- identifier = "posts"
- name = "posts"
- title = "posts"
- url = "/"
- weight = 10
-
- [[menu.main]]
- identifier = "about"
- name = "about"
- title = "about"
- url = "/about/"
- weight = 20
-
-[permalinks]
- posts = "/:title/"
-
-[markup.goldmark.renderer]
- # Allow HTML in Markdown
- unsafe = true
-
- [markup.tableOfContents]
- ordered = true
diff --git a/themes/rb/exampleSite/content/_index.md b/themes/rb/exampleSite/content/_index.md
deleted file mode 100644
index 2a74490..0000000
--- a/themes/rb/exampleSite/content/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: "Home"
----
-This is some info about me.
diff --git a/themes/rb/exampleSite/content/about/index.md b/themes/rb/exampleSite/content/about/index.md
deleted file mode 100644
index eb5384b..0000000
--- a/themes/rb/exampleSite/content/about/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
-+++
-title = "About"
-+++
-
-Written in Go, Hugo is an open source static site generator available under the [Apache Licence 2.0.](https://github.com/gohugoio/hugo/blob/master/LICENSE) Hugo supports TOML, YAML and JSON data file types, Markdown and HTML content files and uses shortcodes to add rich content. Other notable features are taxonomies, multilingual mode, image processing, custom output formats, HTML/CSS/JS minification and support for Sass SCSS workflows.
-
-Hugo makes use of a variety of open source projects including:
-
-* https://github.com/yuin/goldmark
-* https://github.com/alecthomas/chroma
-* https://github.com/muesli/smartcrop
-* https://github.com/spf13/cobra
-* https://github.com/spf13/viper
-
-Hugo is ideal for blogs, corporate websites, creative portfolios, online magazines, single page applications or even a website with thousands of pages.
-
-Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
-
-Websites built with Hugo are extremelly fast, secure and can be deployed anywhere including, AWS, GitHub Pages, Heroku, Netlify and any other hosting provider.
-
-Learn more and contribute on [GitHub](https://github.com/gohugoio).
diff --git a/themes/rb/exampleSite/content/posts/emoji-support.md b/themes/rb/exampleSite/content/posts/emoji-support.md
deleted file mode 100644
index ecf6c86..0000000
--- a/themes/rb/exampleSite/content/posts/emoji-support.md
+++ /dev/null
@@ -1,47 +0,0 @@
-+++
-author = "Hugo Authors"
-title = "Emoji Support"
-date = "2019-03-05"
-description = "Guide to emoji usage in Hugo"
-tags = [
- "emoji",
-]
-+++
-
-Emoji can be enabled in a Hugo project in a number of ways.
-
-The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes).
-
-To enable emoji globally, set `enableEmoji` to `true` in your site’s [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
-
-
-:see_no_evil: 🙉 :hear_no_evil: 🙊 :speak_no_evil:
-
-The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
-
-***
-
-**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
-
-{{< highlight html >}}
-.emoji {
-font-family: Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;
-}
-{{< /highlight >}}
-
-{{< css.inline >}}
-
-{{< /css.inline >}}
\ No newline at end of file
diff --git a/themes/rb/exampleSite/content/posts/markdown-syntax.md b/themes/rb/exampleSite/content/posts/markdown-syntax.md
deleted file mode 100644
index d60c404..0000000
--- a/themes/rb/exampleSite/content/posts/markdown-syntax.md
+++ /dev/null
@@ -1,147 +0,0 @@
-+++
-author = "Hugo Authors"
-title = "Markdown Syntax Guide"
-date = "2019-03-11"
-description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
-tags = [
- "markdown",
- "css",
- "html",
- "themes",
-]
-categories = [
- "themes",
- "syntax",
-]
-series = ["Themes Guide"]
-aliases = ["migrate-from-jekyl"]
-+++
-
-This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
-
-
-## Headings
-
-The following HTML ``—`
` elements represent six levels of section headings. `
` is the highest section level while `
` is the lowest.
-
-# H1
-## H2
-### H3
-#### H4
-##### H5
-###### H6
-
-## Paragraph
-
-Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
-
-Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
-
-## Blockquotes
-
-The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
-
-#### Blockquote without attribution
-
-> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
-> **Note** that you can use *Markdown syntax* within a blockquote.
-
-#### Blockquote with attribution
-
-> Don't communicate by sharing memory, share memory by communicating.
Test
- - -``` -#### Code block indented with four spaces - - - - - -Test
- - - -#### Code block with Hugo's internal highlight shortcode -{{< highlight html >}} - - - - -Test
- - -{{< /highlight >}} - -## List Types - -#### Ordered List - -1. First item -2. Second item -3. Third item - -#### Unordered List - -* List item -* Another item -* And another item - -#### Nested list - -* Item -1. First Sub-item -2. Second Sub-item - -## Other Elements — abbr, sub, sup, kbd, mark - -GIF is a bitmap image format. - -H2O - -Xn + Yn = Zn - -Press CTRL+ALT+Delete to end the session. - -Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures. - diff --git a/themes/rb/exampleSite/content/posts/placeholder-text.md b/themes/rb/exampleSite/content/posts/placeholder-text.md deleted file mode 100644 index 378b995..0000000 --- a/themes/rb/exampleSite/content/posts/placeholder-text.md +++ /dev/null @@ -1,58 +0,0 @@ -+++ -author = "Hugo Authors" -title = "Placeholder Text" -date = "2019-03-09" -description = "Lorem Ipsum Dolor Si Amet" -tags = [ - "markdown", - "text", -] -+++ - -Lorem est tota propiore conpellat pectoribus de -pectora summo. Redit teque digerit hominumque toris verebor lumina non cervice -subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc -caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis -lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum. - -1. Exierant elisi ambit vivere dedere -2. Duce pollice -3. Eris modo -4. Spargitque ferrea quos palude - -Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus -silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria -tractus malis. - -1. Comas hunc haec pietate fetum procerum dixit -2. Post torum vates letum Tiresia -3. Flumen querellas -4. Arcanaque montibus omnes -5. Quidem et - -# Vagus elidunt - - - -[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon) - -## Mane refeci capiebant unda mulcebat - -Victa caducifer, malo vulnere contra -dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere -furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis. - -Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli -Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare -Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert -ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae -vulnus haerentia iuste et exercebat, sui et. - -Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem -Propoetides **parte**. - -{{< css.inline >}} - -{{< /css.inline >}} diff --git a/themes/rb/exampleSite/content/posts/rich-content.md b/themes/rb/exampleSite/content/posts/rich-content.md deleted file mode 100644 index 8cb8861..0000000 --- a/themes/rb/exampleSite/content/posts/rich-content.md +++ /dev/null @@ -1,34 +0,0 @@ -+++ -author = "Hugo Authors" -title = "Rich Content" -date = "2019-03-10" -description = "A brief description of Hugo Shortcodes" -tags = [ - "shortcodes", - "privacy", -] -+++ - -Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds. - ---- - -## YouTube Privacy Enhanced Shortcode - -{{< youtube ZJthWmvUzzc >}} - -