RSSAmplifier

Blog

lgug2z

lgug2z.comRSS feed ↗76 posts

Latest posts

I Started Identifying Corporate Devices in My Software

Normalize Identifying Corporate Devices in Your Software did the numbers on HackerNews and Lobsters back in October. There were a couple of great comments from people who "got it", and it also inspired people to start creating libraries to detect MDM enrollment . henrycatalinismith lobste.rs Extremely poetic to use detection of the presence of corporate spyware as leverage for redistribution of…

komorebi Financial Breakdown for 2025

For the past two years ( 2023 , 2024 ) I have been sharing annual sponsorship breakdowns for komorebi . komorebi is published under the Komorebi License (building on the foundation laid by the PolyForm Project ), an educational source license which does not permit any kind of commercial use. In January 2025 I introduced the long-requested Individual Commercial Use License (ICUL), which will also…

Consider a Nix Flake for your windows-rs Project

I have been working hard on getting komorebi for Mac ready for the initial public release in January 2026 , and a large part of that work has focused on improving the documentation and creating a new unified docs website for both komorebi for Windows and komorebi for Mac. I am all-in on generating documentation from rustdoc, for both komorebi for Windows and komorebi for Mac. I'm so deep in…

Rescue Complex Automatic

Cover art by Zahra al Zuwayed Purchase on Bandcamp Stream on Apple Music Stream on Spotify

Is this a Core Graphics Framework Bug in macOS Tahoe?

I've been daily driving my tiling window manager for macOS on macOS Sequoia for a few months now and things have been pretty stable. I've had a few reports of issues on macOS Tahoe, but it wasn't until setting up a new machine that came with Tahoe preinstalled that I was able to reproduce and debug them myself. One of the things that a tiling window manager should do is listen for…

Version Control External Content Referenced in Your Blog

It seems like most blogs I read these days are built using a static site generator (SSG). Some of these SSGs come with shortcodes for embedding content from popular websites, others don't, but shortcodes are generally the accepted way of embedding a reference to something someone else said on the internet in one of your posts. I recently wrote about how brittle I find these shortcodes that…

Subtleties to Consider When Parsing RSS Feeds in Zola Shortcodes

I have steadily been working on migrating this website to Zola , and documenting parts of the process which I think might be valuable for others who want to do the same in the future. On the previous version of this website, I used a Hugo shortcode to display the last 3 posts from my Mastodon account on the landing page . The shortcode rendered each Mastodon post differently depending on whether…

I'm Done Writing Shortcodes for Other Websites

After finally having reached my limit with the number of breaking changes I'm faced with every time I update hugo , I decided to migrate my website over to zola . rodgerd news.ycombinator.com Yeah, I adopted Hugo and now I regret it. Every release seems to break themes, and many theme maintainers give up trying to keep current, so if you use someone else's theme you're running a…

Exposing Git Information in Rust Binaries Built With Nix

When you have software out in the wild being used by lots of people, it's inevitable that there will be pretty large spread across the versions of your software being used. If that software is aimed towards technical folks and power users, or if you publish nightly releases, in addition to the spread across official version releases, you will also have many people running on any number of…

Normalize Identifying Corporate Devices in Your Software

If you dual-license your software in such a way that it requires a paid license for commercial use, here are two code blobs for you.

Using Homebrew to Distribute Early Access Binaries from Private Github Repositories

Building for macOS has been... interesting. After falling into the trap of Microsoft's 10x price gouging for macOS runners on GitHub Actions and ultimately switching to using the Mac Mini under my television as a self-hosted runner, the next thing I wanted to do was distribute my build artifacts.

I Want a Cross-Platform Tiling Window Manager

One of the great things about building your own tools is that you get to have your desired workflow and user experience with very few compromises.

wpm

wpm is a process manager for Windows, written in the Rust programming language, published under the Komorebi License . The Komorebi License does not permit any kind of commercial use (i.e. using wpm at work). A dedicated Individual Commercial Use License is available for those who want to use wpm at work. The Individual Commercial Use License adds "Commercial Use" as a "Permitted Use" for the…

On Evils in Software Licensing

The JSON License famously includes a provision stating that "The Software shall be used for Good, not Evil". This article explores why such provisions are not useful or meaningful in the greater software licensing conversation.

On Open Source Mythology

There are two points of popular open source mythology this post will share my experience with: People won't use your project if you don't use an Open Source Initiative-approved license People won't contribute to to your project if you don't use an Open Source Initiative-approved license

Educational Source Software

A program is educational source (edu source) software if: The source code is available to individuals for personal use, modification, learning and reference

So You Want to Discuss Open Source Software Licensing With Me

You're likely here because you've discovered that I generally refuse to use open source licenses for my popular software projects, and you want to engage me in a discussion. Here is a list of things I consider before accepting an invitation from someone to engage in a discussion about why I do not use open source software licenses.

My First Month Selling Commercial Use Software Licenses

I made $901.49 in my first month selling commercial use software licenses. This $901.49 came from 14 customers, 6 of whom purchased monthly license subscriptions and 8 of whom purchased annual license subscriptions.

In the Age of AI Crawlers, I Have Chosen to Paywall

People who make useful content and services intended for interactive human use available for free have written at length about the ongoing issues with AI crawlers scouring the web in an insatiable search for new training data. Some people are coming up with interesting technical solutions to the problems posed by AI crawlers, but I have ultimately opted for a much simpler solution: a paywall.…

GitHub Sponsorship Breakdown for 2024

In 2024 I received $1861.88 in sponsorships via GitHub Sponsors for my work on komorebi , the tiling window manager for Windows, which has continued to grow beyond my wildest dreams; it currently has 10k stars on GitHub , 106k downloads and almost 2000 members in the community Discord . Below is the monthly breakdown of the sponsorship payouts received in 2024: Month Payout January $92.35 February…

Komorebi

komorebi for Windows and komorebi for Mac are tiling window managers written in the Rust programming language, published under the Komorebi License . The Komorebi License does not permit any kind of commercial use (i.e. using komorebi at work). A dedicated Individual Commercial Use License is available for those who want to use either komorebi for Windows or komorebi for Mac at work. Separate…

My First LLM Programming Experience

The big mistake Using Tailwind CSS for Notado is the single biggest mistake I have ever made in my career as a developer. I cannot overstate the amount of technical debt that this has introduced, and how it has compounded over the years since this decision was taken. Never use this for a one-man SaaS project. One of the biggest consequences of this mistake was that introducing dark mode…

Best of Hacker News Comments

Earlier this week I saw an Ask HN post titled "What are some iconic comments on HN?" I have been saving comments from Hacker News on a variety of subjects and topics since 2020 when I finally ditched traditional URL-focused bookmarking services and created Notado to be able to save, archive and organize comments on discussion websites quickly and easily. Returning readers will already know that I…

GitHub Sponsorship Breakdown for 2023

Certainly, no contributors get into projects with the sole purpose to get a financial gain out of them. Open source has never been about money either. But for you as an author, the lack of funds to sustain your ideas and pay for even a small portion of the time you're spending on them is—I'm not going to lie—devastating. It may not be your concern at first but it will inevitably become…

Selectively Using Service Modules from NixOS Unstable

A few weeks ago I ran nix flake update to get the latest versions of CLI tools that I regularly use from nixos-unstable . atuin is one of those tools which I started using relatively recently and quickly became a huge fan of. I run it on all of my machines, and I can't overstate how amazing it is to have all of my shell history across all of my machines synced. I also self-host the atuin…

Building and Privately Caching x86 and aarch64 NixOS Systems with Github Actions

In the previous article we walked through how to set up our very own Nix binary cache . It's great being able to run attic push system /run/current-system on whichever machine we are currently using, but the the chances are that if you use Nix to manage your system configurations, you have a system configuration monorepo, and depending on how many machines and architectures you are…

Deploying a Cloudflare R2-Backed Nix Binary Cache (Attic!) on Fly.io

I have tried running the Attic Nix Binary Cache on my Hetzner dedicated server in Germany a few times in the past, but the peering issues and the latency to Xfinity in Seattle have always made me throw my hands up in frustration. This morning I noticed a comment by Zhaofeng on the repo issue tracker. As a NixOS aficionado myself, I begrudgingly admit that I've been running my instance on…

Cloudflare and NixOS Tips When Deploying a Personal Mastodon Server

For the most part I feel very much at home on the Hachyderm Mastodon server; it's probably the best social media experience that I can remember having and I have had the pleasure of interacting with so many cool and impassioned people there. Hachyderm implements the default 500 character post limit which is hard-coded into the Mastodon codebase and as of writing these, seems unlikely to ever…

Unemployment in the USA as a Recent Immigrant

The Layoff Along with 25% of my former colleagues, I was laid off by Beamery (glassdoor reviews) immediately before "American Thanksgiving". I was provided with a number of informational pamphlets at the end of a 5-minute layoff call at 9am which was scheduled with less than 15 minutes of notice. The following Wednesday, I was at the neighborhood social dance, trying to take my mind off the stress…

Circumventing Network Bans with WireGuard

Before this week, it had been a long time since I visited the Plex subreddit . I shared my last article there, which was a technical write-up of moving my Plex instance from a Hetzner auction server to a virtual machine running on hardware in my home network, and the considerations that influenced the migration. It didn't take long for me to realize that a culture of hostility towards even…

Rethinking Plex Hosting After the Hetzner Ban

Last October, Plex started blocking access to instances running on servers hosted by Hetzner . I have a Hetzner Auction server that I renew every year or so to make use of newer hardware, which I use to run various workloads, from web services , to scheduled jobs and self-hosted instances of privacy-friendly alternative web frontends like Nitter . Another one of those workloads, until recently,…

Set your NIX_PATH to your System Flake's Nixpkgs for a More Predictable Nix-Shell

I came across an interesting thread on the NixOS subreddit today that helped me fix a problem that I didn't even know I had with my NixOS system configuration. Every now and then, I'll try to quickly do nix-shell -p somepackage , and it will fail, because somepackage couldn't be found. I go and check https://search.nixos.org and it's there. Huh. Weird. So I just go…

Managing Dotfiles on Windows 11 With NixOS

I have a confession to make. Until yesterday, I did not have any form of dotfiles management or versioning for my Windows 11 machine. Yes, I, the person who wrote an entire tiling window manager for Windows from scratch in Rust , did not manage my dots. I had to sheepishly admit this on more than one occasion in the project Discord server when people would watch my live programming videos and then…

Handling Secrets in NixOS: An Overview

There are a number of different approaches available for NixOS users to handle secrets. The most popular tend to be git-crypt , agenix and sops-nix . But which one should you use? To hopefully help you in answering this question for yourself, here is an overview of a few common use cases and what I think is most appropriate for each. Managing Your Own Physical Machines Maybe you have a desktop, a…

Providing Runtime Secrets to NixOS Services

In my last post , I shared how to get a working instance of Nitter deployed on NixOS, but requested advice on how to best automatically provision the guest_accounts.json runtime secret file on the target server. A number of folks reached out to me on Mastodon (thanks @vt52@ioc.exchange , @aynish@merveilles.town , @linus@schreibt.jetzt and @uep@octodon.social !) to suggest that I use agenix to copy…

A Working Instance of Nitter on NixOS

With all of the various user and developer-hostile changes introduced to Twitter over the past year, the importance of a user-friendly alternative frontend for Twitter is greater than ever. After using public instances of Nitter for a while, I wanted to try hosting my own instance. I thought it would be as simple as enabling a service in my NixOS configuration: { services . nitter . enable = true…

Using Rust, Chrome and NixOS to Take Headless Screenshots for Social Sharing

The social media landscape from Twitter and Mastodon to Instagram and TikTok has, for better or worse, centralized on sharing text highlights and quotes as images rather than as plain text. Now I can share my highlights easily as images on social media! I like to share my highlights from across the web, which is why I publish topic-specific RSS feeds for people to subscribe to. However, one of the…

Documenting War Crimes in Gaza

As I write this, the genocide in Gaza being perpetrated against the Palestinian people continues unabated, with the explicit support of many western governments and politicians across the political spectrum. Facilitation of war crimes is generally recognized as a war crime in International Humanitarian Law, the Rome Statue of the International Criminal Court and Customary International…

Yubikey Passthrough on WSL2 With Full FIDO2 Support

I recently starting using Yubikeys both to store passkeys which allow me to do passwordless logins to websites like GitHub, and to SSH into remote servers with FIDO2. I have a number of machines at home, but I spend the majority of my time using a Windows 11 desktop computer running NixOS on WSL2 (in the past I've described Windows 11 + my tiling window manager komorebi as the "desktop…

Sensible $WORDCHARS for Most Developers

Have you ever hit alt + backspace while in a zsh session, intending to delete just the last part of a path, or a word, or an identifier, but ended up deleting far more than that? This is probably because you are using the default value for $WORDCHARS . The default value for $WORDCHARS is *?_-.[]~=&#x2F;&;!#$%^(){}<> i.e. pretty much everything and the kitchen sink. Usually, therefore, you will…

Hands-Free Tiling Window Management

Last year I read the excellent article "Hands-Free Coding" by Josh Comeau which went into detail about modifying his programming workflow to use dictation and eye-tracking after developing Cubital Tunnel Syndrome. I highly recommend reading the whole article and watching the demonstration videos of his approach. This article was my first exposure to the dictation software Talon , which is…

Dynamic vs. Static Config for My Tiling Window Manager

For the last few years I have been writing and maintaining a tiling window manager for Windows that has steadily grown in usage and popularity. My first exposure to tiling window managers was on macOS with kwm (which was succeeded by chunkwm and later yabai ). Naturally, this meant that whenever I used Linux, I would reach for bspwm . I am a big proponent of what I call the "bspwm architecture"…

Ditching Docker for Local Development

Earlier this month I mentioned on Mastodon that I was replacing a Docker-based local development environment at my day job with a Nix-based one, orchestrated with overmind and a justfile . There was quite a lot of interest in particular in how overmind and just could be used to replace a container &#x2F; compose-based local development. While I can&#x27;t share the details of the significantly…

Notado 07&#x2F;2023 Update: API Price Gouging, New Services, Archiving

The last few months have seen a flurry of changes on major social media websites like Twitter and Reddit with regards to API access. This has also resulted in a number of new competitors seeing rapid growth and becoming new hubs for online discussion. Let&#x27;s start with the first point: you will always be able to save Reddit comments and Tweets to Notado by highlighting and saving a text…

Black Hole

Earlier this evening I finally had the opportunity to watch Spiderman: Across the Spiderverse, which I enjoyed a lot. I have been reflecting on how my experience of films like these (films with teenage protagonists) has changed with age. Even in my mid-to-late 20s, I would often identify clearly with the teenage protagonists, but over the last few years I have increasingly started identifying with…

The Bookmarking Data Model Is Wrong For Highlighting

The data model for bookmarking and highlighting services past and present can generally be distilled down to the following: * URL * Title * Scraped Content * User Highlight * User Annotation * ... Other Metadata The bookmark itself is tied to a URL, and anything else related to the bookmark, such as the title, the scraped content (if the service scrapes on your behalf), highlights and annotations…

The Banal Stupidity of Automated Chrome Store Reviews

For the past three years I have maintained a browser extension that I publish to both the Firefox and Chrome web stores. I recently received an automated email from the Chrome web store overlords who had decided I was violating the "Use of permissions" policy by requesting the cookies permission "without using it". Here is a snippet from the manifest.json for my extension: { " permissions ": [ "…

Embedding RSS Feeds on My Static Website

I have wanted to redesign my website for a while now. In fact, I have wanted to redesign my website ever since I saw Nathan Wentworth &#x27;s website. If you haven&#x27;t seen it before, check it out. To this day it remains my favourite personal website on the internet. My favourite feature on his website has to be the regularly updating feeds; music from https:&#x2F;&#x2F;last.fm, recent posts…

Overcoming Mental Barriers to Fitness and Aesthetics

In my mid-twenties my body was in pretty rough shape. I was suffering from chronic pain and had terrible mobility to the pain where my quality of life and mental state were being severely adversely impacted. I was also terrified at the idea of entering a gym. I worked with an excellent chiropractor in Birmingham (UK) who helped to provide significant pain relief and subsequently referred me on to…

Resurrecting My Old Website With Ancient NixOS Packages

The past few weeks I have been putting off updating my personal website , which has sat untouched since October 2019. I&#x27;ve done quite a lot of interesting work since 2019, so finally this past weekend, I forced myself to sit down, clone the repository, and update it. My personal website is nothing fancy; just a static website built with Hugo and a community theme, and hosted on S3. This…