The vdirsyncer rewrite on which I have been working these last months will be named pimsync, not vdirsyncer v2. The idea of a different name originally came to mind due to difficulty pronouncing the original name, and having to spell it out every time I spoke about it in person. … | Continue reading
snooze is a program to run scheduled tasks, and its design matches exactly what I’d been wanting: snooze parses the schedule, sleeps until the desired time and finally executes the specified command. Each task is an individual process which can be managed with the usual process m … | Continue reading
The folks from Radically Open Security recently completed their security audit. This was sponsored by the NGI0 Entrust Fund via the NLnet foundation. My deepest appreciation for this opportunity. The audit uncovered four minor findings, but no huge security issues. I remain confi … | Continue reading
I believe that this rewrite of vdirsyncer is stable enough to warrant a stable release. Initially, I wanted to reach feature parity with the previous implementation before calling this stable, but I don’t think that’s the right mentality: the new version is stable enough for dail … | Continue reading
I wanted a quick setup where I can speak to my laptop, and it will record the audio and then give me a text transcript of what I have said. My intention is to produce long text by speaking it out loud and then doing some minor refinement by changing potential cycles. Preparation … | Continue reading
Today I started work on emoji-im, an input method to type emoji. The general ideal is pretty simple, when the input method is active, I type a word, and the input method pop-up suggests emoji based on the word typed. Pressing space inserts that emoji. By implementing this as an i … | Continue reading
A few years ago I moved to the Netherlands. Offices and houses here have large windows, and we can enjoy a lot of sunlight during the long summer days. With so much sunlight shining into my working environment, I need to use my computing devices on light mode. Black text on white … | Continue reading
Vdirsyncer in its current state has been working for me reliable for quite some time now, and I’m very happy how this has shaped up. Since the last status update, a lot of polishing has happened, and I’ve completed support for failure scenarios that could lead to data corruption. … | Continue reading
I have two seemingly conflicting goals with vdirsyncer: I want to keep the scope and code simple, reach a stable state, and stop adding new features. I want to support a variety of use cases, like being able to use client TLS certificates, custom http transports, etc. After think … | Continue reading
I often want to copy URLs or text or other data from my laptop/desktop on a phone. Sometimes it’s my own phone, sometimes it’s someone else’s phone, and sometimes it’s a phone that isn’t even set up yet. My solution works as follows: I copy into my CLIPBOARD selection the data th … | Continue reading
These are different ways of typing non-English characters on computers. Alternative Graph[permalink] The AltGr (Alternative Graph) key is typically located on the right of the space bar. Some keyboard don’t have an AltGr key but have a second Alt key instead. In this case, the ri … | Continue reading
In theory I’ve been resting in bed with COVID these last days, but it’s hard for me to sit my entirely idle, so I wrote a invested some of this time in familiarising myself with hare-wayland and hare-ev. wlhc is a small program to enable “hot corners” on wayland desktops. It take … | Continue reading
I have a list with ideas of “useful tools that I want to write someday” that would likely take hundreds of years to complete. Finding out that somebody has already written one the tools in this list pleases me immensely, not only because I can use the tool in this lifetime, but a … | Continue reading
Renaming items[permalink] Last month I mentioned a bug when items are renamed in a collection. After renaming an item, vdirsyncer would check the entire content on both sides during every single execution. I have now fixed this. I have now renamed all my vcard files to match the … | Continue reading
IRC is great for public rooms or public meeting points. I like to imagine IRC servers as virtual co-working spaces. The kind of co-working space with lots of meeting rooms. Each channel is a one of these meeting room, and anyone can walk in at any time. If you were there first in … | Continue reading
When programs crash in certain specific ways, the kernel can generate a core dump file. A core dump is a file containing an image of the process’s memory at the moment when it was terminated. A core dump can later be used with tools such as gdb to generate a backtrace of the prog … | Continue reading
A major caveat in tools like sudo and doas for that matter is that they rely on setuid binaries and privilege escalation in order to run commands as root. The design is not ideal, and also drags in a few limitations: The whole user session needs to retain capabilities to perform … | Continue reading
This has been a slow month. I took a short vacation the last days of April, and as soon as I got back had some health issues which got in the way of me doing anything productive or fun. vdirsyncer alpha release[permalink] I have finally tagged an alpha release of vdirsyncer 2. Th … | Continue reading
When I initially set up my laptop, I created a 16GB swap partition on it. The large size is so that I can suspend to disk (aka: hibernate) onto it. Resuming from hibernation from this partition doesn’t entirely work. Alpine’s initfs can’t re-use the same passphrase to unlock more … | Continue reading
Since early 2022, darkman supports exposing the dark mode / light mode preference via the appropriate xdg-desktop-portal API. While this works quite well, it’s been a constant source of questions, since setting it up and actually understanding how it works is far from trivial. Th … | Continue reading
Sync status[permalink] As I mentioned before, when synchronising two storages, the sync algorithm keeps around a local “status” with some basic metadata. Future executions use this metadata to understand which side has changed and which side needs updating. I had to re-write most … | Continue reading
s6 is a collection of programs that can be used for service supervision and service management. It is composed of multiple simple tools that can be used individually or together. The s6 suite of programs can be used to supervise and manage system service, user-session service, or … | Continue reading
For the last months, I have used my lock-and-sleep script that locks the system and then puts it to sleep. As long as the system stays locked, the script will put it back to sleep after 10 seconds of idle. Locking the system before going to sleep ensures that the system never sho … | Continue reading
Current state[permalink] Vdirsyncer keeps a “status” file locally. The status file contains metadata from items on both storages the last time they were synchronised. My current implementation runs the synchronisation process, and then returns a new status, which should be saved … | Continue reading
Last year I wrote xendmail, a tool based on the proposal mentioned in my thoughts on sendmail in 2023 article. Xendmail exposes the same interface as sendmail1, it takes an email as input, reads credentials from the user’s secret store, and dispatches the email via an the appropr … | Continue reading
Given the outage at sourcehut right now1, I need an alternative bouncer to use IRC without leaving a client running 24/7. Running my own seems like a simple enough choice. I opted to run soju (mirror) on my personal server running OpenBSD. soju is what powers chat.sr.ht. It is we … | Continue reading
When some text is selected, it becomes the primary selection. Other applications can then access this primary selection. The most common usage is to paste it by middle clicking elsewhere, but that’s really the full extent of the interactions that are currently available1. There i … | Continue reading
I’ve been synchronising my calendars with the still-experimental rewrite of vdirsyncer lately. vdirsyncer --sync --daemon has been running for about three days now. The --daemon flag makes it run continuously, synchronising changes every five minutes. Eventually I want --daemon t … | Continue reading
I have made a few mentions to valarmd, a project of mine which is paused for the moment. It is a daemon used to show desktop notifications for alarms in calendar entries. This is its specification. I hope to continue working on it after completing my current work on vdirsyncer. S … | Continue reading
Designing the low level icalendar parser took longer than it should have taken. To be sincere, part of the problem was my trying to be too ambitious in its scope and growing beyond the strictly necessary requirements. Requirements[permalink] The main goal of this parser (now call … | Continue reading
I want to measure test coverage for the vparser library, and this is my first time measuring coverage with Rust. Some notes for future reference. First, run the tests with instrumentation enabled: > RUSTFLAGS="-C instrument-coverage" cargo test -p vparser Compiling vparser v0.1.0 … | Continue reading
Modern batteries degrade faster if continuously charged to 100%. Some vendors provide software implementations to avoid continuously feeding the battery when full to avoid overloading it. Usually this is tricky, since they have to invent some kind of mechanism to determine whethe … | Continue reading
In the upcoming months I will travel to visit family and friends. I intend to work remotely during some of those weeks (and will take some other weeks off too). In preparation for this, I’ve set up a new1 ThinkPad T14s Gen 2i laptop that I’ll be using to work remotely. This artic … | Continue reading
After having an initial version of the configuration parser, I’ve moved on to working on the actual command line for vdirsyncer itself. Replacing Box with Arc This section is pretty technical and requires some understanding of Rust. In my synchronisation algorithm, the type repre … | Continue reading
Settling down a configuration format for the upcoming vdirsyncer v2 has taken more than I anticipated. These is a summary of my journey, considerations and the current state. The previous format My first approach was to retain the existing configuration format. I’ll call this one … | Continue reading
pylsp wasn’t working today for some reason. It wasn’t jumping to definitions, offering any auto-completions, nor formatting code. I had to figure out why. Usually, LSPs are executed directly by the IDE with stdin/stdout piped directly into an LSP client, which means that logging … | Continue reading
I had family visiting during this past month, so I’ve taken some time off to spend with them. Progress has therefore been slower than usual. Sub-tasks missing from planning As I mentioned a few months ago, the NLnet foundation is currently funding my work rewriting on vdirsyncer. … | Continue reading
I wanted to run sway from upstream master branch to tests the yet-unreleased fractional scaling support. This recipe also works for trying to build sway with custom patches. First, I needed to clone sway itself and wlroots as a subproject. Building wlroots as a subproject is requ … | Continue reading
CardDav support This month I’ve worked on missing CardDav support in existing libraries. Regarding libdav itself, this has helped tidy up parts of the code that are shared between the CalDav and CardDav. This wasn’t very complicated; the latter is very similar to the former, so i … | Continue reading
Slightly over a year ago, I set up a new hardware-backed GPG key on my yubikey device. Today I needed to sign a release, and noticed my key expired two days ago. It’s time to renew it. Possible approaches When a key expires, there are three alternatives on how to address this: Ge … | Continue reading
I’ve been writing some IRC-related experiments using a bouncer lately. I don’t have anything useful yet. My code so far connects to a bouncer, enumerates bouncer networks, opens a second connection to the bouncer (you need an additional connection per upstream network), and then … | Continue reading
This month started out rather slow, with me taking a week off on vacation and then coming back home only to be sick in bed for another week. But it ended up being rather productive after all. Configuration parsing My initial goal since last month was to implement a small binary t … | Continue reading
The upcoming version of Firefox 116 will use Pipewire for camera access. This sparked my curiosity and I wanted to know if my setup would work for this. In recent times, Firefox has been moving rather quickly, adding dependency on these Flatpak portals (even in scenarios where Fl … | Continue reading
So far, libdav seems to be working pretty solid for interacting with CalDav server, and davcli has been handy for interactively inspecting remote collections. There are a few reported issues for the previous vdirsyncer implementation that are related URL decoding. These can proba … | Continue reading
I mentioned in the past that libdav (the library which I’ve written to interact with caldav and carddav servers) implements DNS-based discovery. This should make any tools built on this library a lot easier to configure for end users. One such tool so far is davcli, a simple comm … | Continue reading
rfc6764 describes a mechanism for caldav service providers to expose exactly where their server is located while requiring minimal input from the user. The main intent here is that if you are hosting your email and calendar for example.com, your users only need to provide their c … | Continue reading
One of my goals for re-writing vdirsyncer was to write “live tests”. These tests are series of operations against a real CalDav server, failing if the server doesn’t behave as expected (or if it doesn’t support a specific feature). I’ve had this working for a couple of weeks now, … | Continue reading
The term dotfiles refers to files with filenames starting with a dot. These are treated as “hidden” files and usually not listed by default in most tools unless an extra flag is provided, a “show hidden files” checkbox is checked or some similar mechanism. Additionally, the term … | Continue reading