RSSAmplifier

Blog

blog.fidelramos.net

blog.fidelramos.netRSS feed ↗31 posts

Latest posts

Custom git trailers with Magit

Git trailers are just lines of text at the bottom of a commit that take note of some metadata. Common ones are Co-Authored-By , Reported-By , Reviewed-By or Signed-Off-By , all of them autodescriptive I think. Magit has a way of adding trailers, just press C-c TAB or C-c C-i in commit view …

Supply-chain hygiene for Emacs: LLM review of package upgrades

Emacs has no sandbox. Every package you install runs arbitrary Lisp with your full privileges: your files, your credentials, your network. This makes me really scared of installing new packages, or upgrading existing ones. The packages most of us use are not vetted artifacts: MELPA builds from some repository (usually …

2026 Resolutions Review

We’ve reached the halfway point of 2026, and it’s a good time to review my progress on my 2026 New Year’s resolutions . Spend less time on tasks ❌ Fail. And not because the plan was bad, but because I honestly haven’t followed it (though maybe that’s why it was bad?). Of all the ideas, the only one I usually stick to is writing down the day’s tasks on a post-it note. Sometimes it works and…

Vibe Coding Escapades: Venice.ai KDE widget

The Problem I’ve been using Venice.ai ( referral link if you want to sign up ) for quite some time now for all my artificial intelligence needs. I love it because, unlike most AI platforms, it’s private : When you use Venice’s own models (open-source models running on their …

Self-hosted Tailscale, Part 4: Tailscale-Only Web Services

I've been running a home server with a bunch of self-hosted services (Immich, Jellyfin, Nextcloud...) behind a single Caddy instance using caddy-docker-proxy (documented in this post ). Some of them have genuine public uses, e.g. sharing a folder in Nextcloud or an album in Immich, or connecting to Jellyfin through …

Vibe Coding Escapades: pelican-copy-code plugin

The Problem I realized that this blog uses a lot of code blocks, but it’s not easy to copy them because there’s no Copy button on each block. I looked for a plugin for Pelican that would do this, convinced that there must be one already out there …

Vibe Coding Escapades

I'm going to start a new series of articles on how I'm using AI to develop software or solve technical problems. The articles will follow this structure: Problem Execution Results Lessons and findings In this article, I don't want to delve into ethical, environmental, or political-economic considerations regarding AI, but …

Self-hosted Tailscale, Part 3: Syncthing over Tailscale

I've been using Syncthing for years to keep files in sync between my laptop, desktop, phone, tablet and home server. It is an amazing piece of software and has been very reliable, with only the occasional conflict, but I have never lost any data. On the contrary, Syncthing file versioning …

How I Sandbox my AI Agents

I've been using Opencode as my AI coding agent. Very unlike me, I don't have a long list of reasons why I picked it among the many alternatives. I just wanted to get started with an agent system that checked my main requirements: Must be fully open-source. Popular, meaning it's …

Self-hosted Tailscale, Part 2: Ad-blocking DNS

In Part 1 I set up Headscale and had every tailnet client use Cloudflare DNS. That works, but it's leaving value on the table: every device that connects to my Tailscale gets whatever DNS servers I set, so I might as well run my own DNS server inside the private …

Self-hosted Tailscale, Part 1: Headscale and clients

I had been hearing a lot of people raving about Tailscale as a solution for interconnecting devices, or in other words for creating your own mesh VPN. It does seem great on paper: easy to set up, fast and lightweight, based on an open protocol ( WireGuard ), works everywhere, solves the …

Pre-establishing SSH master connections for Ansible, or using OnlyKey with Ansible without losing your mind

I use an OnlyKey as a hardware security device for a variety of purposes: Common passwords are one keypress away, they get typed automatically. As 2FA in my password manager (KeepassXC), by applying HMAC on the password. SSH connections. GPG encryption and signing. OnlyKey SSH connections are handled through the …

Announcing Reflex, a Pelican theme

I'm happy to announce the public availability of my Pelican theme: Reflex . It is published on PyPI , which should be the best way for most users to install it. When I first started this blog I decided on Pelican because I had lots of experience with Python, so it would …

Self-hosted Home, Part 1: Design and Planning

Those who have been paying attention to the blog know that I bought a house and have been planning its full renovation. As a computer nerd what excites me the most is the opportunity to implement my dream smart home, networking and home server . I have a clear idea of …

New Year's Resolutions for 2026

Another year has passed, and what I originally didn't plan to turn into a tradition has become one I never miss: publishing my resolutions for the new year. I always fail at some of my resolutions, but I like the effort of reflection and keeping them in mind throughout the …

Periodic script to back up installed OS packages

A while ago I switched to yadm for managing my dotfiles. One of its features I have been enjoying is its bootstrap support . I have been adding idempotent setup operations My latest addition is a script that creates backup files with all installed OS packages. In case of disaster if …

Responsible education in computing

My oldest daughter is turning 7 soon, and I have promised her a gift: her first computer. I'm secretly hoping that she will develop an interest in computing similar to my own. Not because I want to reproduce my childhood in her (although, of course, I would like to share …

2025 Resolutions Review

We are about (okay come on, already past) halfway through the year, so it's a good time to assess progress on my resolutions for 2025 .

Now with self-hosted comments

A few days ago I received an email from a reader and fellow blogger , to let me know that he was following my blog and also gave me a shout out about my New Year's resolution to write at least one article every month of 2025 , and that I was …

New Year's Resolutions for 2025

A year ago I posted my resolutions for 2024 . I did it with no intention of making it an annual tradition, it was more to get it off my chest. However some friends recently made me reflect on the resolutions I have kept and those I haven't (that social pressure …

New Year's Resolutions for 2024

I have been reflecting on life for several months, perhaps I am going through my particular midlife crisis. This year 2024 I want to do my part to correct what is in my power (and worry less about what is not in my power), hence this list of New Year's …

My homelab setup

Welcome to my homelab! If you don't know what a homelab is, it refers to running servers from your home. What is a server? It's basically a computer that is always on, connected to the network, often with no display or input. For a longer explanation take a look at …

Migrating to fish shell

I'm a heavy shell user. As a programmer I enjoy the power and flexibility of the shell, so I always keep multiple terminals open (just one keystroke away thanks to Yakuake ). I have been using Bash for as long as I have been a GNU/Linux user, that's 24 years …

Replacing Nginx with Caddy in Docker Compose

The main server in my homelab runs a bunch of services, but the heart of it is a Docker Compose configuration, several of them exposed to the Internet via a reverse proxy webserver. Before I was using three Docker images to run Nginx, proxy traffic to other services and have …

Automating Python code quality

In this article I explain what I mean by code quality and how it benefits developers. In the first half I discuss general concepts and workflows that apply to most software projects. Even if you are not writing Python code you might learn something from it. In the second half …

Public record: my BTC bet with tripu

On the back of the bet on the future relative prices of Bitcoin and US dollars that Balaji and Medlock settled publicly on 2023-05-02 ( confirmation by Balaji ; confirmation by Medlock ), today tripu and I agree on the following terms of a bet: The object of the bet is whether Bitcoin …

Privacy-respecting self-hosted Web Analytics

It all started with a desire: I wanted some basic analytics for this blog to know how it's doing, which articles are popular and which are the main referrers. But therein lied the conundrum: I am a privacy zealot, very much against extensive online tracking (just look at the browser …

My free-software photography workflow

In this article I present a step-by-step walkthrough of my photography workflow. I won't go through all the details of every piece of software I mention, they have their own manuals and documentation for that, I will highlight the operations I do. My main goals are: Full ownership of all …

Web browser add-ons I use

This article lists the web browser extensions I use and why. I will keep it updated from time to time. Currently I use Brave as my main web browser, and is the one I recommend to everyone. It offers a great experience by default, with features such as a built-in …

Nextcloud CardDAV and CalDAV discovery with DNS records

I use a self-hosted Nextcloud instance to hold a lot of my personal data, and that includes my contacts and calendars. Recently I had to reinstall DAVx5 on my phone, and I was surprised that the Nextcloud account was failing to be added. The DAVx5 error logs showed that it …

Unlocking a LUKS-encrypted partition on boot with an USB drive

The use case I wanted to solve was this: I have a headless server with a LUKS software-encrypted hard drive, and I want to be able to reboot it without having to input the password on a keyboard. The solution I implemented is to create a LUKS keyfile on a …