Marcin Wichary
12 May 2026 / 9,400 words, but don’t even worry about it
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.
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 let me know if you’d like me to cover Windows as well.
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 UwU gives you three big keys and three small ones; the build quality is nice and the price is relatively low.
- Megadolon Triple Knob Macro Pad is knob-heavy, but it also gives you 16 keys.
- 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. 8BitDo’s is nice and relatively affordable, and Keychron offers a few different keypads – those are a bit more pricey, though. I also used Eweadn NK20.
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.
- 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.
How to have fun with software
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.
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 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 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 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).
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.
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
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 CustomShortcuts app, which offers a tighter UI and autocomplete.
But I like unifying everything in Keyboard Maestro (and avoiding Settings like a plague), and so I did it there instead:
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 ⌘':
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.
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.
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.
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 the THX logo scares the hell out of them.
Actually, even more fun.
I also do 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.
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 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.)
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.
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 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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
I made keystrokes replace some bookmarklets.
I use Web Archive to get to older versions of pages, and previously had a 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!
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)
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 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.
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.
(Unfortunately, this approach has limitations, because Mac’s Siri cannot do everything. But it is a very simple starting point.)
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.
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.
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 my blog.
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.
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.
It all required a bit of a deeper surgery, because Keyboard Maestro bundles Shifts together by default, but I made it happen.
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:
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.
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": falsein 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.
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 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…
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:
- 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”
- 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
- Keyboard Shortcuts (macOS)
- CustomShortcuts
- File > Print is now ⌘⇧P instead of ⌘P
- Format > Italic is now ⌘⌥I instead of ⌘I
- Disable ⌘⌥D from showing/hiding dock
- 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
- Keyboard Maestro
- Keyboard Cowboy
- BetterTouchTool
- Hammerspoon
- Shortcuts (macOS)
- Automator (macOS)
- 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
- Pressing ⌘Space opens a command palette
- Pressing ⌘⌥C shows clipboard history
- 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 Replacements (macOS)
- Espanso
- TextExpander
- Typinator
- Rocket (emoji selector)
- Typing “omw” outputs “on my way”
- Typing “$today” outputs today’s date in a nice format
- Typing “$add” outputs shipping address
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”).
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.
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.
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.
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!
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
- Karabiner Elements (my recommendation), Kanata, and 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.
- 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.
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:
- 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:
- Keyboard Maestro
- 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:
- 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.
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)
- Alfred, LaunchBar, Quicksilver, and 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).
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.
Text expansion
These apps are specifically for dealing with text and typing – e.g. any place where you see a blinking text cursor.
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.
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.
- Espanso, TextExpander, and Typinator
Some of these apps also throw in a nicer character/emoji selector, and there are even specific emoji selectors or expanders, like 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 let me know what you come up with or if you have any questions!