Installing postmarketOS on a OnePlus 6 with an encrypted filesystem

I’ve been experimenting with postmarketOS for a long time now. My long-term aspiration is to set up a phone that I can use as a daily driver. I need to overcome a lot of obstacles to achieve this. Today, my goal is to encrypt the main partition. So if I lose the phone, it doesn’t … | Continue reading


@whynothugo.nl | 1 year ago

Thoughts on sendmail in 2023

Sendmail is a classic mail transfer agent (MTA) in the world of Unix-like systems. It’s design is simple, and worked well for many setups for decades. For many scenarios it still works. For others, it does not. Sendmail as a system-wide tool Sendmail is typically set up by a syst … | Continue reading


@whynothugo.nl | 1 year ago

vdirsyncer status update 2023-03

This is a long overdue update on the status on vdirsyncer’s rewrite. I keep thinking “I’ll just finish this one bit before publishing it”, but that always seems to be a day or two in the future, so here goes. Funding I’m very happy to announce that the NLnet foundation has agreed … | Continue reading


@whynothugo.nl | 1 year ago

AI-assisted computer interfaces of the future

I’ve been rewatching Star Trek TNG lately, and a question that often comes to mind is: If they have all these computerised sensors, and they have a computer capable of converting information into voice, why do they need technicians constantly interacting with each terminal to rea … | Continue reading


@whynothugo.nl | 1 year ago

Notes on Podman

Podman is an alternative implementation of Docker which addresses some design issues in Docker. The most obvious/notable difference is that Podman doesn’t require a daemon running permanently, which is nice, but not a huge deal. It also has other design differences, but most of t … | Continue reading


@whynothugo.nl | 1 year ago

Using a Yubikey for both GPG and TOTP

I’ve written before on how I use a Yubikey for hardware-based GPG and 2FA on the web. I also use it for TOTP. That is, the Yubikey itself generates those common “authenticator codes” like many other Authenticator apps. But the secret seed is saved into hardware that does not supp … | Continue reading


@whynothugo.nl | 1 year ago

In praise of Alpine and apk

Since the change of year, I’ve been using Alpine Linux on my main computing device (a new desktop PC that I assembled in December). These are some notes on in, some niceties and caveats. I used ArchLinux for over a decade before, so keep in mind that my main point of reference/ba … | Continue reading


@whynothugo.nl | 1 year ago

OpenWrt with KPN fibre optics

I’ve always preferred to use my own router at home when possible, and was pleasantly surprised to learn that the EU actually has rules around router freedom. That is, each user is allowed to use their own hardware at home, rather than being imposed which hardware they can use by … | Continue reading


@whynothugo.nl | 1 year ago

vdirsyncer: looking for hosted Dav servers

Current state of affairs As part of vdirsyncer’s test suite, I currently run tests against a multiple CalDav/CardDav servers. The CI pipeline does this by downloading dockerised versions of all the servers, starting them up and then running tests. This isn’t ideal. On CI, the rad … | Continue reading


@whynothugo.nl | 1 year ago

icalendar bug at NS International

Today I purchased train tickets to FOSDEM on NS International. The site has a handy option to “Add to Agenda”, which generates an icalendar file which one can add to their calendar agenda. I downloaded it and tried to import it into my calendar tool of choice, khal. It crashed. I … | Continue reading


@whynothugo.nl | 1 year ago

Setting up IRC redirects

A few weeks ago I wanted to set up a few redirects on IRC. Mainly, I wanted to redirect #vdirsyncer, #khal and #todoman to the #pimutils channel (given that pimutils is the umbrella project for both of these). These are the commands I had to run after authenticating: /msg ChanSer … | Continue reading


@whynothugo.nl | 1 year ago

Notes on ruff

ruff is a tool to check and lint Python code. It’s written in Rust and it really is blazing fast. The first time I ran it on a real codebase I immediately got an error and, for a split-second, though it was an execution error. It had actually run successully in a few milliseconds … | Continue reading


@whynothugo.nl | 1 year ago

Notes on pre-commit

pre-commit is a tool to configure git pre-commit hooks. It allows defining hooks in a simply syntax and runs them only if files of a specific type change (e.g.: run mypy only if *.py files have changed). Additionally, it’ll stash unstaged changes when running, so any files that a … | Continue reading


@whynothugo.nl | 1 year ago

Selection cheatsheet

There’s multiple selections: PRIMARY: is the old-school Unix one; select text to copy it. Middle-click to paste it. Three-finger tap on a touchpad also pastes it. CLIPBOARD: the well-known ctrl-c and ctrl-v (or Super+c). SECONDARY: historical, irrelevant, don’t worry about this o … | Continue reading


@whynothugo.nl | 1 year ago

Copying with Super+C

Historically, Ctrl+c has been used to interrupt a process on terminals. This applies on Linux, but also applied to BSDs and Unixes before it. This is still true, even today, on pretty much any terminal emulator. When mice became a thing, one could simply select text and then clic … | Continue reading


@whynothugo.nl | 2 years ago

Systemd, locking and sleeping

Locking the system logind (part of systemd) emits events when the system is about to be locked or go into sleep. Typically, one can configure logind so that closing the laptop lid triggers a “lock the session” event. However, this just emits a D-Bus signal and doesn’t provide fac … | Continue reading


@whynothugo.nl | 2 years ago

How the Clipboard Works

Continue reading


@whynothugo.nl | 2 years ago

Shotman 0.2 development update part 2

After the initial proof of concept of the shotman rewrite, my next goal was to have an implementation that could fully replace the previous version for daily usage. My main use of shotman is “take screenshot of current window”, and I have two other (less frequent) use cases. They … | Continue reading


@whynothugo.nl | 2 years ago

Shotman 0.2 development update part 1

Update: This article was renamed to “part 1” when publishing part 2. These last couple of week I’ve been putting a lot of time into shotman. Shotman is a small GUI tool I wrote a few months ago. It shows a small preview window when a screenshot is saved, and has controls to copy … | Continue reading


@whynothugo.nl | 2 years ago

My packaging policy

The open source sphere has continuously had a lot of discussion regarding packaging, and there’s often an expectation that upstream developers should distribution packages. I want to make it clear where I stand on this, what users of my projects can expect, and what how packagers … | Continue reading


@whynothugo.nl | 2 years ago

Please verify it's you

Welcome! It looks like you haven’t logged into your account in a really long time. We need to verify it’s you. To do so, we hope you still have that one thing that people frequently change after a really long time: your phone number! Obviously you can’t have moved or simply switc … | Continue reading


@whynothugo.nl | 2 years ago

Meson for Python applications

I’ve ported caffeine-ng to use meson rather than python-wheel for building and installing. Python’s packaging ecosystem is moving in a direction that will only support python packages, but not packages that need to install data files outside python’s package location. This last s … | Continue reading


@whynothugo.nl | 2 years ago

Announcing caffeine-ng v4.0.0

caffeine-ng is a small tool that shows an icon on the desktop status bar to temporarily disable screenlockers, screensavers, and screen dimming. It is typically used to temporarily avoid the screen turning off for things like watching a movie, a videoconference and alike. Version … | Continue reading


@whynothugo.nl | 2 years ago

Using a Yubikey for GPG

I’ve written recently on how I use a Yubikey as a hardware security token for two factor authentication. One item I was missing was GPG, and this was mostly because setting up GPG is a bit tricker to set up and I simply hadn’t had the time. My previous key recently expired, so th … | Continue reading


@whynothugo.nl | 2 years ago

Quick and simple VMs with qemu

I don’t use VMs very often, so there’s no chance I can remember all the dozens of command line flags for qemu. I end up using virt-manager most of the time. It’s a GUI for managing QEMU (and other VM backends) and has dozens of checkboxes and buttons, which come in handy for real … | Continue reading


@whynothugo.nl | 2 years ago

The Murena Lies

I usually abstain from writing just to criticise someone’s work. Rather than say “X is wrong”, I prefer to say “X could improve by doing Y”. However, in the case of Murena, there’s just too much shameless lying to the public. I don’t think this kind of activity should be allowed … | Continue reading


@whynothugo.nl | 2 years ago

Status update, May 2022

vdirsyncer rewrite I’ve been working on some foundational code for the vdirsyncer rewrite. I have some basic traits that all storages will implement, and have a working filesystem storage, which reads a vdir. The filesystem storage itself also helps validate that the API is sound … | Continue reading


@whynothugo.nl | 2 years ago

How I secure my setup with a YubiKey

YubiKeys I have a pair of YubiKey 5C NFC, which I use for authentication a lot. They’re small USB-C authentication devices which can generate multiple types of keys and are usable for different types of authentication. There's also a USB-A version if USB-C ports aren't your thing … | Continue reading


@whynothugo.nl | 2 years ago

Open source platforms for open source software

There’s something that’s been low-key bothering me for many months now: the fact that so much open source software is hosted on proprietary platforms and has such a strong dependency on non-open source non-free forges. Now, sometimes we must be pragmatical, and use the closed sou … | Continue reading


@whynothugo.nl | 2 years ago

Fairphone: please lead by example!

The FSFE published an open letter a couple of days ago, asking for legislation to allow users to freely user their own devices, contrary to the status quo, where devices are locked down and controlled fully by the manufacturer rather than the end-user. I whole agree with this sta … | Continue reading


@whynothugo.nl | 2 years ago

A vdirsyncer rewrite

I’ve been planning a full rewrite of vdirsyncer for quite some time now. So far work on vdirsyncer (both on the original version and on this rewrite) has happened during free time and is mostly unpaid. My intention is to seek sponsors for this rewrite, so that I can dedicate more … | Continue reading


@whynothugo.nl | 2 years ago

Introducing darkman v1.0.0

I’m pleased to announce the release of darkman 1.0. Darkman is a session service that transitions a desktop environment between colour schemes. It switches to dark mode at sundown, and back to light mode at sunrise. This small project started in 2020, out of frustration with dark … | Continue reading


@whynothugo.nl | 2 years ago

I like that Signal is looking for sponsors

Recently Signal has started asking people to sponsor them, and I’m actually really glad that this is happening. There are many companies out there offering “free services”, but, generally, companies that offer free instant messaging are often doing it to build a detailed profile … | Continue reading


@whynothugo.nl | 2 years ago

Running Eve-Online on Linux/Wayland

Initially, the launcher would render only a black window, and nothing else. I noticed that moving it off-screen and back again, it would have updated content, but remained frozen. As a coincidence, I noticed that when moved onto the edge of the screen, parts near the edge would r … | Continue reading


@whynothugo.nl | 2 years ago

The issue with flatpak's permissions model

There seems to be a lot of discussion of whether Flatpak is terrible or is great, whether it’s the future or whether it’s complete trash. I think Flatpak does a lot of very useful things, and requires more work in other aspects. I’m not sure what the The One True Package Manager™ … | Continue reading


@whynothugo.nl | 2 years ago

How disk encryption works

Note: this article avoids being too technical and is rather geared towards non-technical users. Without disk encryption Historically, computers used to ask you for a username and password after you turned them on. This was mostly an authentication mechanism to prevent strangers s … | Continue reading


@whynothugo.nl | 3 years ago

My desktop-wide microphone mute toggle

I use a global hotkey (Super1+m) to toggle my microphone between muted and unmuted. It’s been very handy so far. Different videocall applications all have different hotkeys to mute / unmute oneself, and this avoids me having to keep a mental map of all the different mappings. It’ … | Continue reading


@whynothugo.nl | 3 years ago

A simple boot setup with SecureBoot

I use a pretty simple setup for booting my systems. The hardware firmware (UEFI) loads a signed bootloader (systemd-boot in my case, but gummiboot is basically the same for non-systemd systems). The bootloader loads a signed executable that bundles the kernel, initrd and the cmdl … | Continue reading


@whynothugo.nl | 3 years ago

Zoom screen sharing on ArchLinux

Zoom doesn’t support screen sharing on Linux unless you’re using GNOME or X11. Also, Zoom only runs via XWayland (a compatibility layer for older applications). XWayland doesn’t really support desktop scaling, which is why it looks so blurry: This is a very funny message, and not … | Continue reading


@whynothugo.nl | 4 years ago

What is git?

git is one of the most important tools for a developer nowadays regardless of what programming language is being used. Regrettably, it seems that nobody explains what git is to new developers at any point. Over the years, I’ve mentored many fellow developers of different levels o … | Continue reading


@whynothugo.nl | 4 years ago

Spotify review

Since copying music to my iPhone is a bit of pain, I decided to stop being a dinosaur, and get into this new world of on-demand music streaming. Regrettably, it seems that these services are really below alpha quality - and amazingly, manage to have millions of customers anyway ( … | Continue reading


@whynothugo.nl | 7 years ago

Using FreeOTP with Battle.net

Some battlet.net users have requested, over and over to use other apps as a battle.net 2FA. These include FreeOTP, Authy, and possible others (Google Authenticator, AFAIK, cannot be used since it lacks the ability to configure the amount of digits). After some searching the web, … | Continue reading


@whynothugo.nl | 8 years ago

Using letsencrypt with HKPK

HKPK (RFC7469) is a standard that tells browser to cache a certain TLS certificate’s signature, and validate that future visits use that certificate (or a defined backup). I intended on enabling this on my servers, but since letsencrypt renews your certificates every few months, … | Continue reading


@whynothugo.nl | 8 years ago

I'm giving up on IM

I’ve been using XMPP as my primary IM protocol for years now. I’ve used a few other things on the side, but I’ve always advertised it as my primary mean of communication. And it’s really worked for a long time: lots of developers and people in FLOSS circles use XMPP, and Google T … | Continue reading


@whynothugo.nl | 9 years ago

Start small, then grow

All of us developers who love what we do have started lots of side-projects. And almost all of us have equally as many side-projects abandoned on some workspace or projects directory, rotting, with no hope of every achieving completion. New projects are dumped there periodically, … | Continue reading


@whynothugo.nl | 9 years ago

Introducing Todoman

Inspired on memo and khal, todoman is a simple todo manager, (or task manager), designed to take note and keep track of pending tasks, that runs as a cli application on almost any Unix-like system (this includes Linux, BSD and probably other OSs from the Unix family). Todoman is … | Continue reading


@whynothugo.nl | 9 years ago

Open source your website

Unless your business’s value is actually on your website code itself, there’s little reason not to share your site’s code. I understand why facebook or gmail won’t release the code to their site (I understand, without condemning nor condoning), but if you’ve got a blog, an instit … | Continue reading


@whynothugo.nl | 9 years ago

Opensmtpd and dovecot with a shared SQL database

This article will describes how to achieve a flexible and scalable email setup using opensmtpd and dovecot. For single-user or single-domain setups, this is an overkill, but feel free to read ahead, you may still find something useful. Introduction I’ve used opensmtpd and dovecot … | Continue reading


@whynothugo.nl | 9 years ago