// Writing · think out loud

Wordsabout the work

Engineering, design, infra, and the occasional strong opinion. Long-form, hand-written, zero SEO sludge.

RTFM # WORKS IN THEORY # PREMATURE OPTIMIZATION IS... # CACHE INVALIDATION & NAMING THINGS # JUST ONE MORE REFACTOR # NO I WON'T ADD DARK MODE # IT'S NOT A BUG, IT'S UNDOCUMENTED BEHAVIOUR # STRONG OPINIONS # HAVE YOU TRIED TURNING IT OFF AND ON AGAIN? # THIS IS FINE #
★ Latest #

Linux · KDE · 1 min read

Enabling dead key on Ghostty/KDE

Dead keys stopped working in Ghostty on KDE. A GTK input method regression, fixed with fcitx5 and three env vars.

Read it

Apr 29, 2026

// Archive · Medium

Older stuff

KDE · Arch1 min

Get KDE Plasma 6 on Arch

Two methods for upgrading to Plasma 6 via the extra-testing repository — quick or selective.

Read

Feb 29, 2024

Engineering4 min

Managing tech debt

Measure it, schedule time for it, track progress. Three steps that make debt manageable instead of demoralising.

Read

Jan 24, 2024

Arch Linux5 min

Submitting a package to the AUR — full tutorial

Full guide: GPG setup, PKGBUILD creation, git source packaging, and QA before pushing to the AUR.

Read

Nov 24, 2023

Neovim6 min

Neovim config from scratch

Telescope, Treesitter, lsp-zero, and Catppuccin — a complete from-scratch setup walkthrough.

Read

Oct 24, 2023

Arch Linux3 min

Submitting a package to the AUR

First-time experience publishing dracut-numlock to the AUR — from research to quality checks to submission.

Read

Oct 20, 2023

KDE1 min

Add a real tiling window manager in KDE

Set up Bismuth for automatic tiling and dynamic layout switching inside KDE Plasma.

Read

Oct 11, 2023

KDE1 min

Add custom touch gestures in KDE

Install touchegg and touché to define your own touchpad gestures for browser nav, desktop switching and more.

Read

Sep 21, 2023

KDE · Linux3 min

Debugging kwin forceblur — SITREP 1

Why blurredwallpaper stopped working after a KDE update — investigating the kwin script lifecycle for newly launched windows.

Read

Aug 24, 2023

React Native1 min

Adding value when you reach the start of a FlatList

Detect scroll-to-top on a horizontal FlatList and prepend data without jumping the user's position.

Read

Jul 18, 2023

React Native1 min

Adding value when you reach the end of a FlatList

Infinite scroll in React Native using onEndReached and onEndReachedThreshold.

Read

Jul 18, 2023

React Native5 min

Horizontal calendar slider in React Native with FlatList

A scrollable weekly calendar with auto-snapping, dynamic month loading, and a "today" button built on FlatList and Luxon.

Read

Jul 3, 2023

Linux2 min

Replace Nouveau by Nvidia

Switch from the open-source Nouveau driver to Nvidia's proprietary one on Arch-based systems using nvidia-inst and envycontrol.

Read

Jun 12, 2023

Electron1 min

Electron React hot reload & multi launch script

Add hot reload and a single npm command to run both Parcel and Electron concurrently.

Read

Apr 6, 2021

Electron1 min

React TypeScript & Electron — the one minute setup

Boilerplate for a desktop app with React, TypeScript and Electron using Parcel as bundler.

Read

Apr 6, 2021

NestJS1 min

NestJS & Pino — the one minute setup

Swap NestJS's default logger for Pino: pretty-printed in dev, compact in prod.

Read

Jun 11, 2020