aresluna-org-hcpaiq.txt (73656B)
1 Marcin Wichary 2 3 12 May 2026 / 9,400 words, but don’t even worry about it 4 5 [my-setup-t] 6 7 Key, in sight 8 9 A guide, of sorts, to keyboard customization 10 11 I like keyboards because they’re the most effective human-computer interface 12 connection, but I also like keyboards because they are fun. 13 14 It’s fun to slam big keys without thinking, and it’s fun to experience the 15 mastery of precise combinations of meticulous keyboard shortcuts. It’s great to 16 see things on the screen that react to what you’ve done, especially if those 17 are things that really understand how you work. And it’s magical to watch your 18 fingers do things seemingly on their own while you’re preoccupied with deeper 19 things, just because you set up something that allowed motor memory to blossom. 20 21 This is not only about efficiency. Sometimes it’s more about a connection with 22 the tool, a feeling of customization or control, or simple appreciation of a 23 well-made interaction – all these beautiful low-level moments that give their 24 energy to the whole process. 25 26 [icons] 27 These four apps do very different things 28 29 How do you get there, though? Sure, you can get a nice keyboard, and adopt 30 shortcuts provided by the operating system and the apps you use. After that, 31 however, the road gets pretty steep. Getting a “fancier” keyboard means endless 32 options coated with infinite jargon. On the software front, so many apps come 33 with similar names, confusing interfaces, and frightening dialog boxes asking 34 you for all the permissions in the universe. 35 36 So, I wanted to write a little guide, all the way from hardware to software, 37 about how I approached and warmed up to some of the keyboard mastery myself. 38 Maybe it will work for you, too? 39 40 My goals for this essay are: 41 42 • Actually do some useful things with modern keyboards and keypads. 43 • Find some fun and enjoyment in it all. 44 • Be a calm guide through a typically stormy port. 45 46 If you were always curious but intimidated, or if you have a keypad or a bunch 47 of extra keys on your keyboard, but don’t know what to do with them… read on. 48 Two caveats before we start: 49 50 • This will generally not cover command palettes, text expansion, and using 51 keys to launch apps – those are all valuable, but I think generally not 52 hard to accomplish. I want something different. 53 • The software parts here are Mac only. Please [2]let me know if you’d like 54 me to cover Windows as well. 55 56 A key to toggle dark mode 57 A little highlight reel of what’s to come in this essay 58 59 How to have fun 60 61 How to have fun with hardware 62 63 My recommendation: Start with making room for yourself so it’s easy to 64 experiment. In other words, start by adding keys. It’s no fun driving through 65 the busy streets of an old European city, fighting for space with tons of 66 shortcuts already out there, needing to shuffle existing conventions around. I 67 was responsible for keyboard shortcut decisions at work for years, and it’s a 68 real challenge. 69 70 Instead – as awful as this analogy is – you need a brand-new parkway autobahn 71 where you’re the only car, free to drive carelessly and without speed limits. 72 73 There are two ways to get there: by carving out a not-yet-colonized space on 74 your existing keyboard, or by literally buying new keys. 75 76 Adding room by buying new keys 77 78 If you have budget for an external macro pad, get one and put it on the side of 79 the main keyboard, opposite the trackpad or mouse. 80 81 I have tried a few different options, and I could recommend: 82 83 Wooting also might be the only keyboard software of all of them that could be 84 described as “actually nice to use.” 85 I would not recommend Glorious GMMK Numpad in that it is costly, and you cannot 86 reconfigure the sliders or the lights easily. 87 88 • [3]Wooting UwU gives you three big keys and three small ones; the build 89 quality is nice and the price is relatively low. 90 • [4]Megadolon Triple Knob Macro Pad is knob-heavy, but it also gives you 16 91 keys. 92 • [5]Work Louder Creator series keypads are pricier and have their quirks, 93 but overall it’s a nice layout and the mechanical feel is good, too. 94 • You can also get any nice numeric keypad, and then reassign its keys to do 95 non-calculatory things. [6]8BitDo’s is nice and relatively affordable, and 96 [7]Keychron offers a few different keypads – those are a bit more pricey, 97 though. I also used [8]Eweadn NK20. 98 99 1 more image 100 101 1 more 102 1 103 Ulanzi D200 and Elgato Stream Deck Neo 104 105 I would not recommend Stream Deck or its copycats from Ulanzi and Logitech, 106 even if they are conceptually similar to the products above. Those look like 107 keys, but they really are buttons: mushy, meant to be pressed occasionally 108 rather than all the time, not great allies to motor memory. The rule would be: 109 if you’re buying something new, it needs to be using mechanical keyboard 110 switches. We will put those keys to actual pragmatic use, but they also need to 111 be really nice to press for the magic to kick in; we want something good for 112 the brain, but also good for the heart. 113 114 If you buy a new macro pad or keypad, it will give you a new set of completely 115 conflict-free keys. My recommendation is to map them to F1–F20 and resolve what 116 that means later in software inside the computer, rather than inside the 117 keyboard itself. 118 119 Making room without buying new keys 120 121 If you don’t have room, can’t afford a keypad, or have ergonomics or RSI 122 concerns, here are some ideas on how to make room for yourself on your existing 123 keyboard: 124 125 • If you have a keyboard with a keypad you don’t use, you can take over those 126 keys to behave like function keys. Particularly both numpad 0 and numpad 127 Return are bigger, and will be enjoyable to press in haste! (Each numpad 128 key can also be modified by modifier keys: Numpad 0, ⇧Numpad 0, and ⌘Numpad 129 0 can all do different things.) 130 • If you already have F1–F12 function keys at the top, consider enrolling 131 them in new tasks. If you are already using some of them for system control 132 (for example volume or brightness or music pausing), you can split the 133 function row into two halves and free up only some of it for use. But the 134 goal would be never having to fiddle with the Fn key so the keys are as 135 easy to use as possible. 136 137 One idea on how to divide a function key row 138 139 • You can create a completely new modifier key and assign it to Caps Lock. A 140 user-made modifier is conventionally referred to as “Hyper.” This frees up 141 HyperA–Z, Hyper1–0, even HyperSpace (huh) or HyperEnter to do whatever you 142 want. The key is also in a nice position and really fun to press, once you 143 get past the trauma of years of trying to avoid pressing it. 144 • Claim a few other keys on the keyboard you never press. Do some eminent 145 domain on the little private Scroll Lock + Print Screen island? Reclaim 146 Insert and Delete or PgUp and PgDn? Or maybe your keyboard has a few weird 147 extra keys that you never touched that could use a new job? 148 • If you already have a gaming joystick or one of those gaming pads, and you 149 feel good about their feel, they might be a good candidate, too. The tools 150 we’ll talk about will allow to react to joystick and game button equally 151 well as to key presses. 152 153 Nlofin Leverless Arcade Controller and Razer Tartarus Pro. I’d avoid products 154 by Razer, however, as their Mac software is absolutely horrendous. 155 156 How to have fun with software 157 158 Just one example of a scary keyboard software experience 159 160 You can’t skip this part, and this is unfortunately a harder place to enjoy. 161 With the physical keyboards you can at least be mesmerized by the lights, 162 admire the build quality, enjoy the tacticility. But very little software for 163 keyboard customization is… pleasant. It all comes with rough interfaces, scary 164 permission windows, and impenetrable nomenclature. This can be inspiring in the 165 “I will figure it out and show you who’s the boss” sense – but it will be 166 intimidating first. 167 168 You’ll often have to use more than one app to get going, too. Also, both of 169 these things will be true: there is no one app that does everything, and a lot 170 of apps have overlapping functionality. 171 172 I will explain software in more details later, but first I just want to show 173 you what I chose to do. 174 175 My setup 176 177 Here is what specifically worked for me. 178 179 Hardware 180 181 I know my keyboard looks weird, but stripped of its strange moments, it’s a 182 pretty standard QWERTY. 183 184 I have a little numpad on the left side. I customized it via its software so 185 that the keys are mapped to F1–F20. I split the keys into two halves – 186 shortcuts for the system, and shortcuts for the current app – and installed 187 different keycaps that helped me remember that division. 188 189 Many keyboard lights are very rainbowy and fast-moving out of the box. I’m too 190 old for that. I’d argue most people are. 191 192 I told the lights to chill and just use a stationary orange color so that it 193 matches my whole theme and makes me happy. 194 195 I also have one big arcade button in a big box. It’s a long story, but I [9] 196 commissioned it hoping it’d be fun to press, and guess what: It’s really fun to 197 press. It’s technically a joystick button, not a key, but it connects via USB 198 as a keyboard would, and to the software I use there is no difference. And, 199 speaking of software… 200 201 Speaking of software 202 203 My main go-to is [10]Keyboard Maestro. It is old-fashioned in both good and 204 sometimes bad ways. It has a quirky, occasionally intimidating, but otherwise 205 thoughtful user interface. It’s capable, and I feel it grows on you and grows 206 with you – I started with simple things that I will show you below, and then 207 worked on figuring out more and more. (Also, the app is still being updated, 208 and it has a small, but invested community.) 209 210 This is the command center that’ll decide what F1–F20 really mean depending on 211 all the context. The key press will mean F1 when the keyboard spits it out, but 212 Keyboard Maestro will change it to something more relevant before it reaches a 213 given application. 214 215 I occasionally use other tools – often, you do not really have a choice! – but 216 I try to centralize all my logic in here and treat it as a main “dispatcher.” 217 If it’s possible to do something both in Keyboard Maestro and elsewhere, I put 218 it in Keyboard Maestro. But of other tools: 219 220 • I installed [11]Karabiner Elements, which is free, and useful for some 221 lower-level stuff. It also has a useful key event tester. 222 • I occasionally use Shortcuts and other built-in macOS functionality, for 223 light text expansion and for disabling some built-in shortcuts (like ⌘⌥D 224 for dock hiding). 225 226 Outside of attractiveness, the Keyboard Maestro app switcher has a few 227 interaction issues, as well. 228 229 Keyboard Maestro should be safe to install, with one exception: it changes your 230 ⌘Tab app switcher. Unfortunately, it’s not a positive change. While Keyboard 231 Maestro is great at wiring keystroke logic together behind the scenes, most of 232 its visible UI is not very attractive, and this is no exception. So, after 233 installation, click on Switcher Group and then uncheck Enable Macro Group. 234 235 The native macOS app switcher and its Keyboard Maestro equivalent 236 237 Keyboard Maestro is free to try for 30 days. After that, at the time of 238 writing, it’s a one-time $36 purchase, which feels very reasonable. I do not 239 know of other apps that offer similar functionality cheaper (or for free) that 240 do not make me want to rip my hair out using them. 241 242 Continue reading by choosing your own adventure 243 244 I learn best from examples ↓ I would love to see examples first, then (maybe) 245 catch up with theory 246 I learn best from theory ↓ I would love to understand the theory first, then 247 see your examples 248 249 The best keyboard incantations I made 250 251 This is what I found the most useful and enjoyable with my setup. Some of this 252 stuff might not be relevant to your work, but perhaps will offer inspiration or 253 a good jumping off point. 254 255 Once you get started with some concepts, it gets easier! Each of the 25 256 examples below tries to show a new idea that you can put to use. 257 258 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 259 260 I fixed shortcuts that disagreed with one another. 261 262 Motor memory is beautiful. It can offload menial actions to other parts of your 263 brain so you can focus on what matters. It can make you fly through things. It 264 can help achieve flow. 265 266 But motor memory requires consistency. I do a lot of writing in various apps, 267 and specific things behaving slightly differently bother my fingers. Bold and 268 italic always work the same way, but when it comes to stuff like strikethrough, 269 quotations, headlines, separators, and to-do items, the shortcuts are all over 270 the place. 271 272 For example, I am used to pressing ⌘⇧X for strikethrough, but Bear (a 273 notetaking app) has it under ⌘⇧U, and Apple Notes doesn’t provide a shortcut. 274 In both cases, the command is in the menu, so the simple way to fix this is to 275 go to the Settings and reassign based on the menu name. Or, you can also use 276 the [14]CustomShortcuts app, which offers a tighter UI and autocomplete. 277 278 [notes-buil] [notes-cust] 279 The native macOS function and CustomShortcuts 280 281 But I like unifying everything in Keyboard Maestro (and avoiding Settings [15] 282 like a plague), and so I did it there instead: 283 284 Keyboard Maestro macro setup 285 286 The benefit of doing it in Keyboard Maestro is that I can also fix Medium’s 287 shortcuts. Medium lives inside Chrome, which complicates things – I don’t want 288 to change the shortcut for every single web app in Chrome! – but Keyboard 289 Maestro allows to target specific tabs, so I can unify the quoting shortcut 290 from ⌥⌘5 to ⌘': 291 292 Keyboard Maestro macro group and macro setup 293 294 How does one choose the correct shortcut, though? My advice is: Listen to your 295 fingers. If you’re already used to some combination of keys, just make it work 296 in other apps. 297 298 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 299 300 I deleted some shortcuts I truly hated. 301 302 I use a lot of Slack, and in Slack I constantly press ⌘T to search for a person 303 or a conversation. But the challenge with ⌘T is that it is right next to ⌘R, 304 and occasionally my fingers would also press that shortcut on the way, and 305 initiate a reload – not the end of the world, but frustrating to happen a few 306 times a day. 307 308 Settings does not obviously allow you to remove a shortcut, but you can always 309 assign a new shortcut that you will just never press, for example something 310 heinous like ⇧⌃⌥⌘F10. 311 312 [slack-relo] 313 I did a similar thing for Show Spelling And Grammar. The shortcut was ⌘⇧; and 314 sometimes I would press it alongside ⌘⇧L that I use a lot. So, I disabled that 315 wholesale. 316 317 But the shortcut showing up in a menu like this feels inelegant to me. So, in 318 Keyboard Maestro, I just made a category for Slack, added an action that’s 319 triggered by ⌘R, and… that’s it. I didn’t wire anything to it, so the action 320 doesn’t actually do anything, but its very presence ensures the key press never 321 makes it to Slack. 322 323 Keyboard Maestro macro setup 324 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 325 Show me the Keyboard Maestro setup 326 327 Show me the Keyboard Maestro setup 328 Show me the Keyboard Maestro setup 329 Keyboard Maestro macro setup 330 331 I added some shortcuts to help my motor memory. 332 333 At some point, I made Gmail a web app in its own window, rather than using it 334 in the browser as yet another tab. But I still occasionally press ⌘N or ⌘T in 335 Gmail, out of habit. 336 337 It was really easy to change it so those keys switch to Chrome and open new 338 stuff there, like they did before. 339 340 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 341 342 Okay, so we made some shortcuts consistent, and removed stuff. But this is kind 343 of boring. 344 345 Generally, unless you know exactly what you want and have existing pet peeves, 346 I would initially avoid the business of micromanaging existing shortcuts in 347 apps, and optimizing them ad nauseam – it’s just not as much fun, and we didn’t 348 get all these new keys for no reason. 349 350 So, let’s do some things with those keys. 351 352 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 353 Show me the Keyboard Maestro setup 354 355 Show me the Keyboard Maestro setup 356 Show me the Keyboard Maestro setup 357 Keyboard Maestro macro setup 358 359 I had fun with a big button. 360 361 I give talks sometimes, but Keynote’s “show presentation” shortcut that I use 362 for previewing and practice is a thoroughly disappointing, puny ⌥⌘P. 363 364 On the other (well, same) hand, it’s just a lot of fun to slam a big arcade 365 button without thinking – it feels extremely satisfying to press it and then 366 see the slides blow up on the screen. I want to think of my presentations as 367 appearing in a movie theatre, with people quieting down as [16]the THX logo 368 scares the hell out of them. 369 370 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 371 Show me the Keyboard Maestro setup 372 373 Show me the Keyboard Maestro setup 374 Show me the Keyboard Maestro setup 375 Keyboard Maestro macro setup 376 377 Actually, even more fun. 378 379 I also do [17]a lot of tech history document scanning. Scanning is even less 380 glamorous than you might already think – instead of gently laying a piece of 381 paper onto a scanner bed and pressing a button to Preserve History, you 382 sometimes have to shove a heavy, half-opened book in there and hold it in the 383 right position for 20 seconds or more. 384 385 [scanning] 386 My scanner software is good enough that it allows me to queue the next scan 387 before the current one is finished, so I really do not have to worry about 388 timing. If the software wasn’t as good, I am sure Keyboard Maestro would allow 389 me to make it work, anyway. 390 391 A contorted body and busy hands are not great conditions to carefully target an 392 onscreen Scan button with a mouse, or even to press a shortcut more complex 393 than one key. So, I also wired the same big button to start the scan process. 394 Keyboard Maestro invokes that only if the scanning software is open, but 395 regardless of whether the scanning app is currently focused or not. This is 396 important, as I often jump to Finder to verify the results as I’m scanning and 397 I want to be able to press the key anywhere. 398 399 I also assigned the same function to the Fn key on my laptop keyboard. The Fn 400 key is kind of [18]useless to me, and it is positioned in a corner, so it’s 401 easy to press, too. (Tools like Keyboard Maestro allow you to have more than 402 one key trigger for one function, and that can be very useful.) 403 404 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405 Show me the Keyboard Maestro setup 406 407 2 images 408 409 Show me the Keyboard Maestro setup (2 images) 410 Show me the Keyboard Maestro setup (2 images) 411 Keyboard Maestro macro setup for Zoom Keyboard Maestro macro group and macro 412 setup for Google Meet 413 414 Okay, quite a bit more fun. 415 416 I also wired the same button to mute me on various calls. 417 418 Google Meet, Zoom, and FigJam offer keyboard shortcuts for this – although each 419 one is different – and FaceTime only has an onscreen button. Keyboard Maestro 420 can unify all of these things, and just like before, choose the right action 421 depending on which app is running. (For FaceTime, it’ll get there via the 422 menu.) I just press the big arcade button. 423 424 I can even wire it so that it if the app is in the background, the button press 425 can switch to it quickly, do the muting, and go back where I was, effectively 426 making my button slam a “global” shortcut. It’s a nice enhancement very few 427 apps offer on their own. 428 429 And now, it works so well, I can mute and contain even a very sudden sneeze. 430 431 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 432 Show me the Keyboard Maestro setup 433 434 Show me the Keyboard Maestro setup 435 Show me the Keyboard Maestro setup 436 Keyboard Maestro macro setup 437 438 I swear I am done with the big button… right after this. 439 440 Lastly, I also wired the big button to take a screenshot of the main display. 441 442 What’s cool about that is that [19]regular screenshot-taking shortcuts require 443 you to hold a modifier key or two beforehand. But a modifier key is not truly 444 inert – it could dismiss the very tooltip I wanted to screenshot, or change the 445 cursor to look differently. A one-button operation doesn’t have these problems. 446 447 To finish the big button story: In general, I wouldn’t maybe recommend 448 overloading one key this way – that means I cannot scan while I’m on Zoom, or 449 take screenshots this way while I’m practicing for my presentation, although 450 these are not situations that happen anyway. 451 452 But, let’s move away from the big button onto other things. 453 454 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 455 Show me the Keyboard Maestro setup 456 457 2 images 458 459 Show me the Keyboard Maestro setup (2 images) 460 Show me the Keyboard Maestro setup (2 images) 461 Keyboard Maestro macro setup for Preview Keyboard Maestro macro setup for 462 DevonThink 463 464 I made more things consistent, but also consistently pleasant. 465 466 I read a lot of documents and PDFs and it’s a similar situation as before. 467 Chrome, Internet Archive, Preview, and Google Books cannot agree on the keys to 468 use here, and DevonThink doesn’t even have any keyboard shortcuts for flipping 469 pages. 470 471 Keyboard Maestro allowed me to unify the existing shortcuts, and for DevonThink 472 I used one of its smarter features: searching for a button under the hood using 473 the name of its tooltip. 474 475 But the most important part? I assigned this to the two bottom-most keys on the 476 keypad just so it feels really nice, too. I actually love keeping my left hand 477 there when reading, just going through pages and enjoying the clicky keys, 478 while my right hand is on the trackpad where I can zoom or do other things. 479 480 Now, I can do this thousands of times a day with joy. 481 482 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 483 Show me the Keyboard Maestro setup 484 485 3 images 486 487 Show me the Keyboard Maestro setup (3 images) 488 Show me the Keyboard Maestro setup (3 images) 489 Keyboard Maestro macro setup for dark mode using Shortcuts Keyboard Maestro 490 macro setup for dark mode using a built-in function Keyboard Maestro macro 491 setup for toggling retina mode 492 493 I took charge of time and space. 494 495 When I do design or web work, I want it to look good in dark and light mode. 496 But going to Settings to toggle it back and forth is really unpleasant. So I 497 wrote a tiny Shortcuts script, and wired it via Keyboard Maestro, which can 498 invoke any Shortcut. Now, one single slam of a key that’s always there switches 499 dark mode wherever I am, and it honestly feels a bit magical. 500 501 (By the way – later I discovered that Keyboard Maestro has its own “toggle dark 502 mode” action, simplifying my situation even more, but I wanted to show you 503 talking to Shortcuts was possible.) 504 505 Then, I made it so Shift + the same key toggled the screen in and out of retina 506 pixels, which is also useful for testing. I don’t do that nearly as often as 507 dark mode, so I was okay with a modifier key here. 508 509 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 510 Show me the Keyboard Maestro setup 511 512 Show me the Keyboard Maestro setup 513 Show me the Keyboard Maestro setup 514 Keyboard Maestro macro setup 515 516 I built a slightly smarter escape hatch. 517 518 I use Bear for notetaking and I have one main note, with all to do items in it 519 – but I check out other notes all the time. 520 521 I wanted a simple and reliable key that would always get me to that main note 522 wherever I happen to be: an app launcher with a twist. 523 524 [20]This short video might help visualize this. 525 526 Bear doesn’t provide a smart way of controlling it or an API, but I could do it 527 the “player piano” way by just replaying some keystrokes I would press: switch 528 to Bear, simulate ⌘⇧O, fake type the name of the main note, press Enter, and 529 then press down arrow a few times. It’s a little goofy because you can see it 530 going through its motions, but it works really well. 531 532 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 533 Show me the Karabiner Elements setup 534 535 Show me the Karabiner Elements setup 536 Show me the Karabiner Elements setup 537 Karabiner Elements setup 538 539 I conflated brightness and volume in a way that probably breaks some laws, and 540 cleaned up Apple’s strange conventions. 541 542 For some reason, I love changing the brightness by hand. Maybe I don’t trust 543 the auto brightness stuff, maybe I’m just power hungry, maybe my eyes are funny 544 – likely all of the above. 545 546 I was also fed up with default macOS modifier key combinations for [21]volume 547 and brightness keys, so I put all of them on the same two keys my keyboard 548 happens to have, behaving like this: 549 550 • normal presses = volume 551 • ⇧ presses = precise volume in smaller steps 552 • ⌃ presses = brightness on the left screen 553 • ⌘ presses = brightness on the right screen 554 555 Why ⌃ and ⌘? Because ⌃ is on the left, and ⌘ is on the right. This way I made 556 it easier for myself to remember, even if that set up is only true on my desk. 557 558 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 559 Show me the Keyboard Maestro setup 560 561 Show me the Keyboard Maestro setup 562 Show me the Keyboard Maestro setup 563 Keyboard Maestro macro setup 564 565 I added tag wrapping in my programming editor. 566 567 This is the one that made me really happy. I write all of my stuff in HTML, but 568 HTML with its angle brackets is not as much fun to type in. 569 570 I noticed I was spending a lot of time typing the same tags over and over 571 again, so I added a few expand-like features where I can select text and then 572 press one key and it turns it into an <a> link. Another key makes it a specific 573 style, and another makes it italicized. 574 575 It works no matter how long the string is, and I find it really fun to use – 576 again, left hand on the keypad row, and right hand to quickly select pieces of 577 text using the trackpad. 578 579 I know my programming text editor likely has that option… somewhere. But I am 580 lightly afraid of interfaces of programming editors, and doing it like this 581 allows me to cheaply reuse it elsewhere, too. 582 583 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 584 Show me the Keyboard Maestro setup 585 586 Show me the Keyboard Maestro setup 587 Show me the Keyboard Maestro setup 588 Keyboard Maestro macro setup 589 590 I set up universal record and playback. 591 592 This is one of the truly unsung heroes of this area, and one I learned to love 593 first in a text editor called Sublime Text. Today, Keyboard Maestro allows me 594 to have it everywhere. 595 596 The starting point is simple: you assign one key to be “record” and one key as 597 “play.” Then, at any point you can record a sequence of keystrokes, and then 598 play it back, as many times as you want. 599 600 It seems simple, but the power lies exactly in its simplicity. Having it always 601 there, ready to use and then ready to throw away, allows for a refreshing new 602 casual kind of automation. 603 604 One example: As you can see in the video above, I wanted to make a little grid 605 in Keynote. So I recorded pasting one line, and then moving it the right 606 amount. Then, playing back the same interaction a few times got me what I 607 wanted really quickly. 608 609 Another one: Sometimes when you paste a big block of text, it comes with extra 610 lines between paragraphs, or not enough spacing between paragraphs. 611 612 There are many ways to deal with this. If you’re good with the command line, 613 you can put together a script. If you’re good at regexps, you can use Find & 614 Replace. But for me, I don’t do either enough to be good, so I would normally 615 just do it manually one paragraph at a time. This allows me to automate this 616 part in an incredibly light way – I record myself doing it once (⌥↓, →, Return 617 ), then repeat a few more dozen times. 618 619 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 620 Show me the Keyboard Maestro setup 621 622 Show me the Keyboard Maestro setup 623 Show me the Keyboard Maestro setup 624 Keyboard Maestro macro setup 625 626 I concocted a fun reloading chain. 627 628 When working on a Chrome plugin, it is cumbersome to see its effects 629 immediately, since you have to reload a few things in the right order. So, I 630 installed a Chrome extension to reload my extension-in-writing, and wired one 631 of my macro pad keys to do this sequence of events: 632 633 • save the current work in the programming editor 634 • jump to Chrome and press the “reload extensions” button in the background, 635 reloading my extension 636 • then, press ⌘R to reload the website, to see the extension’s effect 637 • and then, go back to the editor 638 639 The beauty is that even though this is very “player piano,” it’s so fast it 640 just feels magical – I press my button, immediately see its results on the 641 right, and no context is changed or lost. I can continue writing as if nothing 642 happened. 643 644 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 645 Show me the Keyboard Maestro setup 646 647 2 images 648 649 Show me the Keyboard Maestro setup (2 images) 650 Show me the Keyboard Maestro setup (2 images) 651 Keyboard Maestro macro setup for arbitrary image rotation Keyboard Maestro 652 macro setup for resizing the image window 653 654 I added some fun Photoshop flows that… flowed great together. 655 656 What follows scanning is long and often tedious processing: making the scans 657 brighter, straightening them, cleaning up the edges. 658 659 [scan-befor] [scan-after] 660 661 When I started looking at how I do this – in batches of sometimes hundreds of 662 pages in one go – I noticed a few patterns: 663 664 • I often go to the Brightness/Contrast window via the menu, and then fiddle 665 around with different numbers. So I made an action to increase brightness 666 and contrast by 10%, and assigned it to a key. Now I press it once, twice, 667 three times, until it looks good. If I overshoot, I can always undo. 668 • I always resize the window with the mouse to leave some room at the edges. 669 That made it easier to draw around them and clean them up. So I added a key 670 to resize the window to be slightly larger, without ever touching the 671 mouse. 672 • I noticed that when straightening an image, I have to click a button on the 673 screen with the mouse, because there is no keyboard shortcut, or way to 674 assign one. But Keyboard Maestro allows you to automatically click on 675 buttons, too. 676 677 Then – and this is important – I assigned these to keys that are side by side. 678 679 I know this sounds kind of silly, but now I can just rest my left hand on those 680 keys, right hand on the trackpad, put on a podcast, and absolutely breeze 681 through the scans, and feel kind of strangely amazing in the process? The 682 side-by-side keys mean motor memory starts to develop really quickly, and soon 683 I just watch my fingers do things. 684 685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 686 Show me the Keyboard Maestro setup 687 688 Show me the Keyboard Maestro setup 689 Show me the Keyboard Maestro setup 690 Keyboard Maestro macro setup 691 692 I made keystrokes replace some bookmarklets. 693 694 I use Web Archive to get to older versions of pages, and previously had a [22] 695 bookmarklet I would press in my browser’s toolbar. 696 697 You could probably assign a keystroke to a bookmarklet, but I went a different 698 way to simplify: I had Keyboard Maestro press ⌘L (go to the URL bar), then type 699 web.archive.org/ in front, and then press Enter. 700 701 It’s easy and fun, and I also wanted to show it to you because this is an 702 interesting way to approach some things previously only bookmarklets could do. 703 Bonus: This will work in all the browsers without having to set up each one by 704 hand! 705 706 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 707 Show me the Keyboard Maestro setup 708 709 4 images 710 711 Show me the Keyboard Maestro setup (4 images) 712 Show me the Keyboard Maestro setup (4 images) 713 Initial setup within Chrome Keyboard Maestro macro setup Keyboard Maestro macro 714 setup Keyboard Maestro macro setup 715 716 I added a deterministic set of shortcuts for testing speed. 717 718 This is similar to dark mode and retina stuff. When designing for the web, I 719 sometimes need to fake a slow connection or going offline to make sure my 720 website behaves well under conditions worse than wired, flawless home internet. 721 Moreover, I really want tight, immediate control over this – for example, 722 switching to “fast” for initial load of the page and “offline” immediately 723 afterwards. Having a great keyboard UI here isn’t the difference between using 724 it fast or slow. It’s about using it or not using it at all. 725 726 Chrome web inspector offers a little UI for this, but it’s buried inside a menu 727 inside a tab inside a drawer. To their credit, they offer to also wire some 728 shortcuts to those options, but the shortcut options are limited to modifier 729 keys. 730 731 Keyboard Maestro gave me a nicer solution: 732 733 • start by opening a web inspector if it’s not open 734 • use my macro pad keys without any modifier keys, so it’s very fast and 735 convenient 736 • even display a little message to confirm what I’ve done (using Raycast, 737 since Keyboard Maestro’s visual messaging feels ugly to me) 738 739 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 740 Show me the Keyboard Maestro setup 741 742 2 images 743 744 Show me the Keyboard Maestro setup (2 images) 745 Show me the Keyboard Maestro setup (2 images) 746 Keyboard Maestro setup for adding a label in Finder Keyboard Maestro setup for 747 removing all labels in Finder 748 749 I made Finder better, too. 750 751 When I process files in Finder, I sometimes want to tag them with a specific 752 color label. However, Finder’s UI for this is very mouse-oriented, and fiddly 753 when it comes to complex selections. 754 755 On my keypad, I set up four keys side by side so that when I am in Finder the 756 first three add red, yellow, and green labels to whatever my selection is 757 (could be one file, could be a hundred), and the last one just [23] 758 deterministically removes all the labels. 759 760 Since Finder’s interface for labeling is kind of a mess, this needed to be 761 wired on a deeper layer than just “player piano,” and used more advanced 762 Keyboard Maestro features such as looping and variables. 763 764 I really enjoy using it, because it’s easy to remember, and moving my left hand 765 to those keys and then back to Shift and Command to control Finder’s selection 766 feels easy, while my right hand can stay on the trackpad. 767 768 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 769 Show me the Keyboard Maestro setup 770 771 2 images 772 773 Show me the Keyboard Maestro setup (2 images) 774 Show me the Keyboard Maestro setup (2 images) 775 Initial setup in macOS Settings Keyboard Maestro setup 776 777 I learned you can control your smart home in a strange way. 778 779 There are ways to control your smart home by using different apps or proper API 780 events. But there is also a much simpler way that can be a fun way to get 781 started: talking to Siri by typing to it. This way, anything you can say to 782 Siri could be put under any key, which you can do in macOS out of the box. For 783 example, I can just put “kitchen lights 10%” under F5 or “decrease room 784 temperature” under F6. 785 786 It also works a lot faster than saying the same thing to Siri via voice, which 787 is a very interesting discovery. 788 789 (Unfortunately, this approach has limitations, because Mac’s Siri cannot do 790 everything. But it is a very simple starting point.) 791 792 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 793 Show me the Karabiner + Keyboard Maestro setup 794 795 4 images 796 797 Show me the Karabiner + Keyboard Maestro setup (4 images) 798 Show me the Karabiner + Keyboard Maestro setup (4 images) 799 Karabiner Elements setup Keyboard Maestro macro setup Keyboard Maestro macro 800 setup Keyboard Maestro macro setup 801 802 I invented a completely new keyboard shortcut convention I use all the time 803 now. 804 805 All that stuff just whetted my appetite to try something new, something 806 different, something unusual. And this one is perhaps my absolute favourite. 807 808 [macos-text] My previous attempt to make key symbols easily accessible 809 810 In my design and writing, I often want to use symbols like ⌘ or ⇧ to refer to 811 keys, so I had this idea: What if I press a new “Print the legend” key like a 812 sort of modifier key, in combination with another modifier key or keys like ↓, 813 Esc, or Return. That combination makes their symbol appear on screen. 814 815 This feels so much more fun than the standard way of setting text replacements, 816 and avoids you having to remember all of these strange writing incantations 817 that need to be close, but not quite correct strings, since you still want to 818 write “Command” and “Shift,” too! 819 820 It also has the added benefit that it works in more places than the normal 821 macOS text expansion, and feels little a magical because… keyboards are not 822 really meant to work that way. But mine does. It looks like the small keypad is 823 a “boss” of the huge one – a true Ratatouille situation. 824 825 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 826 Show me the Keyboard Maestro setup 827 828 Show me the Keyboard Maestro setup 829 Show me the Keyboard Maestro setup 830 Keyboard Maestro macro setup 831 832 I talked to YouTube via JavaScript to simplify a complex flow. 833 834 Text transcript in YouTube is very useful if I want to quote something from a 835 YouTube video into [24]my blog. 836 837 [youtube-tr] 838 839 If you didn’t know that YouTube had a transcript, you weren’t alone! It’s not 840 only buried behind a few clicks and scrolls, but also resets the moment you 841 zoom in the video. 842 843 Instead of a “player piano” action, I used Keyboard Maestro’s JavaScript 844 integration to find the right button and click it under the hood. And then I 845 assigned it to a key. 846 847 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 848 Show me the Keyboard Maestro setup 849 850 5 images 851 852 Show me the Keyboard Maestro setup (5 images) 853 Show me the Keyboard Maestro setup (5 images) 854 Keyboard Maestro helper macro setup Keyboard Maestro helper macro setup 855 Keyboard Maestro helper macro setup Keyboard Maestro helper macro setup 856 Keyboard Maestro main macro setup 857 858 I made a super weird shortcut I am very proud of. 859 860 And now, we can go back where we started, armed with more ideas. 861 862 Do you have a favorite shortcut? Something that you just enjoy pressing? My 863 suggestion to get an external keypad was to automatically get some fun-to-press 864 keys. But you can get those on the main keyboard, too. 865 866 The fav recent one I “invented” was ⇧Space to insert a divider. It made sense 867 both conceptually (divider is a long pause), and mnemonically (both the Shift 868 key and the spacebar are long, like a divider). I wired it up in Bear and 869 Medium – in Notes, which doesn’t seem to have a divider function, I just made 870 it output a bunch of hyphens – I excitedly started using it, and then… I 871 discovered a big problem. 872 873 Turns out I press ⇧Space all the time when typing. Fingers are extremely 874 precise and rather careless at the same time, and it turns out that I often 875 pressed ⇧ too early, on the way to a capital latter, which caught the space in 876 the crossfire. It didn’t have any effect before, but the new shortcut meant my 877 documents would now be littered with random dividers. 878 879 I didn’t want to give up on my idea, though. Then, I realized something: There 880 are two Shifts on my keyboard. What if I required ⇧⇧Space – actually holding 881 both Shift keys? 882 883 No designer would ever allow such a shortcut in any app because it has multiple 884 problems: it’s not ergonomic, it’s not accessible, and it requires two hands. 885 But I didn’t have to think about everyone, only me. I knew what I was doing. 886 When typing, both my hands are on the keyboard already, and dividers don’t 887 happen often anyway. And there was even something poetic about it feeling a bit 888 “heavier” – a divider feeling like ripping the page out of the typewriter and 889 inserting a new one. And the three keys in succession looked like one long 890 line, so it was a nice visual mnemonic. 891 892 The same line of thinking allows you to have something seemingly impossible: 893 Hyper with modifier keys, as long as you’re using modifier keys on one side 894 only. Simply make Hyper mean the modifier keys you’re not touching, and detect 895 the other set. This way you could have HyperV do one thing, and HyperLeft Shift 896 V so another. 897 898 It all required a bit of a deeper surgery, because Keyboard Maestro bundles 899 Shifts together by default, but I made it happen. 900 901 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 902 Show me the Keyboard Maestro setup 903 904 Show me the Keyboard Maestro setup 905 Show me the Keyboard Maestro setup 906 Keyboard Maestro macro setup 907 908 I solved clipboard history in a light way that made me happy. 909 910 Sometimes I accidentally write over my clipboard, but it doesn’t happen often 911 enough for me to invest in learning a clipboard manager; those things feel 912 overbuilt and scary to me. 913 914 How did I approach this problem? To me, the most important thing was a 915 shortcut, and I came up with Caps LockV (a.k.a. HyperV, which means ⇧⌃⌥⌘V). I 916 thought this would ensure that in a moment of panic, I will remember it, 917 because it’s very similar to ⌘V. 918 919 But what did I plug into it? Keyboard Maestro has a clipboard manager, but it’s 920 not very pretty. I happened to have a license for Raycast, so I plugged that 921 one instead: 922 923 [clipboard-] [clipboard-] 924 Clipboard history in Keyboard Maestro and in Raycast 925 926 I know macOS Tahoe has a clipboard manager, but I don’t want to update to Tahoe 927 – but once I do, and if I like what it offers, I should be able to just rewire 928 the shortcut to go there instead. That’s another benefit of taking ownership 929 here – over time, you can keep the shortcut, but switch what’s underneath. 930 931 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 932 Show me the Karabiner + Keyboard Maestro setup 933 934 2 images 935 936 Show me the Karabiner + Keyboard Maestro setup (2 images) 937 Show me the Karabiner + Keyboard Maestro setup (2 images) 938 Karabiner Elements setup Keyboard Maestro macro setup 939 940 Wait, no, this is an even better solution. 941 942 But even that above didn’t feel great. So I thought a bit more. 943 944 And I had a realization: what’s a pretty natural interaction I know from my 945 phone, or Apple TV? It’s “long press to reveal more advanced options.” Why 946 couldn’t ⌘V work the same way? Press it normally to paste, but press and hold 947 it for a clipboard menu. Holding means repeat elsewhere in keyboarding, but I 948 never want a repeated paste. 949 950 This required some delicate surgery: 951 952 • It all had to start on the Karabiner side because it was pretty invasive. 953 • Preventing ⌘V repeating was as easy as adding "repeat": false in the right 954 place. 955 • Instead of communicating through a throwaway key like F20, Karabiner talks 956 directly to Keyboard Maestro behind the scenes, and asks it to run a 957 command. 958 • That can invoke Raycast’s clipboard as above, but since the first press of 959 ⌘V pastes immediately and I didn’t want to change that, it also has to run 960 an undo first. 961 962 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 963 Show me the Keyboard Maestro setup 964 965 Show me the Keyboard Maestro setup 966 Show me the Keyboard Maestro setup 967 Keyboard Maestro macro setup 968 969 I made another big button do something silly. 970 971 I haven’t really figured out what to do with knobs yet. They are fashionable, 972 but my imagination doesn’t reach further than volume, brightness, and/or video 973 scrubbing – pretty basic stuff. 974 975 But a lot of knobs are also buttons, so I just wired mine to [25]Raycast’s 976 confetti canon. 977 978 And I just press it from time to time, for no reason at all. 979 980 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 981 982 Choose your own adventure 983 984 Okay, we are done with examples! And now… 985 986 [26]Continue with the theory ↓ 987 [27]Skip theory, go to the ending ↓ 988 989 This concludes the “choose your own adventure” portion of the essay! 990 991 The life of a keystroke 992 993 There is a lot of keyboard software, and it all exists on different planes. 994 This is my mental model of how a keystroke travels through the system: 995 996 Event/App 997 Function 998 [28](*) Most common apps [29]( ) Example tasks 999 Key press 1000 Keyboard firmware apps 1001 Basic configuration of keys and knobs, modifier keys, keyboard lighting, 1002 layers. 1003 1004 • VIA 1005 • 8BitDo Ultimate Software 1006 • Chrysalis 1007 • Wootility 1008 1009 • Make top left key be equivalent to Enter 1010 • Turning knob turns volume up or down 1011 • F1 key outputs “on my way” 1012 1013 USB side apps 1014 Rewriting keys and changing them depending on which keyboard they came from. 1015 Handling volume and other system keys. 1016 1017 • [30]Karabiner Elements 1018 • [31]Kanata 1019 • [32]KMonad 1020 1021 • Holding CtrlShift on any keyboard makes HJKL become cursor keys everywhere 1022 • Ctrl from one specific keyboard becomes ⌘ 1023 • Prevent ⌘Q from working any keyboard from doing anything in any app 1024 1025 Apps assigning shortcuts to commands 1026 Changing shortcuts, mostly in app menus. 1027 1028 • Keyboard Shortcuts (macOS) 1029 • [33]CustomShortcuts 1030 1031 • File > Print is now ⌘⇧P instead of ⌘P 1032 • Format > Italic is now ⌘⌥I instead of ⌘I 1033 • Disable ⌘⌥D from showing/hiding dock 1034 1035 Player piano apps 1036 Automation by creating fake key presses and clicks. 1037 1038 • [34]Keyboard Maestro 1039 • [35]BetterTouchTool 1040 1041 • F1 key outputs “on my way” 1042 • Pressing F2 clicks a Close button on screen 1043 • Prevent ⌘Q from working any keyboard from doing anything in any app, with 1044 exception of Notes 1045 1046 Commands and logic apps 1047 Automation by talking to other apps. 1048 1049 • [36]Keyboard Maestro 1050 • [37]Keyboard Cowboy 1051 • [38]BetterTouchTool 1052 • [39]Hammerspoon 1053 • Shortcuts (macOS) 1054 • Automator (macOS) 1055 • [40]Alfred Workflows 1056 1057 • if FaceTime is running, ⇧Esc mutes it even if you are not inside the app 1058 • Pressing F3 turns dark mode on and off 1059 • Pressing ⌘⌥V pastes selected text into previously opened application 1060 1061 Command palettes 1062 Visual command lines that offer app launching and automation. 1063 1064 • Spotlight (macOS) 1065 • [41]Alfred 1066 • [42] 1067 • [43]Quicksilver 1068 • [44]Raycast 1069 1070 • Pressing ⌘Space opens a command palette 1071 • Pressing ⌘⌥C shows clipboard history 1072 1073 Keyboard control inside specific apps 1074 Keyboard customization functionality living inside individual apps. 1075 1076 • Photoshop 1077 • DaVinci Resolve 1078 • VS Code 1079 • Nova 1080 • Chrome 1081 1082 • F1 can be configured to open a custom action in Photoshop 1083 • ⌥M can be configured to mute in Zoom 1084 • ⌘/ opens a command palette in Figma 1085 1086 Text expansion apps 1087 Stuff that helps specifically with typing text, including access to symbols and 1088 emoji. 1089 1090 • Text Replacements (macOS) 1091 • [45]Espanso 1092 • [46]TextExpander 1093 • [47]Typinator 1094 • [48]Rocket (emoji selector) 1095 1096 • Typing “omw” outputs “on my way” 1097 • Typing “$today” outputs today’s date in a nice format 1098 • Typing “$add” outputs shipping address 1099 1100 Output/Action 1101 1102 Technically, each one of these has two parts: the “engine” and the 1103 “configurator.” The keyboard firmware running on the keyboard and the firmware 1104 configurator app running on the web are two different things, and that is true 1105 for most that follows. In practice, however, you don’t often deal with this 1106 dichotomy directly. 1107 1108 Keyboard firmware apps 1109 1110 These apps control software that lives inside your keyboard (a.k.a. 1111 “firmware”). 1112 1113 [wooting] [tex] [via] 1114 Wooting app, Tex Shinobi app, and VIA firmware configurator (used by many 1115 keyboards) 1116 1117 These days, those are typically web apps or specialized desktop apps. On some 1118 keyboards, there is no visible UI and you talk to the keyboards only by 1119 mystical combinations of the Fn key. On other keyboards, the only UI is 1120 mechanical DIP switches. Almost none of these are particularly pleasant in use. 1121 1122 [dip-switch] DIP switches on my keyboard 1123 1124 What you can usually do here: 1125 1126 • Swap modifier keys around. Or, at the very least, allow to change the PC 1127 ordering with the Mac ordering, which are lightly incompatible with each 1128 other. 1129 • Assign key presses to the keys. E.g. the top left key is Q or F1, and so 1130 on. 1131 • Allow one key to output more characters than one. These sequences are 1132 usually called “macros.” 1133 • Decide what should the knobs do. Knobs are usually also keys in disguise – 1134 they typically emit a flurry of identical key presses whenever turned left 1135 or right. 1136 1137 This is the only place where you will be able to control: 1138 1139 • Any lights on your keyboard. 1140 • “Layers” of the keyboard – functionality that toggles between different key 1141 assignments. I would not worry too much about it first. 1142 • Specific features unique to your keyboard: optical switches, low-latency 1143 gaming functions, support for stenotyping, and so on. 1144 1145 A few function keys above F20 are also available, but get a teensy bit trickier 1146 in use. Buyer beware! 1147 1148 The one thing that’s important: there is a limited number of keys that can 1149 exist. Look at a regular desktop keyboard, and you can already see most of 1150 them. There are a few more function keys than you might think of – F13 to F20 – 1151 and some random stray keys like Switch to Kana. But this is all you get. You 1152 cannot invent a new key, and you cannot send an ASCII or emoji or a Unicode 1153 character because those don’t like to fly in economy over USB. 1154 1155 But! You can always send an F20 key and then decide what it does on the other 1156 side. You’ll also be able to tell an F20 key on one keyboard from one on 1157 another keyboard. So that gives you a lot of options, but just feels weird – 1158 like a secret strange key alias that exists only to travel across the USB 1159 cable. 1160 1161 Admit your fingers just ached a bit even just even imagining [49]this kind of a 1162 shortcut. 1163 And below I’ll show you how you can even make it work with other modifier keys 1164 for more options, even though it seems impossible given its nature. 1165 1166 Wait, you might ask: didn’t you just say above to create a new modifier key 1167 called Hyper? Yes and no. It’s another kind of trickery. You know how you can 1168 combine regular modifier keys as much as you want, and for example assign 1169 something to the extreme combination of ⇧⌃⌥⌘? Neither people nor applications 1170 do that often, because those shortcuts are incredibly unpleasant to press. But 1171 you can easily – via software – make Caps Lock behave the same as holding all 1172 the other modifier keys together. Then, pressing Caps LockD would be the same 1173 as pressing ⇧⌃⌥⌘D, but infinitely more pleasant on your fingers. This is the 1174 convention of a “hyper” key – in the background, it really is pressing all four 1175 of the other modifier keys for you! 1176 1177 [raycast-hy] [raycast-hy] 1178 Some apps, like Raycast, will allow you to show Hyper in a nice visual way 1179 (enabled in the second screenshot), but this is relatively rare. 1180 1181 USB side apps 1182 1183 It’s a bit hard to describe this category; my go-to metaphor is “an app that 1184 lives inside the USB port on your computer.” The inner workings are similar to 1185 keyboard’s firmware, operating on roughly the same terms, but now living inside 1186 your computer. 1187 1188 Apps in this category: 1189 1190 • macOS has a built-in small section of settings called Modifier Keys 1191 • [50]Karabiner Elements (my recommendation), [51]Kanata, and [52]KMonad 1192 1193 This is the only place you can: 1194 1195 • Do something with “media” or “system” keys – for example, if you want to 1196 control volume in new ways. Those shortcuts get routed to the system right 1197 after this juncture, and keyboard apps later in the process simply don’t 1198 even see them. 1199 • Do things depending on which keyboard did the key come from. (For apps 1200 later in the chain, all the keystrokes will be unattributed.) For example, 1201 F1 key from one keypad can be changed to quietly become ShiftF1 onward, but 1202 F1 from the main keyboard can be left alone. 1203 1204 My recommendation: Karabiner is free, and generally harmless. You don’t need it 1205 for most things, but if you want to start messing with modifier keys 1206 (especially on more than one keyboard), or do something with function keys, 1207 this is the way. It is interesting to install if only because it has a very 1208 useful event viewer, but its UI can feel a bit rough and intimidating. 1209 1210 This is where you would split function keys into two halves, if that’s what you 1211 wanted. 1212 1213 Karabiner will also allow you to do things that firmware allows you to do: 1214 swapping modifier keys, reassigning keys, and adding macros to keys. But my 1215 recommendation is not to do these things here unless absolutely necessary, 1216 because the UI either in firmware apps or in Keyboard Maestro is nicer. 1217 1218 Beware: Just like Keyboard Maestro feels a bit too at home by immediately 1219 enabling its ⌘Tab alternative, Karabiner might immediately change the meaning 1220 of your function keys. 1221 1222 Assigning shortcuts to commands 1223 1224 These apps exist solely to add, change, or remove keyboard shortcuts for 1225 existing app actions. Unfortunately, typically it only means commands you see 1226 in the menus, because macOS doesn’t have a more generalized command system. 1227 1228 Apps here: 1229 1230 • macOS has a relatively unpleasant-to-use system where you can disable or 1231 change many of its special system-wide shortcuts (like hiding dock via ⌘⌥D 1232 ), and assign or change shortcuts in other apps, based on their menus. 1233 • [53]CustomShortcuts is a nice free app that allows to assign or change 1234 shortcuts in other apps’ menus. 1235 • KeyClu and KeyCue show you cheat sheets of commands in other apps, in 1236 addition to allowing to change them. I did not have a lot of fun using 1237 them, and I wouldn’t recommend either. 1238 1239 If you choose to do things the way I do it, you never have to touch this 1240 category except for disabling any system shortcuts – like hiding the dock – 1241 that bother you or that you want to reclaim. Unfortunately, other apps cannot 1242 intercept those before they get dispatched to the operating system, and 1243 rewriting them earlier in the pipeline also doesn’t make sense. 1244 1245 However, apps in this category have an advantage: If you change a shortcut, it 1246 will show up changed in the menu, which might help you remember it. 1247 1248 Controlling things like a player piano would 1249 1250 Apps in this category think about computer operation solely as human interface 1251 events: keys going up and down, mouse cursor moving, trackpad clicks, and 1252 delays in between. 1253 1254 [closed] [open] 1255 A closed and open player piano 1256 1257 In response to you pressing the key, they can… pretend to press more keys or 1258 move a mouse to a specific place. They do it quickly and reliably. This simple 1259 automation can go very far, because what else do you do with the computer than 1260 pressing keys and clicking on things? 1261 1262 You can teach an app to press 6 keys after pressing a key: now you have text 1263 expansion. You can wire an app to press ↓ 30 times after pressing another key: 1264 now you recreated a page down key even if the app doesn’t support it. You can 1265 have an app press ⌘ and Space for you, and then type an app name followed by 1266 Enter – now you can launch anything you want. 1267 1268 But this is also very limiting, because… what else do you do with the computer 1269 than typing keys and clicking on things? Well, you do a lot of seeing and 1270 thinking. Here, not a lot of seeing and thinking is allowed, or even possible. 1271 You can make the mouse go to a specific place on your screen and simulate 1272 clicking the mouse in order to press a specific button that should be there, 1273 but you will never be fully sure. You can press the keys for the user, but you 1274 won’t understand what happens once those keys are pressed. This category is 1275 “write, but not read.” It’s not as much “fire and forget” as it is “close your 1276 eyes and fire.” 1277 1278 The apps in this category are: 1279 1280 • [54]Keyboard Maestro – my recommendation 1281 • BetterTouchTool – I found the UI perplexing and I would not recommend it 1282 1283 The apps in this category also typically cover the category below (but not vice 1284 versa), so let’s just jump in there. 1285 1286 Controlling things with commands and logic 1287 1288 The previous category was apps swatting at the system and its apps. This 1289 category is apps actually talking to them. The apps above were simple-minded; 1290 the apps in this category are multilingual. They know how to use the operating 1291 system’s internal language, they can chat to apps, and they have a rich 1292 internal language of their own. 1293 1294 It helps me sometimes to think of the previous category as old-time’y “player 1295 pianos” – they will continue mindlessly swinging their hammers up and down to 1296 press the piano keys even if you were to remove the strings. Apps in this 1297 category are more like musicians facing a music sheet: they won’t mimick the 1298 movements and report back you if the piano is broken, if they sat down to the 1299 wrong instrument, if it’s too early or too late to play, or if they’re… missing 1300 their arms. 1301 1302 In this command-and-logic category, instead of moving a cursor 20 pixels west 1303 and 40 pixels south to click a button, you can ask for a button by name and 1304 activate it; this will work even if the button moves, and you will be warned if 1305 the button is missing altogether. Instead of pressing ↓ 30 times, the app can 1306 invoke a scrollDown function. Instead of mimicking a human being and 1307 fake-pressing ⌘Space and then fake-typing the name of a program to launch it, 1308 an app in this category can ask the operating system to launch it, 1309 programo-a-programo. 1310 1311 Since communication with the system goes both ways, the app will also get 1312 feedback, and it can relay it back to you. It can tell you if it can or cannot 1313 find the program you requested to launch, and your logic can react to that 1314 knowledge. This also allows you to make conditional decisions: do different 1315 things whether some software exists or doesn’t, if the system is in a certain 1316 state, if you pressed some other key just before this one, and so on. 1317 1318 This is typically the right, smart way to do everything. So if we have this, 1319 why is the previous lizard-brain option even there? There are many reasons: 1320 1321 • It’s sometimes simpler to do a dumb thing and just fake-press some keys 1322 instead of learning an app’s specific language and rules. 1323 • The “player piano” method works for all apps, even those that don’t have a 1324 way to talk to on a higher level. 1325 • Even in apps with very rich communication vocabulary, some verbs might be 1326 forgotten. But the player piano method can travel anywhere your key presses 1327 and mouse clicks do. 1328 1329 There is a bit of an art of knowing which approach is better to take. Often, 1330 you will get to mix and match: for example, smart logic to determine which app 1331 is running, and then pretending to press ⌘T instead of asking to “open new tab” 1332 via official diplomatic channels. 1333 1334 Apps in this category and the category above: 1335 1336 • [55]Keyboard Maestro 1337 • [56]Keyboard Cowboy 1338 • BetterTouchTool 1339 1340 Apps only in this category: 1341 1342 • macOS has built in Shortcuts and Automator (an older version of the 1343 Shortcuts concept) 1344 • in macOS, you can also communicate with apps by writing scripts in 1345 AppleScript 1346 1347 Other apps: 1348 1349 • [57]Alfred (Workflows) 1350 1351 Command palettes and other visible UI 1352 1353 The apps in this category are somewhat similar to the apps above, but they 1354 approach the challenge from a slightly different viewpoint: they want to create 1355 the best command line for your computer. On your Mac, you already have a 1356 user-friendly Spotlight under ⌘Space, and the extremely unfriendly Terminal. 1357 There are many third-party apps that try to find a different take somewhere in 1358 between these two. 1359 1360 [command-ba] LaunchBar, Alfred, Spotlight, and Raycast 1361 1362 While the above command-and-logic apps allowed you to automate things quietly 1363 throughout the operating system, this category gives you one specific place you 1364 invoke via one perfect shortcut, and a lot of magical things happen only inside 1365 that place. 1366 1367 The options here might be similar to the category above: building complex 1368 logic, communicating with the apps and the system, chaining many repetitive 1369 events. Some of these apps throw in nice sweeteners, like better clipboard 1370 control or window management options. Some will also cover other categories, 1371 for example assigning shortcuts to commands, as a bonus. 1372 1373 Apps in this category: 1374 1375 • Spotlight (built into macOS) 1376 • [58]Alfred, [59]LaunchBar, [60]Quicksilver, and [61]Raycast 1377 1378 Some apps in the previous category, like Keyboard Maestro, also do things here 1379 – but with less success. 1380 1381 Keyboard customization inside individual apps 1382 1383 Some specific apps, especially large ones, offer built-in versions of 1384 functionality above. Typically, it’s these three categories: 1385 1386 • assigning shortcuts to its own actions 1387 • control via commands and logic 1388 • command palettes 1389 1390 Some examples: 1391 1392 • many apps like Sublime Text, Figma, and Linear have their own command 1393 palettes 1394 • Chrome allows you to assign keyboard shortcuts to launch extensions (or 1395 specific actions extensions expose) 1396 • Sublime Text allows you to record and replay keystrokes 1397 • Zoom allows you to change its shortcuts and even make them “global” (it 1398 understands the app is often in the background). 1399 1400 This might be the only reasonable option for single letter key and Shift 1401 shortcuts. These are always very context dependent – ShiftH in the app can flip 1402 horizontally, but ShiftH in a text field needs to output a letter – and much 1403 harder to program outside of the app where the context might be gone. 1404 1405 These are usually better integrated than anything on the “outside,” as they can 1406 have more awareness of the conditions of the underlying app, can offer access 1407 to all the commands (even those not in the menus), and add unique features (for 1408 example, awareness of different modes). But of course, each one is a separate 1409 system with a unique interface you have to learn, and the UI quality varies a 1410 lot. 1411 1412 [davinci-re] [nova] [vs-code] [sublime-te] 1413 Keyboard setting screens in DaVinci Resolve, Nova, Visual Studio Code, and 1414 Sublime Text 1415 1416 Text expansion 1417 1418 These apps are specifically for dealing with text and typing – e.g. any place 1419 where you see a blinking text cursor. 1420 1421 Behind the scenes, smarter player pianos press ⌥Backspace to delete the entire 1422 word, and then put stuff in the clipboard and paste from there in one go, to 1423 avoid seeing all the little steps. But the challenges remain. 1424 1425 Text expansion can exist on a lower “player piano” level, but it will be 1426 appropriately naïve: if you type “omw”, the app then has to fake press 1427 Backspace to delete what you already typed, and then type “on my way” for you. 1428 1429 Some text expansion apps do this, others integrate into the system on a higher 1430 level (with visible UI and more nuanced options). Either way specialized text 1431 expansion apps are typically simpler to use, just because, well, they are 1432 simpler. 1433 1434 “Player piano” text expansion vs. integrated text expansion 1435 1436 I don’t use this category as much, so I have no strong recommendations, but 1437 here are some apps I heard people like: 1438 1439 • macOS has native text expansion (called Text Replacements). It’s also 1440 synced with iPhone and other devices. 1441 • [62]Espanso, [63]TextExpander, and [64]Typinator 1442 1443 Some of these apps also throw in a nicer character/emoji selector, and there 1444 are even specific emoji selectors or expanders, like [65]Rocket. 1445 1446 Choose your own adventure 1447 1448 This concludes the “choose your own adventure” portion! 1449 1450 Okay, we are done with theory! And now, onto examples… 1451 1452 That’s it! 1453 1454 This can all get pretty addictive, or at least it was that for me. I’ve been 1455 trying all sorts of interesting things, interactions I always wanted to try, 1456 and new combinations of things. 1457 1458 Here is what I learned, summarized: 1459 1460 • Don’t overthink the system. Start with just one or two things that seems 1461 fun to you. 1462 • Break all the rules. You’re designing for the audience of one. 1463 • Listen to your fingers. If they already like something, add more of that. 1464 • Optimize for what’s fun to press physically; don’t create complex 1465 incantations that contort your hands. 1466 • Don’t underestimate seemingly tiny improvements, as they can add up 1467 quickly. 1468 • Put related things side by side, or under modifier keys. 1469 • Use spatial mapping (things on the left in real life are on the left on 1470 your keyboard). 1471 • If you can, split the keys into “for the entire system” and “for the 1472 current app” to make it easier for yourself. 1473 • You can have more than one key for one action, and more than one action for 1474 one key. 1475 • Make shortcuts “global” so you can press them at any time you want. 1476 • Don’t overthink automation. Automation is not the be all end all, and 1477 sometimes you want to slow down on purpose, just to enjoy the ride. 1478 • Above all, have fun! 1479 1480 Things can get more complex than above, of course. All of this is software 1481 running on your computer, and software talks. Karabiner actually has some 1482 system logic to do things depending on which app is in front. Karabiner can 1483 send things directly to Keyboard Maestro and Keyboard Maestro to Karabiner, in 1484 violation of the flow in the chart above. If you are so inspired, you can even 1485 quietly open an invisible (headless) Chrome to open your keyboard’s web page to 1486 change its lights or layers! 1487 1488 My last recommendation would be to write yourself a little cheat sheet on paper 1489 somewhere before the shortcuts truly become second nature. 1490 1491 I hope you enjoyed this guide. Please [66]let me know what you come up with or 1492 if you have any questions! 1493 1494 Copyright © Marcin Wichary 1495 1496 Published on 12 May 2026. 1497 1498 [67][68][69][70] 1499 1500 Thank you to Ezra Spier for support and feedback on earlier versions of this 1501 essay. 1502 1503 Thank you to everyone working on keyboard-related tools in general. 1504 1505 More keyboard stories: 1506 1507 • [71]I don’t know what is Apple’s endgame for the Fn/Globe key, and I’m not 1508 sure Apple knows either 1509 • [72]The primitive tortureboard 1510 • [73]The day Return became Enter 1511 1512 1513 References: 1514 1515 [2] https://aresluna.org/ 1516 [3] https://wooting.io/uwu 1517 [4] https://www.keebmonkey.com/products/megalodon-triple-knob-macro-pad 1518 [5] https://worklouder.cc/creator-micro-2 1519 [6] https://www.8bitdo.com/retro-18-mechanical-numpad/ 1520 [7] https://www.keychron.com/search?options%5Bprefix%5D=last&q=numpad 1521 [8] https://www.eweadn.com/products/eweadn-nk20-mechanical-macropad?variant=45446876496025 1522 [9] https://web.archive.org/web/20190124214556/https://www.bxfoundry.com/home/30-bx-10-cyclops-usb-controller.html 1523 [10] https://www.keyboardmaestro.com/ 1524 [11] https://karabiner-elements.pqrs.org/ 1525 [14] https://www.houdah.com/customShortcuts/ 1526 [15] https://aresluna.org/frame-of-preference/ 1527 [16] https://youtu.be/iUhu7sN474o 1528 [17] https://archive.org/details/wicharytypewriter?sort=title 1529 [18] https://aresluna.org/fn/ 1530 [19] https://unsung.aresluna.org/how-to-shoot-a-screen-using-a-board-of-keys/ 1531 [20] https://www.youtube.com/watch?v=qKs_-uN6SSQ 1532 [21] https://unsung.aresluna.org/adjust-in-smaller-steps/ 1533 [22] https://en.wikipedia.org/wiki/Bookmarklet 1534 [23] https://unsung.aresluna.org/deterministic-vs-idempotent/ 1535 [24] https://unsung.aresluna.org/ 1536 [25] https://unsung.aresluna.org/raycasts-confetti-cannon/ 1537 [26] https://aresluna.org/key-in-sight/#the-life-of-a-keystroke 1538 [27] https://aresluna.org/key-in-sight/#thats-it 1539 [30] https://karabiner-elements.pqrs.org/ 1540 [31] https://github.com/jtroo/kanata 1541 [32] https://github.com/kmonad/kmonad 1542 [33] https://www.houdah.com/customShortcuts/ 1543 [34] https://www.keyboardmaestro.com/ 1544 [35] https://folivora.ai/ 1545 [36] https://www.keyboardmaestro.com/ 1546 [37] https://github.com/zenangst/KeyboardCowboy 1547 [38] https://folivora.ai/ 1548 [39] https://www.hammerspoon.org/ 1549 [40] https://www.alfredapp.com/ 1550 [41] https://www.alfredapp.com/ 1551 [42] https://www.obdev.at/products/launchbar 1552 [43] https://qsapp.com/ 1553 [44] https://www.raycast.com/ 1554 [45] https://espanso.org/ 1555 [46] https://textexpander.com/ 1556 [47] https://ergonis.com/en/typinator/features/ 1557 [48] https://matthewpalmer.net/rocket/ 1558 [49] https://unsung.aresluna.org/save-for-web-claws/ 1559 [50] https://karabiner-elements.pqrs.org/ 1560 [51] https://github.com/jtroo/kanata 1561 [52] https://github.com/kmonad/kmonad 1562 [53] https://www.houdah.com/customShortcuts/ 1563 [54] https://www.keyboardmaestro.com/ 1564 [55] https://www.keyboardmaestro.com/ 1565 [56] https://github.com/zenangst/KeyboardCowboy 1566 [57] https://www.alfredapp.com/ 1567 [58] https://www.alfredapp.com/ 1568 [59] https://www.obdev.at/products/launchbar 1569 [60] https://qsapp.com/ 1570 [61] https://www.raycast.com/ 1571 [62] https://espanso.org/ 1572 [63] https://textexpander.com/ 1573 [64] https://ergonis.com/en/typinator/features/ 1574 [65] https://matthewpalmer.net/rocket/ 1575 [66] https://aresluna.org/ 1576 [67] mailto:[email protected] 1577 [68] https://mastodon.online/@mwichary/116562952973195259 1578 [69] https://bsky.app/profile/aresluna.org/post/3mlofastzhc2u 1579 [70] https://aresluna.org/main.rss 1580 [71] https://aresluna.org/fn 1581 [72] https://aresluna.org/the-primitive-tortureboard/ 1582 [73] https://aresluna.org/the-day-return-became-enter