The OpenMW team reacted positively to my Apple Silicon build work and has asked for help in merging my changes upstream, as well as setting up build pipelines for Apple Silicon and the BSDs.

These tasks are very much in my wheelhouse, and I am very excited to contribute to such an awesome project. This FOSS work will help many more people play one of the greatest Western RPGs of all time. I will be documenting this work in future blog posts.

OpenMW running natively on my Apple Silicon laptop

I recently managed to compile OpenMW for Apple Silicon. These are brief notes on how to do it. This is still less stable than the x86–64 version.

Instructions are adapted from this OpenMW wiki page:

  1. Make sure you have Xcode and brew installed
  2. Install the following packages. All of these are native for Apple Silicon:
brew install cmake
brew install pkg-config
brew install qt@5
brew install lz4

3. Clone my fork of the OpenMW dependency repository (I’ve only added one commit in case you’re interested in cherry picking it):

git clone
cd openmw-deps-mac
git fetch
git checkout adjust-for-apple-silicon
cd src
mkdir build
cmake ..

InfluxDB logo

I noticed that the InfluxDB Helm chart did not have a variable allowing me to set ingressClassName, an important variable on Kubernetes 1.8 clusters that was simply an annotation in previous Kubernetes versions. For instance, I can set this variable to something like “nginx” to get nginx as my ingress.

I submitted a PR that was quickly merged that will provide that feature, and it seems to be working fine.

I really don’t like spreadsheets, even the ones provided by the excellent org-mode which I use for other purposes.

For one, they are too obsessed with location and order. I would like to re-order items within my household budget at any moment due to pure whimsy and not have things break. There is probably a way to do this with spreadsheets, but there is certainly an easier way with code.

Which brings me to another point: as a programmer, I’m more comfortable with code than spreadsheets. I not only get to see how my household budget has changed over the…

An image of Gorm from the GNUstep website

Gorm, an Objective-C IDE for Linux, was not respecting my editor preference (obviously GNU Emacs). I noticed the code was conflating finding the external tool with finding the file to be edited, so submitted a pull request to the GNUstep project.

My emacs instance running Sunrise Commander along with the exwm window manager (

I noticed Sunrise Commander, the subject of a previous blog post of mine, was not working on the latest Emacs git pull from master due to a change in the other-window lisp function breaking a defadvice. I submitted a simple pull request to remedy this.

Setting up Emacs as a modern Objective-C editor


Your .emacs.d/ only requires a few software packages and custom Lisp functions to function as a modern Objective-C editor. These instructions are primarily aimed at people developing on GNUstep but could probably be adapted easily for an Apple macOS environment.

First and foremost, emacs-ccls provides IDE features such as code completion, code outlining, and integration into your text completion framework of choice such as company, ivy, or helm.

This technology is powered by the Language Server Protocol which provides these IDE features to text editors through a separate server process.

The setup…

Source: is the Cocoa version of Emacs. It is most often used on macOS, but is also used on the libre Cocoa implementation of GNUstep.

When I first tried to compile on NEXTSPACE, I ran into a number of issues. The fix involved patching the OS (CentOS 7) and patching Emacs. My Emacs patch was just committed to master so I’ll explain how to compile from the latest master branch against the latest NEXTSPACE.

First off, this article assumes that you have successfully compiled and installed the latest version of NEXTSPACE locally, and can compile regular Emacs successfully from…

Deliciously retro

I discovered an incredible project called NEXTSPACE which is building a complete desktop environment (and perhaps eventually a Linux distribution) using GNUstep, which is a FOSS implementation of Cocoa.

Starting as a starving college student, I spent around a decade programming in Objective-C and Cocoa for iOS. While I’m less interested in Apple’s closed source platforms these days, I really enjoyed developing in Objective-C and Cocoa, and I am glad that I can use that skillset to build rich GUI applications for Linux.

But real talk: I mainly just love retrocomputing. I love how retro NEXTSPACE looks and functions. Usually…

“Finally, a command line shell for the 90s”

The two primary things that I need to know when I engineer modern DevOps pipelines for companies are my:

  • AWS profile
  • Kubernetes context

These two determine which environments and clusters will be affected by my terraform, kubectl, and helm commands.

I use the fish shell which offers a fresh approach to the command line with powerful autosuggestions. I installed an Oh My Fish plugin which allows me to change AWS profiles very easily:

I then customize my prompt by modifying the .config/fish/functions/ file to look like this:

function fish_prompt
set awsenv (aws profile)
set kubenv (kubectl config current-context)
set wpath (pwd)
echo "[$awsenv][$kubenv][$wpath]> "

This gives me a prompt that looks like:


Ahmed Khanzada

I love Lisp, *nix, and kittens (

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store