A Tale of Two Keyboards

Further noodling with keyboards this week. If you’re here for the RPGs or fiction you may be disappointed… but it’s still 100% geek.

I’m mostly documenting this because I had to fix several issues with my BT60 PCB in the firmware, so the details and link to my GitHub are below.

Filco TKL

I decided to desolder my Filco a second time because the Glorious Panda switches really weren’t working for me with the Filco’s steel plate, and instead I soldered in the lavender linear switches I’d bought some time ago.

Before I soldered them I lubed them (with g lube, because it was what I had) and filmed them (with deskeys switch films) and mutilated them (because the filco only takes 3 pin switches)

The switch films were so fiddly to put on that I would seriously think twice before doing it again… but on the other hand if you’re opening up the switches anyway, why not film them? It does make the housing a lot tighter.

The finished keyboard does look very handsome with the Filco SA keycaps (R2/R3):

And even better with the SA Dreameater fully sculpted set:

Unfortunately I don’t really care for linear switches compared to the alternatives, so this will be the first and last time I use them (probably). The keyboard is still nice enough to type on and I’m happy to let this be the final state for my 10+ year old Filco. It’s been a lot of fun repurposing something that I thought I’d have to abandon because of the infuriating key chatter.


The other thing I built is much more exciting although maybe it doesn’t look like it:

This has my lubed Glorious Panda switches, a carbon fibre plate, and a BT60 PCB which means it’s wireless. It’s not been entirely smooth sailing though.

Problem 1: short shorts

I was using GMK stabilisers which screw into the PCB with metal screws. I guess these multi-layout PCBs have so many pads and traces that if you’re not careful you can short the thing, which is what happened to me. The short basically meant that no key on Column 13 (backspace, backslash, enter, right ctrl) functioned.

Fixed it by putting electrical tape between the screw and PCB.

Problem 2: firmware errors

The second thing that happened was that the vendor had cocked up the key matrix for the default firmware, referencing Right Shift to RC(3,13) which doesn’t exist (meaning that the board treats it as the Escape key). That was an easy fix, just correct the BT60.dts file in the repo (which I did, details of my fork on GitHub below).

I guess if I were a consumer of a single packaged thing I would be annoyed that the thing didn’t work out of the box. But in this case the customer support generally relies on channels like Discord to support and explain the problem, and I already managed to diagnose the problem thanks to the great documentation, and that actually gives me more confidence in buying again than, say, from a large corporation.

Actually writing the firmware was dead easy, foolproof almost (it compiles in the cloud and if it doesn’t work, you get a warning and it won’t build the firmware). I forked the repository and then added a couple of my own branches. The workflows mean that all the compiling happens in the cloud, and flashing the firmware was even simpler than doing the same on the Discipline65 board.

Problem 3: default layer

I messed with the raised layer in my alternative firmware. This was because some of the modifier keys had alternative functions on the raised layer, which meant that you had to be sure you were pressing those keys (shift, ctrl, alt) before you pressed the function key to access the arrow keys. Why is this a problem? Well, if you use arrow keys a lot you probably also use them in combination with other modifiers and remembering to press them in order is a massive pain. So, I just remapped the functions (like the commands to change BT device) to other keys. Once this was done I could press function, shift, ctrl etc. in any order and it would behave as it should.


This is my GitHub fork of the zmk firmware for BT60 with the corrected key matrix. There are two new branches, one called ANSI_hhkb and the other called ANSI_alt which have alternative raised layers (one for a HHKB style function layer and the other for the more standard 60% ANSI keyboard). I prefer the latter, the HHKB style just doesn’t work on this board for some reason.


So after it all works, it’s connected reliably with a Mac Mini and a Windows laptop, and I’ve typed this post on the keyboard. The good thing about a standard ANSI layout is that I have a lot of different keycaps to use. I liked the Dolch look for the Knight Rider vibes

SA sounded nice as well, but the all white looked a bit bland

Other thoughts

  1. I like tactile switches, and the Glorious Pandas are a high bar to clear. I may try ergo clears at some point but otherwise the pandas are pretty amazing. But it seems that the keyboard hobby is obsessed with linear switches in pretty colours.
  2. I like non-metallic switch plates. The best I’ve used so far are my HHKB (plastic) and the carbon fibre plate. I’m not keen on steel or aluminium plates, though I haven’t tried brass yet. I fancy trying a polycarbonate or POM plate.
  3. I thought I wasn’t going to play around with another 60% build because I needed the arrow keys but I’m finding the arrow key placement on the left (WASD) and the function on the right pretty ergonomic compared to the Tsangan/HHKB layout (I think the HHKB works better thanks to the lighter switches and sculpt, but when I tried the Tsangan style with this Tofu case it wasn’t so good). You hit the function button with your thumb and the other modifiers are right there. Overall this board feels very nice and snappy and it sounds good, and I like the reclaimed desk space.

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

This site uses Akismet to reduce spam. Learn how your comment data is processed.