Intro If you, like me - willingly or not - are an Android user in search of a file backup solution, this post might be for you. I'll walk you through how I use Termux and BorgBackup (and a few other tools) to set up a bespoke phone backup workflow. tl;dr: my Termux+Borg configuration is available in this repository . It includes instructions to bootstrap a Termux environment from scratch,…
Intro Last year I went through a self-hosting spree during which I deployed some services (e.g. Nextcloud, Mattermost, and Prosody) to a bunch of VPSes, while documenting the process on this blog. This post is a follow-up on that series, detailing the deployment of GoToSocial , a lightweight ActivityPub ( Fediverse ) server written in Go. We'll be using Guix and the powerful guix deploy command to…
Intro As you may know , I'm a passionate mechanical keyboard user. I've spent the past year or so experimenting with a new 32-key keyboard layout and I've got to the point now where I'm pretty happy with it. I've decided to give it a name, Arrow, and make its repository publicly available. What is it Arrow is a minimalist, ergonomic, and mnemonic keyboard layout. Minimalist: it primarily targets…
Intro In this post we'll see how to install and configure Prosody , an open-source XMPP server. We will be deploying Prosody on a Hetzner cloud instance, provisioned and configured with Guix and the powerful guix deploy command. XMPP and Prosody XMPP is an open, extensible instant messaging protocol, originally introduced in 1999 and later formalised via a series of Internet Standard RFCs ( RFC…
Intro In a recent post I've talked about Nextcloud, a Free and Open Source file-hosting solution. Today I'll describe how to self-host Mattermost , an Open Source instant messaging system, similar to commercial services such as Slack and Microsoft Teams. I'll be hosting Mattermost on a DigitalOcean server, although things shouldn't be much different with other cloud providers or if you want to use…
Intro Today I had to setup a Nextcloud instance on a cloud server. A completely scripted approach (e.g. via Ansible or OpenTofu) felt a bit over-engineered in my particular case, so I went for a semi-manual installation. By semi-manual I mean that I scripted parts of the process but not the entirety of it, back-to-back. What I did, though, was to document things in a human readable format and as…
Intro This is a painful post to write. It's about a choice one should never have to make, the choice between software freedom and security. In this post I explain how to use Guix with software coming from third-party repositories, including repositories shipping proprietary software. I also explain why and under what (very limited) circumstances you may want to consider installing proprietary…
Intro These are the steps I followed to add GnuPG's Web Key Directory (WKD) to my website. The WKD mechanism, specified in this Active Internet-Draft , makes it possible "to locate OpenPGP keys by mail address using a Web service and the HTTPS protocol". How to use it For a long time OpenPGP key servers were the main option in order to retrieve someone's OpenPGP key knowing their email, key ID, or…
Intro In a previous post I mentioned the way I use Emacs Org code blocks and the so-called Noweb syntax as a templating mechanism. The idea is to have a template version of a document containing a certain number of placeholders and a separate file to store the placeholders' values. The template and the data file are then fed into a build process that recombines things and produces the final…
Intro In the first part of this post, last month, I described my attempt at using my Guix home server as a virtualisation environment. With a clever use of the Guile programming language (haha, really, by copying other people's code from the internet!) I was able to set up a small number of services, each one in its dedicated virtual machine for security-through-compartmentalisation. While things…
Intro I've recently completed a major refactoring of my home server setup. As originally configured, my home server acted as: A WireGuard entry point for my road-warrior-style home VPN. A makeshift virtualisation environment to host a small number of virtual machines, including a media server. A BorgBackup server. Everything was running fine™. In particular, I could connect to the media server…
Intro Now and then I find myself having to open a file or an application that I don't fully trust. A common technique to deal with this is to create a disposable environment (for example a so-called container or a virtual machine) where the file or application can be safely opened. Once used, the environment can be discarded. This technique is known as compartmentalisation and is so established in…
Intro Figure 1: Astronaut Edward H. White II floats in the zero gravity, connected to the Gemini IV spacecraft via WireGuard. Wait, what? Image: NASA . tl;dr: If you use WireGuard, make sure NTP (or a similar time synchronisation mechanism) is set up on all VPN endpoints as the WireGuard protocol is sensitive to time-sync issues. Also, if you connect to a WireGuard server in an IPv6 network, make…
Intro I've been recently revising my data backup strategy. This is a brief summary of my considerations and the solution finally adopted. Objective and scope The objective is to identify a safe backup strategy for some of my personal and work related data. My focus is on two primary aspects of data safety, confidentiality (i.e. protection from unauthorised access) and recoverability (i.e.…
Intro This post is about using Guix for the provisioning and management of cloud machines and services. Beyond the official documentation , there are various great tutorials around this topic already, like this one , this one , or this other one . I'm writing this up primarily as a note-to-self, and in case my specific approach can be of interest to anyone else. In summary, we'll be looking at how…
Intro This is the outline of a short session on Guix that I had the chance to organise at the 37th Chaos Communication Congress , or 37c3, in December 2023. It's not worth much, but I thought it was useful to have it here in case I want to reuse it or refer to it in the future. What's Guix? A functional, transactional, declarative package manager and operating system. We'll see what this means in…
Intro At some point in 2021 my quest for minimalism brought me to buy a lovely small mechanical keyboard called Keyboardio Atreus , based on Phil Hagelberg's original design . The keyboard's keywords are, in random order, 44-key, ergonomic, vertically staggered (a.k.a. columnar), unibody, open-source, programmable, wired. Figure 1: A Keyboardio Atreus with blank caps. Image: Keyboardio . My…