My Blog // Digital Archive

Thoughts, projects and technical notes

I have quickly switched my blog from WriteFreely to a custom development: MD-Blog (the MD naturally stands for Markdown). The trigger was a failed update of the old system โ€“ but in the end, it was the perfect impetus to radically simplify everything and gain full control over the design.

At its core are simple Markdown files in the data/ folder, which are converted into modern HTML at runtime. The result is lightning fast, works without a database, and thanks to a custom design system (including Dark Mode), it now looks exactly as I imagined. Even a modern Mastodon share button is now directly on board.

If you are interested in the code or the lean setup, feel free to get in touch with me via Mastodon!

Actually, the idea behind #Winboat is excellent, but the implementation currently seems a bit unstable. Since the installation at the start of the year, the system had been running, but today the software completely stopped working.

The image suddenly reported insufficient memory (RAM). I tried to fix the problem manually, which unfortunately rendered the system permanently unusable. Instead of investing more time in troubleshooting, I switched directly to the Dockurr Windows image โ€“ which forms the technical basis of Winboat anyway.

Error message

1. Preparation

Since I use Podman, I first created the necessary directories on my host system. This ensures data integrity if the container needs to be recreated:

mkdir -p $HOME/Windows/System
mkdir -p $HOME/Windows/Shared

2. The start command

Important note: Replace the placeholders in the -e USERNAME and -e PASSWORD variables with your personal login credentials.

podman run -d \
  --name windows \
  -p 8006:8006 \
  --device=/dev/kvm \
  --cap-add NET_ADMIN \
  -e RAM_SIZE="8G" \
  -e USERNAME="Carsten" \
  -e PASSWORD="1234" \
  -e LANGUAGE="German" \
  -v $HOME/Windows/System:/storage:Z \
  -v $HOME/Windows/Shared:/shared:Z \
  --stop-timeout 120 \
  dockurr/windows

Once the container is active, you can access the Windows instance directly via your browser:

http://127.0.0.1:8006

Running container

3. Summary

I only had to run the command above once. In daily operation, the Windows environment can now be conveniently controlled using these shortcuts:

  • Start: podman start windows
  • Stop: podman stop windows (or shut down directly within Windows)
  • Check status: podman ps -a

Further links:

I've set up my own blog โ€” primarily to get to know #NixOS better. Surprisingly, it was all quite straightforward.

WriteFreely is a great fit for this: minimalist, quick to set up, and without much bloat. Perfect for just getting started and learning something along the way. The configuration is pleasantly clear. A few options set, directory prepared, reverse proxy in front โ€” done.

This is what my current NixOS configuration for it looks like:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # Fix for ActivityPub key generation: federation requires openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatic creation of the data directory with the correct permissions
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

That's essentially it. NixOS makes it really easy to configure such services cleanly and keep them reproducible.