davideisinger.com

My personal website
Log | Files | Refs | README

commit 4ec60247647543c5ad843fb875ec7be70f21434a
parent 638d21f984d08b6b0d5d1666a8fe5148e05b47e2
Author: David Eisinger <[email protected]>
Date:   Mon,  1 Jun 2026 10:24:41 -0400

Start June 2026 dispatch

Diffstat:
Acontent/journal/dispatch-40-june-2026/Tomato Clamato.mp3 | 0
Acontent/journal/dispatch-40-june-2026/index.md | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/archive/aresluna-org-hcpaiq.txt | 1582+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/archive/interconnected-org-zhcj46.txt | 414+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/archive/mike-puddingtime-org-xjcclg.txt | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/archive/veronicaexplains-net-sk5zao.txt | 420+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Astatic/archive/www-robinsloan-com-sokpt5.txt | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 2646 insertions(+), 0 deletions(-)

diff --git a/content/journal/dispatch-40-june-2026/Tomato Clamato.mp3 b/content/journal/dispatch-40-june-2026/Tomato Clamato.mp3 Binary files differ. diff --git a/content/journal/dispatch-40-june-2026/index.md b/content/journal/dispatch-40-june-2026/index.md @@ -0,0 +1,82 @@ +--- +title: "Dispatch #40 (June 2026)" +date: 2026-06-01T00:27:46-04:00 +draft: false +tags: +- dispatch +references: +- title: "It's time to talk about my writerdeck" + url: https://veronicaexplains.net/my-first-writerdeck/ + date: 2026-06-01T04:29:30Z + file: veronicaexplains-net-sk5zao.txt +- title: "The ThinkDeck | hi, it's mike" + url: https://mike.puddingtime.org/posts/2026-05-24-the-thinkdeck/ + date: 2026-06-01T04:29:31Z + file: mike-puddingtime-org-xjcclg.txt +- title: "Resident: vibe coding firmware (our new sandbox library for ESP32 devices) (Interconnected)" + url: https://interconnected.org/home/2026/05/20/resident + date: 2026-06-01T04:29:38Z + file: interconnected-org-zhcj46.txt +- title: "Key, in sight – Aresluna" + url: https://aresluna.org/key-in-sight/ + date: 2026-06-01T04:29:49Z + file: aresluna-org-hcpaiq.txt +- title: "The big button" + url: https://www.robinsloan.com/lab/big-button/ + date: 2026-06-01T04:29:50Z + file: www-robinsloan-com-sokpt5.txt +--- + +Some thoughts here... + +<!--more--> + +- Ann visit / Claire birthday +- Lake +- ROTS +- New music +- Nico + - Haircut + - Growing up + - Almost 2 +- Pool +- Finished "The Boys" +- Bike stolen + +<audio controls src="/journal/dispatch-40-june-2026/Tomato Clamato.mp3"></audio> + +### This Month + +* Adventure: +* Project: +* Skill: + +### Reading & Listening + +* Fiction: [_The Poppy War_][1], R. F. Kuang +* Non-fiction: [_Every Tool's a Hammer_][2], Adam Savage +* Music: [_Title_][3], Author + +[1]: https://harpervoyagerbooks.co.uk/products/the-poppy-war-the-poppy-war-book-1-rf-kuang-9780008239848/ +[2]: https://www.simonandschuster.net/books/Every-Tools-a-Hammer/Adam-Savage/9781982113483 +[3]: https://www.turntablelab.com/ + +### Links + +* [It's time to talk about my writerdeck][4] ([via][5]) + + > A couple of weeks ago, I decided to convert my old laptop into a writerdeck, a dedicated writing device free from the distractions of the modern internet. + +* [Resident: vibe coding firmware (our new sandbox library for ESP32 devices) (Interconnected)][6] + + > We’re open sourcing Resident, our library for running AI-authored code on microcontrollers – with no compile step and no firmware flashing. + +* [Key, in sight – Aresluna][7] ([via][8]) + + > It’s fun to slam big keys without thinking, and it’s fun to experience the mastery of precise combinations of meticulous keyboard shortcuts. It’s great to see things on the screen that react to what you’ve done, especially if those are things that really understand how you work. And it’s magical to watch your fingers do things seemingly on their own while you’re preoccupied with deeper things, just because you set up something that allowed motor memory to blossom. + +[4]: https://veronicaexplains.net/my-first-writerdeck/ +[5]: https://mike.puddingtime.org/posts/2026-05-24-the-thinkdeck/ +[6]: https://interconnected.org/home/2026/05/20/resident +[7]: https://aresluna.org/key-in-sight/ +[8]: https://www.robinsloan.com/lab/big-button/ diff --git a/static/archive/aresluna-org-hcpaiq.txt b/static/archive/aresluna-org-hcpaiq.txt @@ -0,0 +1,1582 @@ +Marcin Wichary + +12 May 2026 / 9,400 words, but don’t even worry about it + +[my-setup-t] + +Key, in sight + +A guide, of sorts, to keyboard customization + +I like keyboards because they’re the most effective human-computer interface +connection, but I also like keyboards because they are fun. + +It’s fun to slam big keys without thinking, and it’s fun to experience the +mastery of precise combinations of meticulous keyboard shortcuts. It’s great to +see things on the screen that react to what you’ve done, especially if those +are things that really understand how you work. And it’s magical to watch your +fingers do things seemingly on their own while you’re preoccupied with deeper +things, just because you set up something that allowed motor memory to blossom. + +This is not only about efficiency. Sometimes it’s more about a connection with +the tool, a feeling of customization or control, or simple appreciation of a +well-made interaction – all these beautiful low-level moments that give their +energy to the whole process. + +[icons] +These four apps do very different things + +How do you get there, though? Sure, you can get a nice keyboard, and adopt +shortcuts provided by the operating system and the apps you use. After that, +however, the road gets pretty steep. Getting a “fancier” keyboard means endless +options coated with infinite jargon. On the software front, so many apps come +with similar names, confusing interfaces, and frightening dialog boxes asking +you for all the permissions in the universe. + +So, I wanted to write a little guide, all the way from hardware to software, +about how I approached and warmed up to some of the keyboard mastery myself. +Maybe it will work for you, too? + +My goals for this essay are: + + • Actually do some useful things with modern keyboards and keypads. + • Find some fun and enjoyment in it all. + • Be a calm guide through a typically stormy port. + +If you were always curious but intimidated, or if you have a keypad or a bunch +of extra keys on your keyboard, but don’t know what to do with them… read on. +Two caveats before we start: + + • This will generally not cover command palettes, text expansion, and using + keys to launch apps – those are all valuable, but I think generally not + hard to accomplish. I want something different. + • The software parts here are Mac only. Please [2]let me know if you’d like + me to cover Windows as well. + +A key to toggle dark mode +A little highlight reel of what’s to come in this essay + +How to have fun + +How to have fun with hardware + +My recommendation: Start with making room for yourself so it’s easy to +experiment. In other words, start by adding keys. It’s no fun driving through +the busy streets of an old European city, fighting for space with tons of +shortcuts already out there, needing to shuffle existing conventions around. I +was responsible for keyboard shortcut decisions at work for years, and it’s a +real challenge. + +Instead – as awful as this analogy is – you need a brand-new parkway autobahn +where you’re the only car, free to drive carelessly and without speed limits. + +There are two ways to get there: by carving out a not-yet-colonized space on +your existing keyboard, or by literally buying new keys. + +Adding room by buying new keys + +If you have budget for an external macro pad, get one and put it on the side of +the main keyboard, opposite the trackpad or mouse. + +I have tried a few different options, and I could recommend: + +Wooting also might be the only keyboard software of all of them that could be +described as “actually nice to use.” +I would not recommend Glorious GMMK Numpad in that it is costly, and you cannot +reconfigure the sliders or the lights easily. + + • [3]Wooting UwU gives you three big keys and three small ones; the build + quality is nice and the price is relatively low. + • [4]Megadolon Triple Knob Macro Pad is knob-heavy, but it also gives you 16 + keys. + • [5]Work Louder Creator series keypads are pricier and have their quirks, + but overall it’s a nice layout and the mechanical feel is good, too. + • You can also get any nice numeric keypad, and then reassign its keys to do + non-calculatory things. [6]8BitDo’s is nice and relatively affordable, and + [7]Keychron offers a few different keypads – those are a bit more pricey, + though. I also used [8]Eweadn NK20. + +1 more image + +1 more  +1  +Ulanzi D200 and Elgato Stream Deck Neo + +I would not recommend Stream Deck or its copycats from Ulanzi and Logitech, +even if they are conceptually similar to the products above. Those look like +keys, but they really are buttons: mushy, meant to be pressed occasionally +rather than all the time, not great allies to motor memory. The rule would be: +if you’re buying something new, it needs to be using mechanical keyboard +switches. We will put those keys to actual pragmatic use, but they also need to +be really nice to press for the magic to kick in; we want something good for +the brain, but also good for the heart. + +If you buy a new macro pad or keypad, it will give you a new set of completely +conflict-free keys. My recommendation is to map them to F1–F20 and resolve what +that means later in software inside the computer, rather than inside the +keyboard itself. + +Making room without buying new keys + +If you don’t have room, can’t afford a keypad, or have ergonomics or RSI +concerns, here are some ideas on how to make room for yourself on your existing +keyboard: + + • If you have a keyboard with a keypad you don’t use, you can take over those + keys to behave like function keys. Particularly both numpad 0 and numpad + Return are bigger, and will be enjoyable to press in haste! (Each numpad + key can also be modified by modifier keys: Numpad 0, ⇧Numpad 0, and ⌘Numpad + 0 can all do different things.) + • If you already have F1–F12 function keys at the top, consider enrolling + them in new tasks. If you are already using some of them for system control + (for example volume or brightness or music pausing), you can split the + function row into two halves and free up only some of it for use. But the + goal would be never having to fiddle with the Fn key so the keys are as + easy to use as possible. + +One idea on how to divide a function key row + + • You can create a completely new modifier key and assign it to Caps Lock. A + user-made modifier is conventionally referred to as “Hyper.” This frees up + HyperA–Z, Hyper1–0, even HyperSpace (huh) or HyperEnter to do whatever you + want. The key is also in a nice position and really fun to press, once you + get past the trauma of years of trying to avoid pressing it. + • Claim a few other keys on the keyboard you never press. Do some eminent + domain on the little private Scroll Lock + Print Screen island? Reclaim + Insert and Delete or PgUp and PgDn? Or maybe your keyboard has a few weird + extra keys that you never touched that could use a new job? + • If you already have a gaming joystick or one of those gaming pads, and you + feel good about their feel, they might be a good candidate, too. The tools + we’ll talk about will allow to react to joystick and game button equally + well as to key presses. + +Nlofin Leverless Arcade Controller and Razer Tartarus Pro. I’d avoid products +by Razer, however, as their Mac software is absolutely horrendous. + +How to have fun with software + +Just one example of a scary keyboard software experience + +You can’t skip this part, and this is unfortunately a harder place to enjoy. +With the physical keyboards you can at least be mesmerized by the lights, +admire the build quality, enjoy the tacticility. But very little software for +keyboard customization is… pleasant. It all comes with rough interfaces, scary +permission windows, and impenetrable nomenclature. This can be inspiring in the +“I will figure it out and show you who’s the boss” sense – but it will be +intimidating first. + +You’ll often have to use more than one app to get going, too. Also, both of +these things will be true: there is no one app that does everything, and a lot +of apps have overlapping functionality. + +I will explain software in more details later, but first I just want to show +you what I chose to do. + +My setup + +Here is what specifically worked for me. + +Hardware + +I know my keyboard looks weird, but stripped of its strange moments, it’s a +pretty standard QWERTY. + +I have a little numpad on the left side. I customized it via its software so +that the keys are mapped to F1–F20. I split the keys into two halves – +shortcuts for the system, and shortcuts for the current app – and installed +different keycaps that helped me remember that division. + +Many keyboard lights are very rainbowy and fast-moving out of the box. I’m too +old for that. I’d argue most people are. + +I told the lights to chill and just use a stationary orange color so that it +matches my whole theme and makes me happy. + +I also have one big arcade button in a big box. It’s a long story, but I [9] +commissioned it hoping it’d be fun to press, and guess what: It’s really fun to +press. It’s technically a joystick button, not a key, but it connects via USB +as a keyboard would, and to the software I use there is no difference. And, +speaking of software… + +Speaking of software + +My main go-to is [10]Keyboard Maestro. It is old-fashioned in both good and +sometimes bad ways. It has a quirky, occasionally intimidating, but otherwise +thoughtful user interface. It’s capable, and I feel it grows on you and grows +with you – I started with simple things that I will show you below, and then +worked on figuring out more and more. (Also, the app is still being updated, +and it has a small, but invested community.) + +This is the command center that’ll decide what F1–F20 really mean depending on +all the context. The key press will mean F1 when the keyboard spits it out, but +Keyboard Maestro will change it to something more relevant before it reaches a +given application. + +I occasionally use other tools – often, you do not really have a choice! – but +I try to centralize all my logic in here and treat it as a main “dispatcher.” +If it’s possible to do something both in Keyboard Maestro and elsewhere, I put +it in Keyboard Maestro. But of other tools: + + • I installed [11]Karabiner Elements, which is free, and useful for some + lower-level stuff. It also has a useful key event tester. + • I occasionally use Shortcuts and other built-in macOS functionality, for + light text expansion and for disabling some built-in shortcuts (like ⌘⌥D + for dock hiding). + +Outside of attractiveness, the Keyboard Maestro app switcher has a few +interaction issues, as well. + +Keyboard Maestro should be safe to install, with one exception: it changes your +⌘Tab app switcher. Unfortunately, it’s not a positive change. While Keyboard +Maestro is great at wiring keystroke logic together behind the scenes, most of +its visible UI is not very attractive, and this is no exception. So, after +installation, click on Switcher Group and then uncheck Enable Macro Group. + +The native macOS app switcher and its Keyboard Maestro equivalent + +Keyboard Maestro is free to try for 30 days. After that, at the time of +writing, it’s a one-time $36 purchase, which feels very reasonable. I do not +know of other apps that offer similar functionality cheaper (or for free) that +do not make me want to rip my hair out using them. + +Continue reading by choosing your own adventure + +I learn best from examples ↓ I would love to see examples first, then (maybe) +catch up with theory +I learn best from theory ↓ I would love to understand the theory first, then +see your examples + +The best keyboard incantations I made + +This is what I found the most useful and enjoyable with my setup. Some of this +stuff might not be relevant to your work, but perhaps will offer inspiration or +a good jumping off point. + +Once you get started with some concepts, it gets easier! Each of the 25 +examples below tries to show a new idea that you can put to use. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +I fixed shortcuts that disagreed with one another. + +Motor memory is beautiful. It can offload menial actions to other parts of your +brain so you can focus on what matters. It can make you fly through things. It +can help achieve flow. + +But motor memory requires consistency. I do a lot of writing in various apps, +and specific things behaving slightly differently bother my fingers. Bold and +italic always work the same way, but when it comes to stuff like strikethrough, +quotations, headlines, separators, and to-do items, the shortcuts are all over +the place. + +For example, I am used to pressing ⌘⇧X for strikethrough, but Bear (a +notetaking app) has it under ⌘⇧U, and Apple Notes doesn’t provide a shortcut. +In both cases, the command is in the menu, so the simple way to fix this is to +go to the Settings and reassign based on the menu name. Or, you can also use +the [14]CustomShortcuts app, which offers a tighter UI and autocomplete. + +[notes-buil] [notes-cust] +The native macOS function and CustomShortcuts + +But I like unifying everything in Keyboard Maestro (and avoiding Settings [15] +like a plague), and so I did it there instead: + +Keyboard Maestro macro setup + +The benefit of doing it in Keyboard Maestro is that I can also fix Medium’s +shortcuts. Medium lives inside Chrome, which complicates things – I don’t want +to change the shortcut for every single web app in Chrome! – but Keyboard +Maestro allows to target specific tabs, so I can unify the quoting shortcut +from ⌥⌘5 to ⌘': + +Keyboard Maestro macro group and macro setup + +How does one choose the correct shortcut, though? My advice is: Listen to your +fingers. If you’re already used to some combination of keys, just make it work +in other apps. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +I deleted some shortcuts I truly hated. + +I use a lot of Slack, and in Slack I constantly press ⌘T to search for a person +or a conversation. But the challenge with ⌘T is that it is right next to ⌘R, +and occasionally my fingers would also press that shortcut on the way, and +initiate a reload – not the end of the world, but frustrating to happen a few +times a day. + +Settings does not obviously allow you to remove a shortcut, but you can always +assign a new shortcut that you will just never press, for example something +heinous like ⇧⌃⌥⌘F10. + +[slack-relo] +I did a similar thing for Show Spelling And Grammar. The shortcut was ⌘⇧; and +sometimes I would press it alongside ⌘⇧L that I use a lot. So, I disabled that +wholesale. + +But the shortcut showing up in a menu like this feels inelegant to me. So, in +Keyboard Maestro, I just made a category for Slack, added an action that’s +triggered by ⌘R, and… that’s it. I didn’t wire anything to it, so the action +doesn’t actually do anything, but its very presence ensures the key press never +makes it to Slack. + +Keyboard Maestro macro setup +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I added some shortcuts to help my motor memory. + +At some point, I made Gmail a web app in its own window, rather than using it +in the browser as yet another tab. But I still occasionally press ⌘N or ⌘T in +Gmail, out of habit. + +It was really easy to change it so those keys switch to Chrome and open new +stuff there, like they did before. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Okay, so we made some shortcuts consistent, and removed stuff. But this is kind +of boring. + +Generally, unless you know exactly what you want and have existing pet peeves, +I would initially avoid the business of micromanaging existing shortcuts in +apps, and optimizing them ad nauseam – it’s just not as much fun, and we didn’t +get all these new keys for no reason. + +So, let’s do some things with those keys. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I had fun with a big button. + +I give talks sometimes, but Keynote’s “show presentation” shortcut that I use +for previewing and practice is a thoroughly disappointing, puny ⌥⌘P. + +On the other (well, same) hand, it’s just a lot of fun to slam a big arcade +button without thinking – it feels extremely satisfying to press it and then +see the slides blow up on the screen. I want to think of my presentations as +appearing in a movie theatre, with people quieting down as [16]the THX logo +scares the hell out of them. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +Actually, even more fun. + +I also do [17]a lot of tech history document scanning. Scanning is even less +glamorous than you might already think – instead of gently laying a piece of +paper onto a scanner bed and pressing a button to Preserve History, you +sometimes have to shove a heavy, half-opened book in there and hold it in the +right position for 20 seconds or more. + +[scanning] +My scanner software is good enough that it allows me to queue the next scan +before the current one is finished, so I really do not have to worry about +timing. If the software wasn’t as good, I am sure Keyboard Maestro would allow +me to make it work, anyway. + +A contorted body and busy hands are not great conditions to carefully target an +onscreen Scan button with a mouse, or even to press a shortcut more complex +than one key. So, I also wired the same big button to start the scan process. +Keyboard Maestro invokes that only if the scanning software is open, but +regardless of whether the scanning app is currently focused or not. This is +important, as I often jump to Finder to verify the results as I’m scanning and +I want to be able to press the key anywhere. + +I also assigned the same function to the Fn key on my laptop keyboard. The Fn +key is kind of [18]useless to me, and it is positioned in a corner, so it’s +easy to press, too. (Tools like Keyboard Maestro allow you to have more than +one key trigger for one function, and that can be very useful.) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +2 images + +Show me the Keyboard Maestro setup (2 images)  +Show me the Keyboard Maestro setup (2 images)  +Keyboard Maestro macro setup for Zoom Keyboard Maestro macro group and macro +setup for Google Meet + +Okay, quite a bit more fun. + +I also wired the same button to mute me on various calls. + +Google Meet, Zoom, and FigJam offer keyboard shortcuts for this – although each +one is different – and FaceTime only has an onscreen button. Keyboard Maestro +can unify all of these things, and just like before, choose the right action +depending on which app is running. (For FaceTime, it’ll get there via the +menu.) I just press the big arcade button. + +I can even wire it so that it if the app is in the background, the button press +can switch to it quickly, do the muting, and go back where I was, effectively +making my button slam a “global” shortcut. It’s a nice enhancement very few +apps offer on their own. + +And now, it works so well, I can mute and contain even a very sudden sneeze. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I swear I am done with the big button… right after this. + +Lastly, I also wired the big button to take a screenshot of the main display. + +What’s cool about that is that [19]regular screenshot-taking shortcuts require +you to hold a modifier key or two beforehand. But a modifier key is not truly +inert – it could dismiss the very tooltip I wanted to screenshot, or change the +cursor to look differently. A one-button operation doesn’t have these problems. + +To finish the big button story: In general, I wouldn’t maybe recommend +overloading one key this way – that means I cannot scan while I’m on Zoom, or +take screenshots this way while I’m practicing for my presentation, although +these are not situations that happen anyway. + +But, let’s move away from the big button onto other things. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +2 images + +Show me the Keyboard Maestro setup (2 images)  +Show me the Keyboard Maestro setup (2 images)  +Keyboard Maestro macro setup for Preview Keyboard Maestro macro setup for +DevonThink + +I made more things consistent, but also consistently pleasant. + +I read a lot of documents and PDFs and it’s a similar situation as before. +Chrome, Internet Archive, Preview, and Google Books cannot agree on the keys to +use here, and DevonThink doesn’t even have any keyboard shortcuts for flipping +pages. + +Keyboard Maestro allowed me to unify the existing shortcuts, and for DevonThink +I used one of its smarter features: searching for a button under the hood using +the name of its tooltip. + +But the most important part? I assigned this to the two bottom-most keys on the +keypad just so it feels really nice, too. I actually love keeping my left hand +there when reading, just going through pages and enjoying the clicky keys, +while my right hand is on the trackpad where I can zoom or do other things. + +Now, I can do this thousands of times a day with joy. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +3 images + +Show me the Keyboard Maestro setup (3 images)  +Show me the Keyboard Maestro setup (3 images)  +Keyboard Maestro macro setup for dark mode using Shortcuts Keyboard Maestro +macro setup for dark mode using a built-in function Keyboard Maestro macro +setup for toggling retina mode + +I took charge of time and space. + +When I do design or web work, I want it to look good in dark and light mode. +But going to Settings to toggle it back and forth is really unpleasant. So I +wrote a tiny Shortcuts script, and wired it via Keyboard Maestro, which can +invoke any Shortcut. Now, one single slam of a key that’s always there switches +dark mode wherever I am, and it honestly feels a bit magical. + +(By the way – later I discovered that Keyboard Maestro has its own “toggle dark +mode” action, simplifying my situation even more, but I wanted to show you +talking to Shortcuts was possible.) + +Then, I made it so Shift + the same key toggled the screen in and out of retina +pixels, which is also useful for testing. I don’t do that nearly as often as +dark mode, so I was okay with a modifier key here. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I built a slightly smarter escape hatch. + +I use Bear for notetaking and I have one main note, with all to do items in it +– but I check out other notes all the time. + +I wanted a simple and reliable key that would always get me to that main note +wherever I happen to be: an app launcher with a twist. + +[20]This short video might help visualize this. + +Bear doesn’t provide a smart way of controlling it or an API, but I could do it +the “player piano” way by just replaying some keystrokes I would press: switch +to Bear, simulate ⌘⇧O, fake type the name of the main note, press Enter, and +then press down arrow a few times. It’s a little goofy because you can see it +going through its motions, but it works really well. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Karabiner Elements setup + +Show me the Karabiner Elements setup  +Show me the Karabiner Elements setup  +Karabiner Elements setup + +I conflated brightness and volume in a way that probably breaks some laws, and +cleaned up Apple’s strange conventions. + +For some reason, I love changing the brightness by hand. Maybe I don’t trust +the auto brightness stuff, maybe I’m just power hungry, maybe my eyes are funny +– likely all of the above. + +I was also fed up with default macOS modifier key combinations for [21]volume +and brightness keys, so I put all of them on the same two keys my keyboard +happens to have, behaving like this: + + • normal presses = volume + • ⇧ presses = precise volume in smaller steps + • ⌃ presses = brightness on the left screen + • ⌘ presses = brightness on the right screen + +Why ⌃ and ⌘? Because ⌃ is on the left, and ⌘ is on the right. This way I made +it easier for myself to remember, even if that set up is only true on my desk. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I added tag wrapping in my programming editor. + +This is the one that made me really happy. I write all of my stuff in HTML, but +HTML with its angle brackets is not as much fun to type in. + +I noticed I was spending a lot of time typing the same tags over and over +again, so I added a few expand-like features where I can select text and then +press one key and it turns it into an <a> link. Another key makes it a specific +style, and another makes it italicized. + +It works no matter how long the string is, and I find it really fun to use – +again, left hand on the keypad row, and right hand to quickly select pieces of +text using the trackpad. + +I know my programming text editor likely has that option… somewhere. But I am +lightly afraid of interfaces of programming editors, and doing it like this +allows me to cheaply reuse it elsewhere, too. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I set up universal record and playback. + +This is one of the truly unsung heroes of this area, and one I learned to love +first in a text editor called Sublime Text. Today, Keyboard Maestro allows me +to have it everywhere. + +The starting point is simple: you assign one key to be “record” and one key as +“play.” Then, at any point you can record a sequence of keystrokes, and then +play it back, as many times as you want. + +It seems simple, but the power lies exactly in its simplicity. Having it always +there, ready to use and then ready to throw away, allows for a refreshing new +casual kind of automation. + +One example: As you can see in the video above, I wanted to make a little grid +in Keynote. So I recorded pasting one line, and then moving it the right +amount. Then, playing back the same interaction a few times got me what I +wanted really quickly. + +Another one: Sometimes when you paste a big block of text, it comes with extra +lines between paragraphs, or not enough spacing between paragraphs. + +There are many ways to deal with this. If you’re good with the command line, +you can put together a script. If you’re good at regexps, you can use Find & +Replace. But for me, I don’t do either enough to be good, so I would normally +just do it manually one paragraph at a time. This allows me to automate this +part in an incredibly light way – I record myself doing it once (⌥↓, →, Return +), then repeat a few more dozen times. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I concocted a fun reloading chain. + +When working on a Chrome plugin, it is cumbersome to see its effects +immediately, since you have to reload a few things in the right order. So, I +installed a Chrome extension to reload my extension-in-writing, and wired one +of my macro pad keys to do this sequence of events: + + • save the current work in the programming editor + • jump to Chrome and press the “reload extensions” button in the background, + reloading my extension + • then, press ⌘R to reload the website, to see the extension’s effect + • and then, go back to the editor + +The beauty is that even though this is very “player piano,” it’s so fast it +just feels magical – I press my button, immediately see its results on the +right, and no context is changed or lost. I can continue writing as if nothing +happened. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +2 images + +Show me the Keyboard Maestro setup (2 images)  +Show me the Keyboard Maestro setup (2 images)  +Keyboard Maestro macro setup for arbitrary image rotation Keyboard Maestro +macro setup for resizing the image window + +I added some fun Photoshop flows that… flowed great together. + +What follows scanning is long and often tedious processing: making the scans +brighter, straightening them, cleaning up the edges. + +[scan-befor] [scan-after] + +When I started looking at how I do this – in batches of sometimes hundreds of +pages in one go – I noticed a few patterns: + + • I often go to the Brightness/Contrast window via the menu, and then fiddle + around with different numbers. So I made an action to increase brightness + and contrast by 10%, and assigned it to a key. Now I press it once, twice, + three times, until it looks good. If I overshoot, I can always undo. + • I always resize the window with the mouse to leave some room at the edges. + That made it easier to draw around them and clean them up. So I added a key + to resize the window to be slightly larger, without ever touching the + mouse. + • I noticed that when straightening an image, I have to click a button on the + screen with the mouse, because there is no keyboard shortcut, or way to + assign one. But Keyboard Maestro allows you to automatically click on + buttons, too. + +Then – and this is important – I assigned these to keys that are side by side. + +I know this sounds kind of silly, but now I can just rest my left hand on those +keys, right hand on the trackpad, put on a podcast, and absolutely breeze +through the scans, and feel kind of strangely amazing in the process? The +side-by-side keys mean motor memory starts to develop really quickly, and soon +I just watch my fingers do things. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I made keystrokes replace some bookmarklets. + +I use Web Archive to get to older versions of pages, and previously had a [22] +bookmarklet I would press in my browser’s toolbar. + +You could probably assign a keystroke to a bookmarklet, but I went a different +way to simplify: I had Keyboard Maestro press ⌘L (go to the URL bar), then type +web.archive.org/ in front, and then press Enter. + +It’s easy and fun, and I also wanted to show it to you because this is an +interesting way to approach some things previously only bookmarklets could do. +Bonus: This will work in all the browsers without having to set up each one by +hand! + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +4 images + +Show me the Keyboard Maestro setup (4 images)  +Show me the Keyboard Maestro setup (4 images)  +Initial setup within Chrome Keyboard Maestro macro setup Keyboard Maestro macro +setup Keyboard Maestro macro setup + +I added a deterministic set of shortcuts for testing speed. + +This is similar to dark mode and retina stuff. When designing for the web, I +sometimes need to fake a slow connection or going offline to make sure my +website behaves well under conditions worse than wired, flawless home internet. +Moreover, I really want tight, immediate control over this – for example, +switching to “fast” for initial load of the page and “offline” immediately +afterwards. Having a great keyboard UI here isn’t the difference between using +it fast or slow. It’s about using it or not using it at all. + +Chrome web inspector offers a little UI for this, but it’s buried inside a menu +inside a tab inside a drawer. To their credit, they offer to also wire some +shortcuts to those options, but the shortcut options are limited to modifier +keys. + +Keyboard Maestro gave me a nicer solution: + + • start by opening a web inspector if it’s not open + • use my macro pad keys without any modifier keys, so it’s very fast and + convenient + • even display a little message to confirm what I’ve done (using Raycast, + since Keyboard Maestro’s visual messaging feels ugly to me) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +2 images + +Show me the Keyboard Maestro setup (2 images)  +Show me the Keyboard Maestro setup (2 images)  +Keyboard Maestro setup for adding a label in Finder Keyboard Maestro setup for +removing all labels in Finder + +I made Finder better, too. + +When I process files in Finder, I sometimes want to tag them with a specific +color label. However, Finder’s UI for this is very mouse-oriented, and fiddly +when it comes to complex selections. + +On my keypad, I set up four keys side by side so that when I am in Finder the +first three add red, yellow, and green labels to whatever my selection is +(could be one file, could be a hundred), and the last one just [23] +deterministically removes all the labels. + +Since Finder’s interface for labeling is kind of a mess, this needed to be +wired on a deeper layer than just “player piano,” and used more advanced +Keyboard Maestro features such as looping and variables. + +I really enjoy using it, because it’s easy to remember, and moving my left hand +to those keys and then back to Shift and Command to control Finder’s selection +feels easy, while my right hand can stay on the trackpad. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +2 images + +Show me the Keyboard Maestro setup (2 images)  +Show me the Keyboard Maestro setup (2 images)  +Initial setup in macOS Settings Keyboard Maestro setup + +I learned you can control your smart home in a strange way. + +There are ways to control your smart home by using different apps or proper API +events. But there is also a much simpler way that can be a fun way to get +started: talking to Siri by typing to it. This way, anything you can say to +Siri could be put under any key, which you can do in macOS out of the box. For +example, I can just put “kitchen lights 10%” under F5 or “decrease room +temperature” under F6. + +It also works a lot faster than saying the same thing to Siri via voice, which +is a very interesting discovery. + +(Unfortunately, this approach has limitations, because Mac’s Siri cannot do +everything. But it is a very simple starting point.) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Karabiner + Keyboard Maestro setup + +4 images + +Show me the Karabiner + Keyboard Maestro setup (4 images)  +Show me the Karabiner + Keyboard Maestro setup (4 images)  +Karabiner Elements setup Keyboard Maestro macro setup Keyboard Maestro macro +setup Keyboard Maestro macro setup + +I invented a completely new keyboard shortcut convention I use all the time +now. + +All that stuff just whetted my appetite to try something new, something +different, something unusual. And this one is perhaps my absolute favourite. + +[macos-text] My previous attempt to make key symbols easily accessible + +In my design and writing, I often want to use symbols like ⌘ or ⇧ to refer to +keys, so I had this idea: What if I press a new “Print the legend” key like a +sort of modifier key, in combination with another modifier key or keys like ↓, +Esc, or Return. That combination makes their symbol appear on screen. + +This feels so much more fun than the standard way of setting text replacements, +and avoids you having to remember all of these strange writing incantations +that need to be close, but not quite correct strings, since you still want to +write “Command” and “Shift,” too! + +It also has the added benefit that it works in more places than the normal +macOS text expansion, and feels little a magical because… keyboards are not +really meant to work that way. But mine does. It looks like the small keypad is +a “boss” of the huge one – a true Ratatouille situation. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I talked to YouTube via JavaScript to simplify a complex flow. + +Text transcript in YouTube is very useful if I want to quote something from a +YouTube video into [24]my blog. + +[youtube-tr] + +If you didn’t know that YouTube had a transcript, you weren’t alone! It’s not +only buried behind a few clicks and scrolls, but also resets the moment you +zoom in the video. + +Instead of a “player piano” action, I used Keyboard Maestro’s JavaScript +integration to find the right button and click it under the hood. And then I +assigned it to a key. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +5 images + +Show me the Keyboard Maestro setup (5 images)  +Show me the Keyboard Maestro setup (5 images)  +Keyboard Maestro helper macro setup Keyboard Maestro helper macro setup +Keyboard Maestro helper macro setup Keyboard Maestro helper macro setup +Keyboard Maestro main macro setup + +I made a super weird shortcut I am very proud of. + +And now, we can go back where we started, armed with more ideas. + +Do you have a favorite shortcut? Something that you just enjoy pressing? My +suggestion to get an external keypad was to automatically get some fun-to-press +keys. But you can get those on the main keyboard, too. + +The fav recent one I “invented” was ⇧Space to insert a divider. It made sense +both conceptually (divider is a long pause), and mnemonically (both the Shift +key and the spacebar are long, like a divider). I wired it up in Bear and +Medium – in Notes, which doesn’t seem to have a divider function, I just made +it output a bunch of hyphens – I excitedly started using it, and then… I +discovered a big problem. + +Turns out I press ⇧Space all the time when typing. Fingers are extremely +precise and rather careless at the same time, and it turns out that I often +pressed ⇧ too early, on the way to a capital latter, which caught the space in +the crossfire. It didn’t have any effect before, but the new shortcut meant my +documents would now be littered with random dividers. + +I didn’t want to give up on my idea, though. Then, I realized something: There +are two Shifts on my keyboard. What if I required ⇧⇧Space – actually holding +both Shift keys? + +No designer would ever allow such a shortcut in any app because it has multiple +problems: it’s not ergonomic, it’s not accessible, and it requires two hands. +But I didn’t have to think about everyone, only me. I knew what I was doing. +When typing, both my hands are on the keyboard already, and dividers don’t +happen often anyway. And there was even something poetic about it feeling a bit +“heavier” – a divider feeling like ripping the page out of the typewriter and +inserting a new one. And the three keys in succession looked like one long +line, so it was a nice visual mnemonic. + +The same line of thinking allows you to have something seemingly impossible: +Hyper with modifier keys, as long as you’re using modifier keys on one side +only. Simply make Hyper mean the modifier keys you’re not touching, and detect +the other set. This way you could have HyperV do one thing, and HyperLeft Shift +V so another. + +It all required a bit of a deeper surgery, because Keyboard Maestro bundles +Shifts together by default, but I made it happen. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I solved clipboard history in a light way that made me happy. + +Sometimes I accidentally write over my clipboard, but it doesn’t happen often +enough for me to invest in learning a clipboard manager; those things feel +overbuilt and scary to me. + +How did I approach this problem? To me, the most important thing was a +shortcut, and I came up with Caps LockV (a.k.a. HyperV, which means ⇧⌃⌥⌘V). I +thought this would ensure that in a moment of panic, I will remember it, +because it’s very similar to ⌘V. + +But what did I plug into it? Keyboard Maestro has a clipboard manager, but it’s +not very pretty. I happened to have a license for Raycast, so I plugged that +one instead: + +[clipboard-] [clipboard-] +Clipboard history in Keyboard Maestro and in Raycast + +I know macOS Tahoe has a clipboard manager, but I don’t want to update to Tahoe +– but once I do, and if I like what it offers, I should be able to just rewire +the shortcut to go there instead. That’s another benefit of taking ownership +here – over time, you can keep the shortcut, but switch what’s underneath. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Karabiner + Keyboard Maestro setup + +2 images + +Show me the Karabiner + Keyboard Maestro setup (2 images)  +Show me the Karabiner + Keyboard Maestro setup (2 images)  +Karabiner Elements setup Keyboard Maestro macro setup + +Wait, no, this is an even better solution. + +But even that above didn’t feel great. So I thought a bit more. + +And I had a realization: what’s a pretty natural interaction I know from my +phone, or Apple TV? It’s “long press to reveal more advanced options.” Why +couldn’t ⌘V work the same way? Press it normally to paste, but press and hold +it for a clipboard menu. Holding means repeat elsewhere in keyboarding, but I +never want a repeated paste. + +This required some delicate surgery: + + • It all had to start on the Karabiner side because it was pretty invasive. + • Preventing ⌘V repeating was as easy as adding "repeat": false in the right + place. + • Instead of communicating through a throwaway key like F20, Karabiner talks + directly to Keyboard Maestro behind the scenes, and asks it to run a + command. + • That can invoke Raycast’s clipboard as above, but since the first press of + ⌘V pastes immediately and I didn’t want to change that, it also has to run + an undo first. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Show me the Keyboard Maestro setup + +Show me the Keyboard Maestro setup  +Show me the Keyboard Maestro setup  +Keyboard Maestro macro setup + +I made another big button do something silly. + +I haven’t really figured out what to do with knobs yet. They are fashionable, +but my imagination doesn’t reach further than volume, brightness, and/or video +scrubbing – pretty basic stuff. + +But a lot of knobs are also buttons, so I just wired mine to [25]Raycast’s +confetti canon. + +And I just press it from time to time, for no reason at all. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Choose your own adventure + +Okay, we are done with examples! And now… + +[26]Continue with the theory ↓ +[27]Skip theory, go to the ending ↓ + +This concludes the “choose your own adventure” portion of the essay! + +The life of a keystroke + +There is a lot of keyboard software, and it all exists on different planes. +This is my mental model of how a keystroke travels through the system: + +Event/App +Function +[28](*) Most common apps [29]( ) Example tasks +Key press +Keyboard firmware apps +Basic configuration of keys and knobs, modifier keys, keyboard lighting, +layers. + + • VIA + • 8BitDo Ultimate Software + • Chrysalis + • Wootility + + • Make top left key be equivalent to Enter + • Turning knob turns volume up or down + • F1 key outputs “on my way” + +USB side apps +Rewriting keys and changing them depending on which keyboard they came from. +Handling volume and other system keys. + + • [30]Karabiner Elements + • [31]Kanata + • [32]KMonad + + • Holding CtrlShift on any keyboard makes HJKL become cursor keys everywhere + • Ctrl from one specific keyboard becomes ⌘ + • Prevent ⌘Q from working any keyboard from doing anything in any app + +Apps assigning shortcuts to commands +Changing shortcuts, mostly in app menus. + + • Keyboard Shortcuts (macOS) + • [33]CustomShortcuts + + • File > Print is now ⌘⇧P instead of ⌘P + • Format > Italic is now ⌘⌥I instead of ⌘I + • Disable ⌘⌥D from showing/hiding dock + +Player piano apps +Automation by creating fake key presses and clicks. + + • [34]Keyboard Maestro + • [35]BetterTouchTool + + • F1 key outputs “on my way” + • Pressing F2 clicks a Close button on screen + • Prevent ⌘Q from working any keyboard from doing anything in any app, with + exception of Notes + +Commands and logic apps +Automation by talking to other apps. + + • [36]Keyboard Maestro + • [37]Keyboard Cowboy + • [38]BetterTouchTool + • [39]Hammerspoon + • Shortcuts (macOS) + • Automator (macOS) + • [40]Alfred Workflows + + • if FaceTime is running, ⇧Esc mutes it even if you are not inside the app + • Pressing F3 turns dark mode on and off + • Pressing ⌘⌥V pastes selected text into previously opened application + +Command palettes +Visual command lines that offer app launching and automation. + + • Spotlight (macOS) + • [41]Alfred + • [42] + • [43]Quicksilver + • [44]Raycast + + • Pressing ⌘Space opens a command palette + • Pressing ⌘⌥C shows clipboard history + +Keyboard control inside specific apps +Keyboard customization functionality living inside individual apps. + + • Photoshop + • DaVinci Resolve + • VS Code + • Nova + • Chrome + + • F1 can be configured to open a custom action in Photoshop + • ⌥M can be configured to mute in Zoom + • ⌘/ opens a command palette in Figma + +Text expansion apps +Stuff that helps specifically with typing text, including access to symbols and +emoji. + + • Text Replacements (macOS) + • [45]Espanso + • [46]TextExpander + • [47]Typinator + • [48]Rocket (emoji selector) + + • Typing “omw” outputs “on my way” + • Typing “$today” outputs today’s date in a nice format + • Typing “$add” outputs shipping address + +Output/Action + +Technically, each one of these has two parts: the “engine” and the +“configurator.” The keyboard firmware running on the keyboard and the firmware +configurator app running on the web are two different things, and that is true +for most that follows. In practice, however, you don’t often deal with this +dichotomy directly. + +Keyboard firmware apps + +These apps control software that lives inside your keyboard (a.k.a. +“firmware”). + +[wooting] [tex] [via] +Wooting app, Tex Shinobi app, and VIA firmware configurator (used by many +keyboards) + +These days, those are typically web apps or specialized desktop apps. On some +keyboards, there is no visible UI and you talk to the keyboards only by +mystical combinations of the Fn key. On other keyboards, the only UI is +mechanical DIP switches. Almost none of these are particularly pleasant in use. + +[dip-switch] DIP switches on my keyboard + +What you can usually do here: + + • Swap modifier keys around. Or, at the very least, allow to change the PC + ordering with the Mac ordering, which are lightly incompatible with each + other. + • Assign key presses to the keys. E.g. the top left key is Q or F1, and so + on. + • Allow one key to output more characters than one. These sequences are + usually called “macros.” + • Decide what should the knobs do. Knobs are usually also keys in disguise – + they typically emit a flurry of identical key presses whenever turned left + or right. + +This is the only place where you will be able to control: + + • Any lights on your keyboard. + • “Layers” of the keyboard – functionality that toggles between different key + assignments. I would not worry too much about it first. + • Specific features unique to your keyboard: optical switches, low-latency + gaming functions, support for stenotyping, and so on. + +A few function keys above F20 are also available, but get a teensy bit trickier +in use. Buyer beware! + +The one thing that’s important: there is a limited number of keys that can +exist. Look at a regular desktop keyboard, and you can already see most of +them. There are a few more function keys than you might think of – F13 to F20 – +and some random stray keys like Switch to Kana. But this is all you get. You +cannot invent a new key, and you cannot send an ASCII or emoji or a Unicode +character because those don’t like to fly in economy over USB. + +But! You can always send an F20 key and then decide what it does on the other +side. You’ll also be able to tell an F20 key on one keyboard from one on +another keyboard. So that gives you a lot of options, but just feels weird – +like a secret strange key alias that exists only to travel across the USB +cable. + +Admit your fingers just ached a bit even just even imagining [49]this kind of a +shortcut. +And below I’ll show you how you can even make it work with other modifier keys +for more options, even though it seems impossible given its nature. + +Wait, you might ask: didn’t you just say above to create a new modifier key +called Hyper? Yes and no. It’s another kind of trickery. You know how you can +combine regular modifier keys as much as you want, and for example assign +something to the extreme combination of ⇧⌃⌥⌘? Neither people nor applications +do that often, because those shortcuts are incredibly unpleasant to press. But +you can easily – via software – make Caps Lock behave the same as holding all +the other modifier keys together. Then, pressing Caps LockD would be the same +as pressing ⇧⌃⌥⌘D, but infinitely more pleasant on your fingers. This is the +convention of a “hyper” key – in the background, it really is pressing all four +of the other modifier keys for you! + +[raycast-hy] [raycast-hy] +Some apps, like Raycast, will allow you to show Hyper in a nice visual way +(enabled in the second screenshot), but this is relatively rare. + +USB side apps + +It’s a bit hard to describe this category; my go-to metaphor is “an app that +lives inside the USB port on your computer.” The inner workings are similar to +keyboard’s firmware, operating on roughly the same terms, but now living inside +your computer. + +Apps in this category: + + • macOS has a built-in small section of settings called Modifier Keys + • [50]Karabiner Elements (my recommendation), [51]Kanata, and [52]KMonad + +This is the only place you can: + + • Do something with “media” or “system” keys – for example, if you want to + control volume in new ways. Those shortcuts get routed to the system right + after this juncture, and keyboard apps later in the process simply don’t + even see them. + • Do things depending on which keyboard did the key come from. (For apps + later in the chain, all the keystrokes will be unattributed.) For example, + F1 key from one keypad can be changed to quietly become ShiftF1 onward, but + F1 from the main keyboard can be left alone. + +My recommendation: Karabiner is free, and generally harmless. You don’t need it +for most things, but if you want to start messing with modifier keys +(especially on more than one keyboard), or do something with function keys, +this is the way. It is interesting to install if only because it has a very +useful event viewer, but its UI can feel a bit rough and intimidating. + +This is where you would split function keys into two halves, if that’s what you +wanted. + +Karabiner will also allow you to do things that firmware allows you to do: +swapping modifier keys, reassigning keys, and adding macros to keys. But my +recommendation is not to do these things here unless absolutely necessary, +because the UI either in firmware apps or in Keyboard Maestro is nicer. + +Beware: Just like Keyboard Maestro feels a bit too at home by immediately +enabling its ⌘Tab alternative, Karabiner might immediately change the meaning +of your function keys. + +Assigning shortcuts to commands + +These apps exist solely to add, change, or remove keyboard shortcuts for +existing app actions. Unfortunately, typically it only means commands you see +in the menus, because macOS doesn’t have a more generalized command system. + +Apps here: + + • macOS has a relatively unpleasant-to-use system where you can disable or + change many of its special system-wide shortcuts (like hiding dock via ⌘⌥D + ), and assign or change shortcuts in other apps, based on their menus. + • [53]CustomShortcuts is a nice free app that allows to assign or change + shortcuts in other apps’ menus. + • KeyClu and KeyCue show you cheat sheets of commands in other apps, in + addition to allowing to change them. I did not have a lot of fun using + them, and I wouldn’t recommend either. + +If you choose to do things the way I do it, you never have to touch this +category except for disabling any system shortcuts – like hiding the dock – +that bother you or that you want to reclaim. Unfortunately, other apps cannot +intercept those before they get dispatched to the operating system, and +rewriting them earlier in the pipeline also doesn’t make sense. + +However, apps in this category have an advantage: If you change a shortcut, it +will show up changed in the menu, which might help you remember it. + +Controlling things like a player piano would + +Apps in this category think about computer operation solely as human interface +events: keys going up and down, mouse cursor moving, trackpad clicks, and +delays in between. + +[closed] [open] +A closed and open player piano + +In response to you pressing the key, they can… pretend to press more keys or +move a mouse to a specific place. They do it quickly and reliably. This simple +automation can go very far, because what else do you do with the computer than +pressing keys and clicking on things? + +You can teach an app to press 6 keys after pressing a key: now you have text +expansion. You can wire an app to press ↓ 30 times after pressing another key: +now you recreated a page down key even if the app doesn’t support it. You can +have an app press ⌘ and Space for you, and then type an app name followed by +Enter – now you can launch anything you want. + +But this is also very limiting, because… what else do you do with the computer +than typing keys and clicking on things? Well, you do a lot of seeing and +thinking. Here, not a lot of seeing and thinking is allowed, or even possible. +You can make the mouse go to a specific place on your screen and simulate +clicking the mouse in order to press a specific button that should be there, +but you will never be fully sure. You can press the keys for the user, but you +won’t understand what happens once those keys are pressed. This category is +“write, but not read.” It’s not as much “fire and forget” as it is “close your +eyes and fire.” + +The apps in this category are: + + • [54]Keyboard Maestro – my recommendation + • BetterTouchTool – I found the UI perplexing and I would not recommend it + +The apps in this category also typically cover the category below (but not vice +versa), so let’s just jump in there. + +Controlling things with commands and logic + +The previous category was apps swatting at the system and its apps. This +category is apps actually talking to them. The apps above were simple-minded; +the apps in this category are multilingual. They know how to use the operating +system’s internal language, they can chat to apps, and they have a rich +internal language of their own. + +It helps me sometimes to think of the previous category as old-time’y “player +pianos” – they will continue mindlessly swinging their hammers up and down to +press the piano keys even if you were to remove the strings. Apps in this +category are more like musicians facing a music sheet: they won’t mimick the +movements and report back you if the piano is broken, if they sat down to the +wrong instrument, if it’s too early or too late to play, or if they’re… missing +their arms. + +In this command-and-logic category, instead of moving a cursor 20 pixels west +and 40 pixels south to click a button, you can ask for a button by name and +activate it; this will work even if the button moves, and you will be warned if +the button is missing altogether. Instead of pressing ↓ 30 times, the app can +invoke a scrollDown function. Instead of mimicking a human being and +fake-pressing ⌘Space and then fake-typing the name of a program to launch it, +an app in this category can ask the operating system to launch it, +programo-a-programo. + +Since communication with the system goes both ways, the app will also get +feedback, and it can relay it back to you. It can tell you if it can or cannot +find the program you requested to launch, and your logic can react to that +knowledge. This also allows you to make conditional decisions: do different +things whether some software exists or doesn’t, if the system is in a certain +state, if you pressed some other key just before this one, and so on. + +This is typically the right, smart way to do everything. So if we have this, +why is the previous lizard-brain option even there? There are many reasons: + + • It’s sometimes simpler to do a dumb thing and just fake-press some keys + instead of learning an app’s specific language and rules. + • The “player piano” method works for all apps, even those that don’t have a + way to talk to on a higher level. + • Even in apps with very rich communication vocabulary, some verbs might be + forgotten. But the player piano method can travel anywhere your key presses + and mouse clicks do. + +There is a bit of an art of knowing which approach is better to take. Often, +you will get to mix and match: for example, smart logic to determine which app +is running, and then pretending to press ⌘T instead of asking to “open new tab” +via official diplomatic channels. + +Apps in this category and the category above: + + • [55]Keyboard Maestro + • [56]Keyboard Cowboy + • BetterTouchTool + +Apps only in this category: + + • macOS has built in Shortcuts and Automator (an older version of the + Shortcuts concept) + • in macOS, you can also communicate with apps by writing scripts in + AppleScript + +Other apps: + + • [57]Alfred (Workflows) + +Command palettes and other visible UI + +The apps in this category are somewhat similar to the apps above, but they +approach the challenge from a slightly different viewpoint: they want to create +the best command line for your computer. On your Mac, you already have a +user-friendly Spotlight under ⌘Space, and the extremely unfriendly Terminal. +There are many third-party apps that try to find a different take somewhere in +between these two. + +[command-ba] LaunchBar, Alfred, Spotlight, and Raycast + +While the above command-and-logic apps allowed you to automate things quietly +throughout the operating system, this category gives you one specific place you +invoke via one perfect shortcut, and a lot of magical things happen only inside +that place. + +The options here might be similar to the category above: building complex +logic, communicating with the apps and the system, chaining many repetitive +events. Some of these apps throw in nice sweeteners, like better clipboard +control or window management options. Some will also cover other categories, +for example assigning shortcuts to commands, as a bonus. + +Apps in this category: + + • Spotlight (built into macOS) + • [58]Alfred, [59]LaunchBar, [60]Quicksilver, and [61]Raycast + +Some apps in the previous category, like Keyboard Maestro, also do things here +– but with less success. + +Keyboard customization inside individual apps + +Some specific apps, especially large ones, offer built-in versions of +functionality above. Typically, it’s these three categories: + + • assigning shortcuts to its own actions + • control via commands and logic + • command palettes + +Some examples: + + • many apps like Sublime Text, Figma, and Linear have their own command + palettes + • Chrome allows you to assign keyboard shortcuts to launch extensions (or + specific actions extensions expose) + • Sublime Text allows you to record and replay keystrokes + • Zoom allows you to change its shortcuts and even make them “global” (it + understands the app is often in the background). + +This might be the only reasonable option for single letter key and Shift +shortcuts. These are always very context dependent – ShiftH in the app can flip +horizontally, but ShiftH in a text field needs to output a letter – and much +harder to program outside of the app where the context might be gone. + +These are usually better integrated than anything on the “outside,” as they can +have more awareness of the conditions of the underlying app, can offer access +to all the commands (even those not in the menus), and add unique features (for +example, awareness of different modes). But of course, each one is a separate +system with a unique interface you have to learn, and the UI quality varies a +lot. + +[davinci-re] [nova] [vs-code] [sublime-te] +Keyboard setting screens in DaVinci Resolve, Nova, Visual Studio Code, and +Sublime Text + +Text expansion + +These apps are specifically for dealing with text and typing – e.g. any place +where you see a blinking text cursor. + +Behind the scenes, smarter player pianos press ⌥Backspace to delete the entire +word, and then put stuff in the clipboard and paste from there in one go, to +avoid seeing all the little steps. But the challenges remain. + +Text expansion can exist on a lower “player piano” level, but it will be +appropriately naïve: if you type “omw”, the app then has to fake press +Backspace to delete what you already typed, and then type “on my way” for you. + +Some text expansion apps do this, others integrate into the system on a higher +level (with visible UI and more nuanced options). Either way specialized text +expansion apps are typically simpler to use, just because, well, they are +simpler. + +“Player piano” text expansion vs. integrated text expansion + +I don’t use this category as much, so I have no strong recommendations, but +here are some apps I heard people like: + + • macOS has native text expansion (called Text Replacements). It’s also + synced with iPhone and other devices. + • [62]Espanso, [63]TextExpander, and [64]Typinator + +Some of these apps also throw in a nicer character/emoji selector, and there +are even specific emoji selectors or expanders, like [65]Rocket. + +Choose your own adventure + +This concludes the “choose your own adventure” portion! + +Okay, we are done with theory! And now, onto examples… + +That’s it! + +This can all get pretty addictive, or at least it was that for me. I’ve been +trying all sorts of interesting things, interactions I always wanted to try, +and new combinations of things. + +Here is what I learned, summarized: + + • Don’t overthink the system. Start with just one or two things that seems + fun to you. + • Break all the rules. You’re designing for the audience of one. + • Listen to your fingers. If they already like something, add more of that. + • Optimize for what’s fun to press physically; don’t create complex + incantations that contort your hands. + • Don’t underestimate seemingly tiny improvements, as they can add up + quickly. + • Put related things side by side, or under modifier keys. + • Use spatial mapping (things on the left in real life are on the left on + your keyboard). + • If you can, split the keys into “for the entire system” and “for the + current app” to make it easier for yourself. + • You can have more than one key for one action, and more than one action for + one key. + • Make shortcuts “global” so you can press them at any time you want. + • Don’t overthink automation. Automation is not the be all end all, and + sometimes you want to slow down on purpose, just to enjoy the ride. + • Above all, have fun! + +Things can get more complex than above, of course. All of this is software +running on your computer, and software talks. Karabiner actually has some +system logic to do things depending on which app is in front. Karabiner can +send things directly to Keyboard Maestro and Keyboard Maestro to Karabiner, in +violation of the flow in the chart above. If you are so inspired, you can even +quietly open an invisible (headless) Chrome to open your keyboard’s web page to +change its lights or layers! + +My last recommendation would be to write yourself a little cheat sheet on paper +somewhere before the shortcuts truly become second nature. + +I hope you enjoyed this guide. Please [66]let me know what you come up with or +if you have any questions! + +Copyright © Marcin Wichary + +Published on 12 May 2026. + +[67][68][69][70] + +Thank you to Ezra Spier for support and feedback on earlier versions of this +essay. + +Thank you to everyone working on keyboard-related tools in general. + +More keyboard stories: + + • [71]I don’t know what is Apple’s endgame for the Fn/Globe key, and I’m not + sure Apple knows either + • [72]The primitive tortureboard + • [73]The day Return became Enter + + +References: + +[2] https://aresluna.org/ +[3] https://wooting.io/uwu +[4] https://www.keebmonkey.com/products/megalodon-triple-knob-macro-pad +[5] https://worklouder.cc/creator-micro-2 +[6] https://www.8bitdo.com/retro-18-mechanical-numpad/ +[7] https://www.keychron.com/search?options%5Bprefix%5D=last&q=numpad +[8] https://www.eweadn.com/products/eweadn-nk20-mechanical-macropad?variant=45446876496025 +[9] https://web.archive.org/web/20190124214556/https://www.bxfoundry.com/home/30-bx-10-cyclops-usb-controller.html +[10] https://www.keyboardmaestro.com/ +[11] https://karabiner-elements.pqrs.org/ +[14] https://www.houdah.com/customShortcuts/ +[15] https://aresluna.org/frame-of-preference/ +[16] https://youtu.be/iUhu7sN474o +[17] https://archive.org/details/wicharytypewriter?sort=title +[18] https://aresluna.org/fn/ +[19] https://unsung.aresluna.org/how-to-shoot-a-screen-using-a-board-of-keys/ +[20] https://www.youtube.com/watch?v=qKs_-uN6SSQ +[21] https://unsung.aresluna.org/adjust-in-smaller-steps/ +[22] https://en.wikipedia.org/wiki/Bookmarklet +[23] https://unsung.aresluna.org/deterministic-vs-idempotent/ +[24] https://unsung.aresluna.org/ +[25] https://unsung.aresluna.org/raycasts-confetti-cannon/ +[26] https://aresluna.org/key-in-sight/#the-life-of-a-keystroke +[27] https://aresluna.org/key-in-sight/#thats-it +[30] https://karabiner-elements.pqrs.org/ +[31] https://github.com/jtroo/kanata +[32] https://github.com/kmonad/kmonad +[33] https://www.houdah.com/customShortcuts/ +[34] https://www.keyboardmaestro.com/ +[35] https://folivora.ai/ +[36] https://www.keyboardmaestro.com/ +[37] https://github.com/zenangst/KeyboardCowboy +[38] https://folivora.ai/ +[39] https://www.hammerspoon.org/ +[40] https://www.alfredapp.com/ +[41] https://www.alfredapp.com/ +[42] https://www.obdev.at/products/launchbar +[43] https://qsapp.com/ +[44] https://www.raycast.com/ +[45] https://espanso.org/ +[46] https://textexpander.com/ +[47] https://ergonis.com/en/typinator/features/ +[48] https://matthewpalmer.net/rocket/ +[49] https://unsung.aresluna.org/save-for-web-claws/ +[50] https://karabiner-elements.pqrs.org/ +[51] https://github.com/jtroo/kanata +[52] https://github.com/kmonad/kmonad +[53] https://www.houdah.com/customShortcuts/ +[54] https://www.keyboardmaestro.com/ +[55] https://www.keyboardmaestro.com/ +[56] https://github.com/zenangst/KeyboardCowboy +[57] https://www.alfredapp.com/ +[58] https://www.alfredapp.com/ +[59] https://www.obdev.at/products/launchbar +[60] https://qsapp.com/ +[61] https://www.raycast.com/ +[62] https://espanso.org/ +[63] https://textexpander.com/ +[64] https://ergonis.com/en/typinator/features/ +[65] https://matthewpalmer.net/rocket/ +[66] https://aresluna.org/ +[67] mailto:[email protected] +[68] https://mastodon.online/@mwichary/116562952973195259 +[69] https://bsky.app/profile/aresluna.org/post/3mlofastzhc2u +[70] https://aresluna.org/main.rss +[71] https://aresluna.org/fn +[72] https://aresluna.org/the-primitive-tortureboard/ +[73] https://aresluna.org/the-day-return-became-enter diff --git a/static/archive/interconnected-org-zhcj46.txt b/static/archive/interconnected-org-zhcj46.txt @@ -0,0 +1,414 @@ + +[1]Interconnected + +A blog by Matt Webb + + • [2]About + • [3]Archive + • [4]Work + +Subscribe for $0 + + • [5]Email + • [6]RSS feed + • [7](What is a feed?) + +Unoffice Hours + + • [8]Book a call + • [9](What is this?) + +a.k.a. genmon + + • [10]Bluesky + • [11]X/Twitter + • [12]Insta + • [13]Mastodon + • [14]LinkedIn + +Building the AI clock + + • [15]Check out Poem/1 + +Resident: vibe coding firmware (our new sandbox library for ESP32 devices) + +14.14, Wednesday 20 May 2026 [16]Link to this post + +We’re open sourcing Resident, our library for running AI-authored code on +microcontrollers – with no compile step and no firmware flashing. + +It’s our twist on vibe coding firmware, built for instantly loading new device +functionality coded by end users. It’s aimed at device developers, like us. We +use Resident in all our work. + +(We = Inanimate.) + +[17]Resident gives you a code sandbox on ESP32 devices and a driver API to +provide hardware control and events. So an end user can push an app over Wi-Fi +that instantly turns their clock into an interactive pill timer (for example) +but the app can’t run probes on the home Wi-Fi network. + +It comes bundled with a set of Claude skills. I told Claude about the +capabilities of a compatible dev kit and asked it to push a simple app. Here it +is: + +[hello-resi] + +At Inanimate, we believe that on-device sandboxes are an essential low-level +primitive for AI agents in the real world. + +The announcement is [18]over on Lab Notes but I want to take a moment to +connect this to some previous themes… + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Look, I want to bring software into my room. + +Like: if I’m working with Claude Code and I step away from my keyboard, it +should be able to give me updates on what it’s working on by taking over my +desk clock, and ping its permission requests to the gumstick device I have in +my pocket for me to accept/decline while I’m making tea. Untether me from my +desk! (btw I built this, it was awesome.) + +Or - more prosaically - why can’t I yell at my stove as I’m leaving the house +in the morning oh I forgot I’m roasting a chicken that needs to be ready for +7pm and have it look up timings and push me a notification when it’s +pre-heating, and show a custom basting timer app on its 14-seg LED display. + +`Why can’t I point at a lamp and say ‘on’ and the light come on?' – [19]I was +asking in 2020. + +So half of the solution here is AI: LLMs are super good at translating intent +into action. I use regular language and the computer will [20]Do What I Mean +(2025). + +But the other half is a problem: how does this actually work? Where does the +software run? + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Every device needs to be able to run user code, that’s the answer. + +I’ve been bouncing off this since 2023 [21]when I put an LLM in charge of a +smart home (using tech that we now call agents, but then was my implementation +of the ReAct pattern from a paper out of Princeton and Google Research). + +In a nutshell, let’s say you press a button on your desk clock and your AI +agent has to decide in the moment what to do with that. It won’t work, it’s too +slow. Cognitively, an interface has to respond inside 150ms or it is no longer +instant – but the AI is a network hop away. + +Ok so let’s remove the network hop. Let’s pretend we have edge AI: a +GPT-4-equiv AI as a component in every physical thing; ubiquitous intelligence +is coming and `a Feynmann-level light switch could guess your intentions pretty +well,' [22]that was was my guess in 2023. + +It’s not an outrageous extrapolation! [23]Taalas is baking LLMs into silicon +and delivers `17k tokens per second per user on Llama 3.1 8B' ([24]try it here, +e.g. 4,000 words on Hamlet as a space opera, it’s wild it’s so instant). So +GPT-4-equiv is a matter of time. + +Even with that speed, it turns that inference is not enough. To Do What I Mean, +you still need to import user context for personalisation and grounding. But +memory, Gmail, Wikipedia and the rest are still mostly in the cloud. That +network hop again. + +So AI can’t be inside the event loop, not if you want really great on-device +interactions. + +Instead – let the AI write device code. That’s the approach we’ve found. + +Take that toy example of a roast chicken basting timer on the display of my +stove. My AI agent should be able to dynamically write code for that +interactive app, and have that app code executed on the stove itself. + +I’m not saying that the AI needs to vibe-code firmware. + +Firmware is the code that runs on device microcontrollers: you author it and +compile it and you flash it and from that point on, it never changes. AI agents +can vibe firmware (very happily). But I’m not sure I want to load code onto my +stove that has boundless control over the heating element and the network stack +and whatever other low-level capabilities are managed by the firmware itself. +We’ve already had [25]smart fridges sending spam email (BBC News, 2014), no +more thanks. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Instead of firmware, the AI can run code in sandboxes. + +Cloudflare made the case for sandboxes in March this year [26]when they +introduced dynamic workers: + + Last September we introduced Code Mode, the idea that agents should perform + tasks not by making tool calls, but instead by writing code … + + You can’t just eval() AI-generated code directly in your app: a malicious + user could trivially prompt the AI to inject vulnerabilities. + + You need a sandbox: a place to execute code that is isolated from your + application and from the rest of the world, except for the specific + capabilities the code is meant to access. + + Sandboxing is a hot topic in the AI industry … + +We asked ourselves: + +What if, when we allow an AI agent to spread its arms and stretch its legs in a +room, it could inhabit devices by writing code that runs in an on-device +sandbox, a sandbox that gives access to buttons and screens but not the network +stack, and the app code could load and run instantly? + +That’s Resident. It provides a code sandbox for ESP32 devices, and a toolchain +for AI agents to write apps that target that sandbox. + +At Inanimate, we use Resident for all our product prototyping. + +And it will be at the heart of our future products. + +Look, it may seem wildly disproportionate to write code to turn on a lamp. + +But what are computers for? They do the hard work to make it easy for us. So +this approach scales well from basic on/off control to… well, it turns out +that, now we have this sandbox, we can compose all kinds of useful experiences +that take over an entire room – and also weird and wonderful interactive ones +that still work when you pull the network cable. + +(An app arrives over the network but then the network is no longer required. +Resident is built on our messaging library [27]Courier which includes UDP +multicast for local inter-device messaging even when internet connectivity +drops.) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +We’re opening Resident today as an alpha (v0.5.0) and open sourcing it under +the highly permissive MIT license. Just include our copyright notice with any +modifications. + +Technically, we’re adding a Lua runtime to your ESP32 device. (Lua is a +language designed to be embedded.) + +We love Espressif’s ESP32 microcontroller family because it has a unique span +in the ecosystem: it is used by individual makers, new hardware startups, and +in production at real scale. It has built-in Wi-Fi and supports its native +framework esp-idf and Arduino too, which is great for quick prototyping. + +Resident gives you an API to add extensions to that Lua runtime: hardware +drivers. Those managed capabilities are what makes it a sandbox. So the apps in +the sandbox can respond to events that your button driver injects, and they can +write to the display via a module added by your display driver. + +The apps can be hot loaded at runtime. The way we have it wired up, you push +app code down a websocket to the device and it run immediately in the sandbox. + +Adding Resident is straightforward during development: bring up your new device +as normal, then point your coding agent at docs/start-building.md. It’ll walk +you through adding the sandbox and writing the drivers. + +Resident comes bundled with: + + • Connectivity: websockets, JSON messaging, and easy Wi-Fi config + • A default back-end server at resident.inanimate.tech so you can easily push + new apps and events – use the example code to build out your own back-end + when you’re ready + • A collection of Claude skills to create, validate and push new apps to your + devices (and even write device documentation) + • Example projects. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Want to try Resident now? + +Ahead of developing your new device, pick up an [28]M5StickS3. These are made +by M5, I talked about them [29]when we announced Courier. + +The M5Stick is a dev kit that has an ESP32 with a screen, battery, couple of +buttons, buzzer and IMU. You can bring it up using Arduino pretty simply. Then +add Resident and start writing apps. [30]We have an example project. + +Want to get going even faster? + +You don’t even need hardware… + +The [31]Try it now section of the Resident homepage has a M5Stick simulator, +running the Resident sandbox in-browser. + +Drag and drop an app onto the simulator to see it run. + +Or even: install the Claude skills, tap the button on the webpage to make the +simulator live, and create apps from your local Claude Code session. The +in-browser simulator will update live and run your app. + +[resident-s] + +Hey, deep cut reference alert: + +Back in 2021 I went on a dive into files: [32]Golems, smart objects, and the +file metaphor. + +What would it mean to drag and drop a file onto a lightbulb? I asked. `Do I +literally mean that the lightbulb needs a little slot like the golem’s mouth, +into which you insert your instructions stamped on microfiche?' + +This is my answer haha + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Resident is what we’ve been using to prototype products and use cases at +Inanimate. + +We believe that one day all products will work this way. + +For more info, the GitHub, and to try it now: [33]Resident. + +For updates: [34]subscribe to Lab Notes. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +More posts tagged: + + • [35]inanimate (6 posts) + +If you enjoyed this post, please consider sharing it by email or on social +media. [36]Here’s the link. Thanks, —Matt. + + +Most recent posts + + • [37]How global logistics got me over my fear of personal agents 30 May 2026 + • Resident: vibe coding firmware (our new sandbox library for ESP32 devices) + 20 May 2026 (This post) + • [38]Filtered for bad addresses and good emotions 15 May 2026 + • [39]I want my MTV 8 May 2026 + • [40]We need RSS for sharing abundant vibe-coded apps 29 Apr 2026 + • [41]The Wind in the Willows and reading out loud 24 Apr 2026 + • [42]Courier: real-time messaging for ESP32 with batteries included (new + library) 21 Apr 2026 + • [43]Headless everything for personal AI 18 Apr 2026 + • [44]mist is now open source and looking for interop 10 Apr 2026 + • [45]A sleep aid 3 Apr 2026 + • [46]An appreciation for (technical) architecture 28 Mar 2026 + • [47]Filtered for home security 20 Mar 2026 + +Continue reading: [48]All in 2026 + +streak New posts for 322 consecutive weeks (see: [49]blogging tips) + +New? Start here: [50]Best of 2025 (also [51]2024, [52]2023, [53]2022, [54]2021, +[55]2020) +Or explore the archives: [56]On this day + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Archive + + • [57]2026 23 posts + • [58]2025 61 posts + • [59]2024 60 posts + • [60]2023 68 posts + • [61]2022 96 posts + • [62]2021 128 posts + • [63]2020 118 posts + • [64]2019 23 posts + • [65]2018 47 posts + • [66]2017 22 posts + • [67]2016 48 posts + • [68]2015 88 posts + • [69]2014 30 posts + • [70]2013 6 posts + • [71]2012 27 posts + • [72]2011 76 posts + • [73]2010 2 posts + • [74]2009 2 posts + • [75]2008 59 posts + • [76]2007 20 posts + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +[77][ ] Search +Since February 2000. Copyright © 2026 Matt Webb. + +p.s. here’s [85]my blogroll and the [86]colophon. + +Quiet mode[87][ ] + +References: + +[1] https://interconnected.org/home/ +[2] https://interconnected.org/ +[3] https://interconnected.org/home/2026/05/20/resident#archive +[4] https://www.actsnotfacts.com/ +[5] https://buttondown.com/genmon +[6] https://interconnected.org/home/feed +[7] https://aboutfeeds.com/ +[8] https://calendly.com/mwie/30min +[9] https://interconnected.org/home/2020/09/24/unoffice_hours +[10] https://bsky.app/profile/genmon.org +[11] https://x.com/genmon +[12] https://www.instagram.com/genmon/ +[13] https://mastodon.social/@genmon +[14] https://www.linkedin.com/in/genmon/ +[15] https://poem.town/ +[16] https://interconnected.org/home/2026/05/20/resident +[17] https://resident.inanimate.tech/ +[18] https://news.inanimate.tech/p/lab-notes-drum-loops-prototyped-as-oranges +[19] https://interconnected.org/home/2020/05/26/voice +[20] https://interconnected.org/home/2025/08/29/dwim +[21] https://interconnected.org/home/2023/04/26/lares +[22] https://interconnected.org/home/2023/10/06/ubigpt +[23] https://taalas.com/products/ +[24] https://chatjimmy.ai/ +[25] https://www.bbc.co.uk/news/technology-25780908 +[26] https://blog.cloudflare.com/dynamic-workers/ +[27] https://github.com/inanimate-tech/courier +[28] https://docs.m5stack.com/en/core/StickS3 +[29] https://interconnected.org/home/2026/04/21/courier +[30] https://github.com/inanimate-tech/resident/tree/main/examples/m5stick-demo +[31] https://resident.inanimate.tech/#try-it-now +[32] https://interconnected.org/home/2021/02/01/golems +[33] https://resident.inanimate.tech/ +[34] https://news.inanimate.tech/ +[35] https://interconnected.org/home/tagged/inanimate +[36] https://interconnected.org/home/2026/05/20/resident +[37] https://interconnected.org/home/2026/05/30/fedex +[38] https://interconnected.org/home/2026/05/15/filtered +[39] https://interconnected.org/home/2026/05/08/mtv +[40] https://interconnected.org/home/2026/04/29/syndicating-vibes +[41] https://interconnected.org/home/2026/04/24/willows +[42] https://interconnected.org/home/2026/04/21/courier +[43] https://interconnected.org/home/2026/04/18/headless +[44] https://interconnected.org/home/2026/04/10/open-mist +[45] https://interconnected.org/home/2026/04/03/sleep +[46] https://interconnected.org/home/2026/03/28/architecture +[47] https://interconnected.org/home/2026/03/20/filtered +[48] https://interconnected.org/home/2026 +[49] https://interconnected.org/home/2020/09/10/streak +[50] https://interconnected.org/home/2026/01/03/top-posts +[51] https://interconnected.org/home/2024/12/30/top-posts +[52] https://interconnected.org/home/2023/12/22/top-posts +[53] https://interconnected.org/home/2022/12/21/top_posts +[54] https://interconnected.org/home/2021/12/23/top_posts +[55] https://interconnected.org/home/2020/12/17/top_posts +[56] https://interconnected.org/home/on-this-day +[57] https://interconnected.org/home/2026 +[58] https://interconnected.org/home/2025 +[59] https://interconnected.org/home/2024 +[60] https://interconnected.org/home/2023 +[61] https://interconnected.org/home/2022 +[62] https://interconnected.org/home/2021 +[63] https://interconnected.org/home/2020 +[64] https://interconnected.org/home/2019 +[65] https://interconnected.org/home/2018 +[66] https://interconnected.org/home/2017 +[67] https://interconnected.org/home/2016 +[68] https://interconnected.org/home/2015 +[69] https://interconnected.org/home/2014 +[70] https://interconnected.org/home/2013 +[71] https://interconnected.org/home/2012 +[72] https://interconnected.org/home/2011 +[73] https://interconnected.org/home/2010 +[74] https://interconnected.org/home/2009 +[75] https://interconnected.org/home/2008 +[76] https://interconnected.org/home/2007 +[85] https://interconnected.org/home/blogroll +[86] https://interconnected.org/home/2024/10/28/colophon diff --git a/static/archive/mike-puddingtime-org-xjcclg.txt b/static/archive/mike-puddingtime-org-xjcclg.txt @@ -0,0 +1,87 @@ +[1]hi, it's mike [2]Posts [3]Tags [4]Search ☾ night [6]Home / [7]Posts / The +ThinkDeck + +The ThinkDeck + +May 24, 2026 · 3 min read · 488 words + +I gave a recipe for a super-minimal “writerdeck” a try, but ended up with +something less minimal yet still simple. + +I wanted to just do the recipe lined out in [8]this post from Veronica Explains +. It’s just “drop into a tty and use tmux to fire up an editor and a wiki.” + +I had some problems with Debian, mainly owing to me doing too minimal an +initial install. So I backed out and came at it with Fedora, and that worked a +little better. But I realized pretty quickly that my writing process is not +“sit down to a completely clear writing surface and begin to type.” + +When I write I am probably in a few browser tabs, looking up references, +checking assumptions, etc. A lot of “ADHD-friendly” approaches assume that the +primary attentional issue is one of distractibility. But writing is something +of a refuge for me because it’s somewhere I can safely hyper focus: Even if I +have ten tabs open as I write, those ten tabs are in service of writing +something I am very, very focused on. I don’t find myself drifting around +between distracting websites or doomscrolling. I am writing, which is something +much more than just typing out words: It’s thinking, learning, examining, +introspecting. + +That reframed the question of “what is a writerdeck” for me. + +The other issue with the “just go live in a tty” matter is that the typography +isn’t great on the best day. + +But I still like the idea of a machine you can’t do quite as much with. +Something that, when you pick it up, is really only meant for one thing, and +that is configured to direct you into that thing. + +So rather than starting in a tmux session in a tty, I decided to allow X.org +into the picture, but using [9]i3 as the starting point. + +I don’t really want a tiling wm, exactly. Something I learned from dialing in +my tmux config is that I like to have one app on the screen at a time. i3 makes +that possible. + +My i3 config just opens me up into a fullscreen local ghostty on one workspace, +a fullscreen ghostty ssh’d into my mini on the next, and a fullscreen browser +with my custom startpage on the third. I can get to each with mod-1 through +mod-3 and never really see the underlying wm or desktop, because I don’t really +need or want to. + +If I want a quick peek at battery status, date, time, etc. I can mod-f to let +the i3 status bar peek through. + +The donor machine, btw, is a ThinkPad X1 Carbon (7th Gen). It’s got a Core i5 +10th-gen CPU with 16GB of RAM and a 512GB SSD. You can get one at this spec or +a gen later for under $300 if you look around. The hardware is very well +understood by any modern Linux. The display is gorgeous. + +I’m still tweaking the config a little bit. Once it feels a little more gelled +I’ll put it in a gist. + +Tagged: [10]Writerdeck, [11]Linux, [12]Thinkpad, [13]Fedora, [14]I3 +[15]← Adventures in DAV +[16]mastodon · [17]github · [18]linkedin · [19]pix · [20]email +© 2026, mike + +References: + +[1] https://mike.puddingtime.org/ +[2] https://mike.puddingtime.org/posts/ +[3] https://mike.puddingtime.org/tags/ +[4] https://mike.puddingtime.org/search/ +[6] https://mike.puddingtime.org/ +[7] https://mike.puddingtime.org/posts/ +[8] https://veronicaexplains.net/my-first-writerdeck/ +[9] https://i3wm.org/ +[10] https://mike.puddingtime.org/tags/writerdeck/ +[11] https://mike.puddingtime.org/tags/linux/ +[12] https://mike.puddingtime.org/tags/thinkpad/ +[13] https://mike.puddingtime.org/tags/fedora/ +[14] https://mike.puddingtime.org/tags/i3/ +[15] https://mike.puddingtime.org/posts/2026-05-15-adventures-in-dav/ +[16] https://hachyderm.io/@mph +[17] https://github.com/pdxmph +[18] https://www.linkedin.com/in/michaelhallpdx/ +[19] https://pix.puddingtime.org/ +[20] mailto:[email protected] diff --git a/static/archive/veronicaexplains-net-sk5zao.txt b/static/archive/veronicaexplains-net-sk5zao.txt @@ -0,0 +1,420 @@ +[1] Veronica Explains + + • [4]About + • [5]FAQ + • [6]Contact + • [7]RSS + +[9]Sign in [10]Subscribe +[11]intentional tech + +It's time to talk about my writerdeck + +[12] vkc + +[13]vkc + +23 May 2026 — 10 min read +[14] Share +A picture of a laptop with a tty screen running vim, the screen is filled with +the words from a video script. + +tldr: + + • I installed console-only Debian on an old laptop (no desktop OS at all) + • I added some packages to make it work better for writing: + □ network-manager for connecting to hotspots while I'm away + □ kmscon for custom fonts and more than 16 colors in the tty + □ tmux for a nice status bar and rudimentary screen tiling, as well as + acpi and light for battery and backlight details, respectively + □ neovim as my editor and vim-vimwiki to give myself a personal wiki + □ syncthing to sync and backup my work + +I have an attention problem. + +A couple of weeks ago, I decided to convert my old laptop into a [15]writerdeck +, a dedicated writing device free from the distractions of the modern internet. + +Lots of folks build really elaborate offline devices for this, and I'd love to +do that... someday. Right now I have no shortage of projects and the point is +to get writing, so I used what I had: a six-year-old laptop which still runs +great, has plenty of power, but isn't getting much use anymore. + +Crucially, this laptop has an excellent keyboard, and a matte screen, which +makes it awesome to type on for long stretches, and functional enough in the +daylight (I like to sit outside with my dog and write). It's also a [16] +System76 Galago Pro (not sponsored), which means it's already Linux friendly +and has great support in the kernel. + +Setting up a tty instead of a desktop + +Now, you could certainly just use a regular desktop OS and keep it offline, +although that's easier said than done. I don't think you can fully remove the +browsers from a modern Mac or Windows PC. At least not in a supported way. + +Of course, I'm a Linux user, and I have any number of options. I could have +gone with a simple desktop or window manager and just not installed a browser, +but I wanted something that really broke the desktop OS muscle memory and +forced me into thinking about my words with intention. + +I opted for a tty-based setup, using [17]Debian (Trixie at the time of +writing). Console only- no x11 or Wayland, no desktop getting in my way. + +Installing Debian is easy enough. I use the text-based installer mode, and for +this writerdeck, I opted to skip full-disk encryption (there's nothing on this +device that isn't going to be public anyway). + +Folks always tell me they get hung up on things because they don't set +themselves up with sudo on Debian. If you're coming from Mint or Ubuntu or +virtually any other desktop-oriented distro, this could trip you up. If you +want to use sudo for admin tasks, skip adding a root password. That'll disable +root and set you up as a sudo user. + +A Debian TUI installer screen showing the "set up users and passwords" dialog +(for setting a root password).Leave this blank if you want to use a sudo user! +A lot of folks don't know about this quirk and get into trouble if they're +coming from other distros. + +On the desktop setup screen, I chose to remove all desktop features, because +again, I want this thing to be a minimal device. Just me and the words, no GUI +getting in my way. + +A Debian TUI installer screen showing the "software selection" dialog (for +installing a desktop environment).I removed the selection for "Debian desktop +environment" and "GNOME" here. This way it's just a tty. + +When things wrap up, you'll be greeted with a bland console login. Perfect +place to get started. + +A Debian tty login prompt. Black background with a login prompt in small white +text.It's boring. Perfect. + +Installing network-manager + +After signing in for the first time and making sure I was up-to-date with a +quick sudo apt update and a sudo apt upgrade, I chose to replace the regular +network stack with the network-manager package. Mainly to get access to the +very good curses tool nm-tui for connecting to networks. + +nm-tui is a thousand times easier than editing config files for setting up +network devices. And while I will be working mostly offline with this device +when I'm away from home, I do appreciate the ability to connect it to the +network to back up files should the need arise. + +After installing network-manager with sudo apt install network-manager, you can +use nm-tui to scan for available Wi-Fi networks and get hooked up. Depending on +your hardware, you might also have WAN access here. Pretty cool. + +A network manager TUI screen. It's a curses screen that offers a small amount +of network configuration options.Having a TUI for networking is a nice +quality-of-life improvement. + +Installing neovim and kmscon + +I couldn't wait any longer, I installed neovim as soon as I could with sudo apt +install neovim. I didn't want to edit with nano. Nothing personal, I'm just a +vim user all the way now. + +Normally I use traditional vim but I opted for neovim as I'm trying to get to +know it a bit more. + +Then, I installed kmscon, which for Debian Trixie needed to be added from +backports. + +First, I updated my Debian source list by editing the file at /etc/apt/ +sources.list to add the following two lines: + +deb http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware +deb-src http://deb.debian.org/debian/ trixie-backports main contrib non-free non-free-firmware + +A quick sudo apt update and then I can simply run sudo apt install -t +trixie-backports kmscon. This will install the kmscon package from backports, +as well as its dependencies, and set it to automatically start on boot. Next +reboot, you'll see the familiar tty, but now it's scalable with ctrl-plus and +ctrl-minus, like most modern web browsers. + +From here, I have a totally functional writerdeck. I could be done here and be +reasonably satisfied with an offline, pleasant writing experience. But I wanted +a few more nicities which I've grown accustomed to. + +tmux for multiplexing and a pretty status bar + +Next, I installed tmux for basic terminal tiling and a pretty status bar. This +is packaged for Debian (and virtually everyone else), and is installed with +sudo apt install tmux. + +I also installed acpi for battery details, and light to control the screen +backlight. You can install these at the same time with sudo apt install acpi +light. I set these up in my .tmux.conf file, which is kept in your home +directory. Here's how I used them. + +ACPI for battery readouts + +Once the acpi package is installed, you should be able to see your battery with +acpi -b (assuming your laptop has a battery which is detected with acpi, which +has worked so far on every laptop I've tried in my house). + +So, to get the specific percentage and nothing more, you can pipe acpi -b into +grep like so: + +acpi -b | grep -m1 -o -P '.{0,2}%' + +This grep is a bit hard to understand, so let's break it down: + + • -m1 says stop reading the file after one line. I did this because some + laptops I've used have multiple batteries, and I only care about the + primary battery. You can probably leave this out if acpi -b only returns a + single line. + • -o prints only the matched parts of the line. I don't want a large printout + with the remaining time. You might! + • -P interprets the pattern as a Perl-compatible regular expression. Then '. + {0,2}%' gets us the percent sign and the two numbers preceding the percent. + (This won't show "100%" but I can live with that, because this laptop + doesn't get there anymore.) + +I wanted to replace the default details in the tmux status bar with a battery +readout, so I do so with the following in my .tmux.conf: + +# give me a battery readout instead of the time +set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')" + +Light for brightness + +Next, we can use the very simple light command we installed earlier to control +the brightness. On my laptop, F8 and F9 have brightness indicators printed on +the keys, so it's a perfect fit. + +light -U 10 decreases the brightness by ten percent, and light -A 10 increases +it. + +So, to bind F8 and F9 to decrease/increase brightness control, I simply add +this to my .tmux.conf: + +# keybinding for brightness +bind -n F8 run-shell 'light -U 10' # decrease +bind -n F9 run-shell 'light -A 10' # increase + +Now, next time I start tmux, I'll have brightness controls. Very neat! + +Additional tmux customization + +Lastly, I like the status line for tmux at the top of the screen, because +neovim puts a status line at the bottom of the screen. That's achieved by +adding set -g status-position top to the .tmux.conf file. + +Also, I have a habit of specifying the color. I think it's green by default but +I set it anyway (I might change it in the future, who knows) with set -g +status-style bg=green. + +So, my final tmux.conf looks like this: + +# bar position and color +set -g status-position top +set -g status-style bg=green + +# keybinding for brightness +bind -n F8 run-shell 'light -U 10' # decrease +bind -n F9 run-shell 'light -A 10' # increase + +# give me a battery readout instead of the time +set-window-option -g status-right "#(acpi -b | grep -m1 -o -P '.{0,2}%')" + +This isn't a tmux lesson, but by default, to do a split, you use Ctrl-B to +break out of regular mode and into the tmux command mode, and then the % key to +split vertically, or " to split horizontally. Ctrl-B, then an arrow will move +your focus between panes. + +Someday, I'll do a formal tmux lesson. Moving on! + +neovim and vimwiki + +I know a lot of folks won't want to use neovim or vim, opting instead for emacs +or helix or micro or nano or blammo or something else I didn't mention (but +someone's about to). + +That's great. I'm happy for you. I'm a vim user though, so that's what I set +up. + +neovim includes some reasonably great colorschemes which you can try out with +the :colorscheme option. I chose blue, which fit my retro vibe just fine, but +you could pick anything you want or even write one yourself from scratch. + +I added that to my .config/nvim/init.vim file with colorscheme blue, and I also +added set linebreak so that way words would wrap to the next line (I don't +normally do this on my desktop but this thing's one job is writing). + +Lastly, I set up vimwiki, which I already covered in a separate [18]blog post. +The only thing that's changed is instead of installing vimwiki with a plugin, +on Trixie it's packaged, so you can install it with sudo apt install +vim-vimwiki. + +Installing Syncthing + +I set up syncthing according to the [19]Syncthing docs, which are pretty good +and I won't repeat those too much here. + +I set up syncthing to connect my writerdeck's vimwiki folder to my server's +writing folder, which is a subdirectory inside another, more private vimwiki +setup. I do it this way so that if there's sensitive notes in my desktop +vimwiki, they don't sync to the writerdeck. If I had encryption on this device, +I wouldn't mind that though, and I might set up password-based LUKS encryption +just to gain access to my vimwiki diary on the writerdeck. + +The one place where I strayed from a stock syncthing setup is that because I +don't have a desktop with a traditional browser, I had to set my syncthing web +GUI to be [20]listening on all addresses instead of just 127.0.0.1. I don't +love this approach, but again, this thing has nothing private on it. A better +way would be to set up a SOCKS proxy and connect that way, but that's a topic +for a future post. + +Setting it up to autologin + +The last thing I did to make this writerdeck my own was to set up automatic +login. + +I want to be able to open this up and start writing quickly- autologin is a +simple way to get there. + +Autologin with kmscon + +Because I installed kmscon, this is pretty easy, just update the (gasp) systemd +service with sudo systemctl edit [email protected]. + +Then, I just added the following: + +[Service] +ExecStart= +ExecStart=/usr/bin/kmscon --login -- /bin/login -f my_username_goes_here + +This tells kmscon to start what comes after the -- after --login. In my case, +that's the default /bin/login program with the parameter -f and then my +username. + +Launching tmux on boot + +After kmscon signs me in, I want tmux to automatically launch into vimwiki. But +only if I'm on the main tty (the default virtual terminal). + +I can do this easily by adding a small bash if/then to my .bashrc: + +# Launch tmux if we aren't already running tmux and we're in the default tty +if [ -z "${TMUX}" ] && [ $(tty) == "/dev/pts/0" ]; then + exec tmux new-session -d 'vim -c VimwikiIndex' \; attach +fi + +This works by checking to make sure we're not in tmux already (which would be +recursive and bad), and it also makes sure we're in the first virtual tty. If +those two conditions are met, then it launches a new tmux session with the +command vim -c VimwikiIndex (which tells vim to connect to the Vimwiki index). +It then attaches to that session. + +After using it for a few projects, I love it. + +I've had this thing going for a week or so now, and I've used it to write this +blog post, the script for the companion video, and another future script I'm +working up right now. And it's awesome. + +I may extend this idea with a spell checker, or perhaps set up a "writerdeck +terminal" in my workspace using an old 486, to really bring myself back to a +more intentional experience (with an even better keyboard!). + +The point is to write more, and to be less distracted doing so. I have always +struggled immensely with the fact that the browser nags at me. I get +notifications about apps needing my attention. My music player tells me the +next song we're playing. It's all very convenient, and very distracting. + +I'm trying to be more intentional with my tech choices. I want devices that do +one thing really well, and that when I'm done with that one thing, I can put +them away, and do something else. I don't want everything to follow me around +everywhere. + +If that's you, maybe you would benefit from a writerdeck. For me, it's been +great. :) + +Update: This got a lot of attention and I wrote a [21]follow-up blog post +answering questions from the internet. + +Read more + +[22] It's me, holding a laptop with a blue screen and lots of text in front of +my face. The words "writerdeck FAQ" are superimposed to my side. + +Writerdeck: FAQ + +Folks have been asking me questions about my writerdeck setup. Here, I attempt +to answer them. + +28 May 2026 +[23] A close-up of my smiling face, holding a phone with the GrapheneOS logo on +it and the word "FAQ". + +Living with GrapheneOS: FAQ + +Over the last three years I've had a lot of folks ask me questions about using +GrapheneOS. Let's answer them! + +04 Mar 2026 +[24] The four members of The Stop Bits sitting on a couch. Superimposed is the +date "Feb 14, 2026" and the words "VCF SoCal // Orange, CA". + +Upcoming performance + quick housekeeping note + +I will be at VCF SoCal this Saturday, February 14, 2026, in Orange, CA, US! + +09 Feb 2026 +[25] A heavily dithered screenshot of the front page of veronicaexplains.net, +which says "subscribing is awesome and so are you", and a "subscribe" field +with an example email address in it. + +Wait, veronicaexplains.net? + +My website is now using Ghost instead of WordPress, and that means you can get +me in your inbox. Everyone loves emails, right? + +05 Feb 2026 +Veronica Explains + + • [26]Sign up + • [27]"AI" disclosure + • [28]FAQ + +Powered by [29]Ghost + +Veronica Explains + +Linux mom, vintage tech enthusiast, nerdy musician. + +[30][ ] Subscribe Email sent + +[38]Mastodon verification link [39]GoToSocial verification link + +References: + +[1] https://veronicaexplains.net/ +[4] https://veronicaexplains.net/about/ +[5] https://veronicaexplains.net/faq/ +[6] https://veronicaexplains.net/contact/ +[7] https://veronicaexplains.net/rss/ +[9] https://veronicaexplains.net/my-first-writerdeck/#/portal/signin +[10] https://veronicaexplains.net/my-first-writerdeck/#/portal/signup +[11] https://veronicaexplains.net/tag/intentional-tech/ +[12] https://veronicaexplains.net/author/vkc/ +[13] https://veronicaexplains.net/author/vkc/ +[14] https://veronicaexplains.net/my-first-writerdeck/#/share +[15] https://www.writerdeck.org/?ref=veronicaexplains.net +[16] https://system76.com/?ref=veronicaexplains.net +[17] https://debian.org/?ref=veronicaexplains.net +[18] https://veronicaexplains.net/vimwiki-101/ +[19] https://docs.syncthing.net/intro/getting-started.html?ref=veronicaexplains.net#getting-started +[20] https://docs.syncthing.net/intro/getting-started.html?ref=veronicaexplains.net#getting-started +[21] https://veronicaexplains.net/writerdeck-faq/ +[22] https://veronicaexplains.net/writerdeck-faq/ +[23] https://veronicaexplains.net/grapheneos-faq/ +[24] https://veronicaexplains.net/2026-vcf-socal-announcement/ +[25] https://veronicaexplains.net/launching-ghost-on-new-domain/ +[26] https://veronicaexplains.net/my-first-writerdeck/#/portal/ +[27] https://veronicaexplains.net/ai-disclosure/ +[28] https://veronicaexplains.net/faq/ +[29] https://ghost.org/ +[38] https://linuxmom.net/@vkc +[39] https://explains.social/@veronica diff --git a/static/archive/www-robinsloan-com-sokpt5.txt b/static/archive/www-robinsloan-com-sokpt5.txt @@ -0,0 +1,61 @@ +[1]Blog [2]About [3]Moonbound [4]Shop + +This is a post from [5]Robin Sloan’s lab blog & notebook. You can [6]visit the +blog’s homepage, or [7]learn more about me. + +[8]The big button + +May 16, 2026 + +Here’s Marcin Wichary [9]with a huge guide to the fun of key­board +customization, fea­turing a pic of his own setup …  + +Marcin's battlestation Marcin's battlestation + + … which is even better than I expected it would be, and that’s saying a lot, +because my expec­ta­tions were high, given that it’s Marcin, and it’s +key­boards. He writes: + + I also have one big arcade button in a big box. It’s a long story, but I + com­mis­sioned it hoping it’d be fun to press, and guess what: It’s really + fun to press. + +There are sev­eral exam­ples of the big arcade button’s appli­ca­tions in the +guide — you’ll find them [10]starting here. At last, Marcin writes, + + But, let’s move away from the big button onto other things. + +and I believe my sigh of dis­ap­point­ment might have been audible across the +continent. + +(I saw the link to Marcin’s guide in [11]R. W. Blickhan’s newsletter, which is +a reg­ular read for me, highly recommended.) + +[12]To the blog home page + +I’m [13]Robin Sloan, a writer, printer, & manufacturer. The best thing to do +here is sign up for my email newsletter: + +[14][ ] [15][Subscribe] +This web­site doesn’t col­lect any infor­ma­tion about you or your reading. +It aspires to the speed and pri­vacy of the printed page. + +Don’t miss [16]the colophon. Hony soyt qui mal pence + + +References: + +[1] https://www.robinsloan.com/lab/ +[2] https://www.robinsloan.com/about/ +[3] https://www.robinsloan.com/moonbound/ +[4] https://www.robinsloan.com/shop/ +[5] https://www.robinsloan.com/ +[6] https://www.robinsloan.com/lab/ +[7] https://www.robinsloan.com/about/ +[8] https://www.robinsloan.com/lab/big-button/ +[9] https://aresluna.org/key-in-sight/?utm_source=Robin_Sloan_sent_me +[10] https://aresluna.org/key-in-sight/?utm_source=Robin_Sloan_sent_me#big-button-in-keynote +[11] https://buttondown.com/rwblickhan/archive/definitely-a-technical-exercise-in-academic/?utm_source=Robin_Sloan_sent_me +[12] https://www.robinsloan.com/lab/ +[13] https://www.robinsloan.com/about?utm_source=Robin_Sloan_sent_me +[16] https://www.robinsloan.com/colophon/