Ubuntu 23.10

I upgraded to Ubuntu 23.10 on my laptop last night. It took less than 20 minutes, and so far everything has just worked.

This is the kind of user experience I want on all my devices, and also the kind of experience I strive to deliver to others.

How Other People Work

After over 3 years of mostly remote working I very interested in seeing how other people set their home offices up for maximum productivity. I’ve made a lot of changes since the start of 2020, and I suspect many other people have as well. I had intentions a while ago to make a long list of people who have inspired me with their setups, but have only just got around to posting that list (which I will likely add to later).

Hopefully looking at these again will inspire me to consider if there are any changes I need to make to how I work.

My NixOS Experiments

I have been experimenting with NixOS for a few weeks, and whilst I’m not ready to run it on my main machine, I think I could if I had to. These notes are all the things I had to search, or experiment with, and are largely here for my reference, although if they help someone else then that is great.

Snippets from my configuration.nix file

# Enable the GNOME Desktop Environment.
services.xserver.displayManager.gdm.enable = true;
# services.xserver.desktopManager.gnome.enable = true;

# Enable i3
services.xserver.windowManager.i3.enable = true;

# Configure keymap in X11
services.xserver = {
  layout = "gb";
  xkbVariant = "";
};

# Configure console keymap
console.keyMap = "uk";

# Enable sound with pipewire.
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
  enable = true;
  alsa.enable = true;
  alsa.support32Bit = true;
  pulse.enable = true;
  # If you want to use JACK applications, uncomment this
  #jack.enable = true;

  # use the example session manager (no others are packaged yet so this is enabled by default,
  # no need to redefine it in your config for now)
  #media-session.enable = true;
};

# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
};

# Allow unfree packages
nixpkgs.config.allowUnfree = true;

# Allow QMK to write to keyboards

hardware.keyboard.qmk.enable = true;

# needed for store VS Code auth token 
services.gnome.gnome-keyring.enable = true;

# List packages installed in system profile. 
environment.systemPackages = with pkgs; [
git
featherpad
pandoc
dropbox
dmenu
feh
i3lock
kitty
i3blocks
arandr 
scrot 
xautolock 
barrier
imagemagick
neofetch
zathura
pcmanfm
htop
blueman
cowsay
fortune
shellcheck
abiword
rhythmbox
brasero
sound-juicer
transmission
byobu
tmux
screen
qmk
networkmanagerapplet
protonvpn-gui
protonvpn-cli
protonmail-bridge
unixbench
zerotierone
zoom-us
caffeine-ng
copyq
vscode
];

A script to automate changes

#!/bin/sh
# Standard error mitigation
set -euo pipefail
# Replace existing config
cd /etc/nixos/
sudo mv configuration.nix configuration.nix.old
# download new config
sudo wget https://raw.githubusercontent.com/teknostatik/nixos/master/configuration.nix
# Test
sudo nixos-rebuild test
# Deploy
sudo nixos-rebuild switch --upgrade
# Clean up and then go home
nix-collect-garbage -d
cd $HOME 

Cantor Build Guide

The Cantor is a 42-key split mechanical keyboard with an aggressive stagger. I have built a few of these, both for my own use and to sell.

Parts list

This is what we need to build a Cantor:

  • PCB – I order these from JLCPCB
  • Two STM32F401CC blackpill microcontrollers and sockets – can be picked up really cheaply from Aliexpress
  • 42 choc v1 switches
  • 42 choc-compatible 1U keycaps
  • 2 TRRS jacks (PJ-320A)
  • TRRS cable
  • USB-C cable
  • 10-12 rubber feet

All the example code in this guide will be assuming that the Vial firmware will be used. It requires having a working installation of the vial-qmk github repository.

Flashing Controllers

Flash each controller to test they work, and to define which controller belongs to which side of the keyboard.

Firstly test that your firmware compiles:

qmk compile -kb cantor -km vial

Then flash each controller in turn:

qmk flash -kb cantor -km vial --bootloader dfu-util-split-left
qmk flash -kb cantor -km vial --bootloader dfu-util-split-right

If you get the message Waiting for USB serial port - reset your controller now (Ctrl+C to cancel) you will need to bridge BOOT0 to VCC (via BOOT0 button or jumper), short RESET to GND (via RESET button or jumper), and then let go of the BOOT0 bridge.

Once you have done this then label the controllers so you are absolutely sure which is which.

If QMK encounters errors it will let you know. Fix any errors before proceeding to the next step.

PCB

These steps will get us a PCB that we can test:

  1. Solder the sockets to the PCB
  2. Solder the TRRS jacks to the PCB
  3. Socket the controllers (for this build both controllers will be face down)
  4. Connect the two halves with the TRRS cable

Testing

Plug the keyboard into a computer, and short every single socket to test that the right key codes are sent. I use QMK Configurator to test this.

If anything is awry, fix it before soldering switches.

Soldering switches

Press each switch into the PCB, and ensure they are straight. Then solder each one in turn.

Once the switches are soldered, repeat the same tests as before. If any switches do not work, or behave oddly (repeated keys, excessive chatter etc.) then resolder them.

Final touches

Apply 5-6 rubber feet to the bottom of each half of the PCB, and then add keycaps.

Ferris Sweep Build Guide

The Ferris Sweep is a 34-key split board with an aggressive stagger. I have built a few of these, both for my own use and to sell.

Parts list

This is what we need to build a Ferris Sweep:

  • Sweep High PCB. I get mine printed by JLCPCB.
  • Two controllers and sockets. I have built these with a number of different controllers, but mostly the Pro-Micro to keep the cost down.
  • 34 switches (Choc v1 or v2, or MX). For this minimal build a low-profile switch makes a lot more sense, but you will end up paying more for switches and keycaps. Choc v2 with blank keycaps may work out the most economical in the end.
  • 34 1U keycaps to match switches chosen. Blank keycaps will bring the cost down if they are an option for you.
  • 2 TRRS jacks (PJ-320A)
  • TRRS cable
  • Cable to match controllers chosen (almost certainly a USB-C cable)
  • 10-12 rubber feet (these are definitely not optional on this build)

All the example code in this guide will be assuming that the Vial firmware will be used. It requires having a working installation of the vial-qmk github repository.

Flashing Controllers

Flash each controller to test they work, and to define which controller belongs to which side of the keyboard.

Firstly test that your firmware compiles:

qmk compile -kb ferris/sweep -km vial

Then flash each controller in turn:

Pro-Micro

qmk flash -kb ferris/sweep -km vial --bootloader avrdude-split-left
qmk flash -kb ferris/sweep -km vial --bootloader avrdude-split-right

If you get the message Waiting for USB serial port - reset your controller now (Ctrl+C to cancel) you will need to Short RST to GND quickly in order to flash the controller.

Elite-Pi

qmk flash -c -kb ferris/sweep -km vial -e CONVERT_TO=elite_pi --bootloader uf2-split-left
qmk flash -c -kb ferris/sweep -km vial -e CONVERT_TO=elite_pi --bootloader uf2-split-right

Frood

qmk flash -c -kb ferris/sweep -km vial -e CONVERT_TO=promicro_rp2040 --bootloader uf2-split-left
qmk flash -c -kb ferris/sweep -km vial -e CONVERT_TO=promicro_rp2040 --bootloader uf2-split-right

Once you have done this then label the controllers so you are absolutely sure which is which.

If QMK encounters errors it will let you know. Fix any errors before proceeding to the next step.

PCB

These steps will get us a PCB that we can test:

  1. Solder the sockets to the PCB
  2. Solder the TRRS jacks to the PCB
  3. Socket the controllers (for this build both controllers will be face down, but there is a handy message printed on the PCB which will help with orientation)
  4. Connect the two halves with the TRRS cable

Testing

Plug the keyboard into a computer, and short every single socket to test that the right key codes are sent. I use QMK Configurator to test this.

If anything is awry, fix it before soldering switches.

Soldering switches

Press each switch into the PCB, and ensure they are straight. Then solder each one in turn.

Once the switches are soldered, repeat the same tests as before. If any switches do not work, or behave oddly (repeated keys, excessive chatter etc.) then re-solder them.

Final touches

Apply 5-6 rubber feet to the bottom of each half of the PCB, and then add keycaps.

Pay What You Want

I often download albums that have been made freely available, and then end up buying the record anyway. It’s definitely a way I have discovered new music for a while, and very rarely leads to me not giving the artist money for something, even if it is not that particular record.

Here is list of music currently available on a pay-what-you-want basis. It’s accurate as of 30th September 2023, but I do intend on trying to keep this as up to date as possible. For the first three sections it’s worth looking directly on their Bandcamp pages, and even if things change, then there is always something on offer.

Wrong Speed Records

This is my favourite record label right now, and I own a fair few of these on vinyl or cassette. If you don’t care about having a physical copy then you can pay whatever you want for these.

Gizeh Records

Another favourite that I own a fair few records from.

The band that started me on this quest often add/remove things from they pay-what-you-want list, but these are the ones that seem to be on it the most. If you do find physical copies of this music then just buy it, because they don’t stick around for long.

Everything else

A selection of other things that I have enjoyed and would definitely like to own on vinyl at some point.