Systemd Timer
Using systemd timers
Requirements
Two parts working together:
- systemd timer
- systemd service
Example:
- borgmatic.service (i.e. /usr/lib/systemd/system/borgmatic.service)
- borgmatic.timer (i.e. /usr/lib/systemd/system/borgmatic.timer)
Adjusting the timer
Default Timer
Listing /usr/lib/systemd/system/borgmatic.timer
[Unit]
Description=Run borgmatic backup
[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=3h
[Install]
WantedBy=timers.target
Persistent=true
If true, the time when the service unit was last triggered is stored on disk. When the timer is activated, the service unit is triggered immediately if it would have been triggered at least once during the time when the timer was inactive.
Traefik: Enable Http3
Enable Http3 with Traefik using Docker Compose
Change Docker Compose File
Because http/3 uses UDP we need to also take care of the firewall that usually blocks UDP traffic on HTTPS Port 443.
To enable http3 in Traefik V3, add the following to your docker-compose.yml file:
services:
traefik:
image: traefik:v3
container_name: "traefik"
restart: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.websecure.address=:443"
# Add the following lines
- "--entrypoints.websecure.http3=true"
- "--entrypoints.websecure.http3.advertisedport=443"
ports:
# Docker only exposes TCP by default, so we need to expose UDP as well
- "443:443/tcp"
- "443:443/udp"
Test if http3 is enabled
╭─traefik@www.vaduzz.de in repo: garden on main [!?] took 0s
╰─λ curl -Iv --http3 https://www.vaduzz.de
* Host www.vaduzz.de:443 was resolved.
[...]
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://www.vaduzz.de/
* [HTTP/3] [0] [:method: HEAD]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: www.vaduzz.de]
* [HTTP/3] [0] [:path: /]
* [HTTP/3] [0] [user-agent: curl/8.15.0]
* [HTTP/3] [0] [accept: */*]
> HEAD / HTTP/3
> Host: www.vaduzz.de
[...]
Sensirion Sps30 Experiments
Sensirion SPS30 Experiments
For some days an air purifier is doing its work here, leading to significant improvements but only if running in manual mode, the automatic mode seems lacking, at least according to my nose.
Because this is not very scientific, I decided to connect another sensor to my pc and see if the values somewhere else in the room differ from what the purifier measures.
A possible reason: to measure airquality, you need to transport enough air to the sensor, but what happens if the automatic mode drops fan speeds so low that it’s not enough to produce accurate reads?
Integrate Solix in Homeassistant
Integrate Solix in Homeassistant
This describes how I added a system with solar panels and smart meter into Homeassistant.
Goals
- achieve an accurate overview of the energy generated, stored and consumed
- use existing hardware as much as possible
Possible Result
Should look like this:

Garden Versioning
Sometimes you should read the changelog
Tags were not working properly, which ended up like this:

Hugo was complaining in the terminal like this:
hugo server --buildDrafts --disableFastRender
WARN found no layout file for "html" for kind "term": You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
I went down some rabbit holes and stumpled accross an information from the Hugo Docs
Updating Kubernetes on Talos
Upgrading Kubernetes on Talos
Introduction
I pulled the short straw and the builtin talosctl upgrade-k8s did not work for me and after spending some time investigating and failing to find the solution I just decided to go the long way and update things manually.
For Reference: Official Docs v1.10
Upgrade steps
Set environment to the correct cluster
set -gx KUBECONFIG ~/.config/kubeconfig_hcloud
set -gx TALOSCONFIG ~/.config/talosconfig
Ensure everything is running fine.
In case someone wonders about the command, I’m using oc as kubectl replacement because my brain is hardwired through years of working with this thing.
Building Shades
Building Shades
Goals
- pages written in Markdown, deployed as a static site
- pages pushed to git, rendered automatically without user interaction
- low-cost, reasonable performance solution
Infrastructure
- kubernetes cluster
- object storage
- domain
- git
- linux workstation
Steps
From Zero to First Post
- install hugo binary
- create a git repository and, if not public, create an application token for read access
- create a bucket where your static files for the webpage are stored
- install kubernetes manifests for
- cronjob
- renders static site using hugo
- pushes to s3
- nginx
- handles serving the static website from s3 to http
- ingress
- handles tls termination at the edge
- cronjob
- configure hugo
- create a post
- test locally served page
Technical Details
Hugo Stuff
- install hugo binary: https://gohugo.io/installation/
- i.e.
pacman -S hugo hugo version #does this work?
- i.e.
- create git repository
- create application token
- permissions: repository read
git clone <repo>
- create application token
- create a bucket
- Hetzner Cloud
- public access
- no versioning
- Hetzner Cloud
hugo new site garden --force- edit
hugo.toml, look for a nice theme here: https://themes.gohugo.io/- set theme in
hugo.tomlliketheme = 'example'
- set theme in
- create a post with
hugo new content content/posts/something-new.md - serve locally
hugo server --buildDrafts - remember to change
draft=truetodraft=falsein the header of the markdown file - commit to repository
Kubernetes Stuff
Example for Hetzner Cloud NBG1 bucket
New Shade
Somewhere in the corner of my mind
something kept nagging me to build a space for those not-so-shiny ideas, thoughts and experiments I come across while tinkering. Lately the garbage collection of my human brain tends to be more thorough with collecting information so i think it might be interesting to see where those bits and pieces are leading to.
And finally, this is the place…
Shades in the Garden
- Linux
- Virtualization
- Containers and Pods
- Networks
- Automation
- Monitoring
Below the surface
- Hugo
- Object Storage
- Kubernetes Cronjob
- Forgejo