Welcome to my blog!

Status update, July 2022

Hello! It’s been a very warm July in Portland and I can’t wait for it to continue. Last month I started on an article announcing a new project, Magnolia Desktop. If it grows beyond being a personal project I see it as a challenge to the GTK stronghold to bring new life to both developer and user experience. I ended that article saying that next up on my list of things to work on was icons and more, and in the midst of working on the icon demo I ran into a number of seemingly unavoidable miscompilations....

July 19, 2022

Magnolia Desktop

Hello again! I want to start doing “Status update” style articles and more writing in general so I thought I’d announce on here the main project I’ve been working on recently amongst all my other open source work. Magnolia is a new UI toolkit written entirely from scratch in Zig for Linux desktops. It has a focus on ease-of-use, performance, and supporting older devices. The only runtime system dependencies are X11 and OpenGL....

June 18, 2022

I've Switched to NixOS

The original creation date on this article is 17 Jan 2022 and I’ve been running NixOS 21.05 since then. Previously I’d been running a mix of Debian and Ubuntu and I don’t think I’ll be switching back anytime soon. Granted, I have not officially performed an update in that time, though I do not suspect it going badly in the ways that other distributions have bricked my Linux installs in the past....

June 18, 2022

Add Your PGP Key to Github for Verified Commits

This post assumes you’ve already read Generating a PGP key. I’ll be using my key for these examples but you’ll want to replace 95535225B55B5A9F39E29F5EDAB85EABB6014D3F with your own in the commands. For adding it to github run the following and copy the whole output. gpg --armor --export 95535225B55B5A9F39E29F5EDAB85EABB6014D3F That will generate a very long wall of text encapsulated by -----BEGIN PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK----- Then navigate to https://github....

March 21, 2021

Enable GPG Commit Signing in Git

This post assumes you’ve already read Generating a PGP key. I’ll be using my key for these examples but you’ll want to replace 95535225B55B5A9F39E29F5EDAB85EABB6014D3F with your own in the commands. git config --global user.signingkey 95535225B55B5A9F39E29F5EDAB85EABB6014D3F git config --global commit.gpgsign true This will automatically sign all of your commits with the key you added to user.signingkey....

March 21, 2021

Generating a PGP Key

For this we’ll be using GnuPG, aka GPG, which is a common implementation of the PGP spec. $ gpg --full-generate-key As this will be your master key, make sure to pick RSA and RSA, 4096 bits, and does not expire for the generation options. Once it is complete, it will print the details of it. Here’s what I got as an example. pub rsa4096 2021-03-21 [SC] 95535225B55B5A9F39E29F5EDAB85EABB6014D3F uid Meghan Denny <hello@nektro....

March 21, 2021

Install Vagrant on Debian

Vagrant is an application to enable you to programmatically control VM’s Hashicorp calls Vagrant Boxes. It’s hayday was before the rise of Docker and Kubernetes but still has great use cases. For instance, Docker Images have to be based on the Linux Kernel. So since Vagrant Boxes are full VM’s, they can contain a wider selection of operating systems for you to choose from. # install vagrant itself, it will use the libvirt provider by default $ sudo apt install vagrant # install the libvirt daemon and enable it sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils sudo systemctl enable libvirtd sudo systemctl start libvirtd # add yourself to the libvirt group sudo usermod -aG libvirt $USER # and you're all set!...

March 13, 2021

Self-Hosting milesmcc/shynet Analytics

First, services: analytics: image: milesmcc/shynet ports: - "8080" environment: DB_NAME: shynet_analytics DB_USER: postgres DB_PASSWORD: ${POSTGRES_PASSWORD} DB_HOST: postgres DB_PORT: "5432" ACCOUNT_EMAIL_VERIFICATION: none TIME_ZONE: America/Los_Angeles Then, docker-compose exec analytics ./manage.py registeradmin hi@my.domain.com This will print the password to the console. More users can be added by visiting https://example.com/admin/core/user/add/ or adding ACCOUNT_SIGNUPS_ENABLED: True docker-compose exec analytics ./manage.py hostname analytics.example.com docker-compose exec analytics ./manage.py whitelabel "My Shynet Analytics"...

March 11, 2021

Auto Domain Reverse Proxy and TLS with Nginx in Docker-Compose

services: nginx-proxy: image: jwilder/nginx-proxy:alpine volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - ./data/nginx/etc/certs:/etc/nginx/certs - ./data/nginx/etc/vhost.d:/etc/nginx/vhost.d - ./data/nginx/usrshare/html:/usr/share/nginx/html ports: - "80:80" - "443:443" nginx-letsencrypt: image: jrcs/letsencrypt-nginx-proxy-companion volumes_from: - nginx-proxy volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/nginx-le/acme.sh:/etc/acme.sh environment: DEFAULT_EMAIL: "${DEFAULT_EMAIL}" Local data that you would potentially want to backup in a prod environment is saved at ./data/nginx/. This configuration will automatically setup an nginx reverse proxy config for hosting a container at a specific domain and with TLS using Let’s Encrypt....

March 11, 2021

Find and Install Missing Firmware on Debian

Run $ sudo dmesg | grep 'firmware load for' | grep 'failed with error' $ sudo dmesg | grep 'firmware: failed to load' This will search your diagnostic kernel logs for failed firmware loads and will produce lines that look similar to the following [ 53.168802] bluetooth hci0: Direct firmware load for qca/rampatch_usb_00000200.bin failed with error -2 Take that file name and pass it to $ sudo apt-file search qca/rampatch_usb_00000200.bin Which in this case will yield...

March 11, 2021