A More Productive OSX π
Hammerspoon and Karabiner-Elements are all you need for a frictionless OSX experience
I use two tools to massively boost my productivity while working on OSX. This article describes my configuration and how you can customize it to your own needs.
Hammerspoon is an incredibly powerful wrapper around OSX, allowing you to easily interact with the OS via scripting, such as trigger notifications, move and resize windows, open applications, etc.
Karabiner-Elements is a keyboard customization tool. I use this to remap keys to make it simple to trigger my Hammerspoon scripts from the keyboard.
Features
- position - Instantly resize windows into halves of your screen
- focus - Shift focus (i.e. click) onto an app, or launch if not open
- monitor - Move windows between external monitors or spaces
- gcal - Menu bar to see all of your upcoming calendar events
- timer - Pomodoro timer to keep you focused
Position
Window positioning module borrowed from Miro Mannino.
hyper + right
resizes window to right side of screen.hyper + left
resizes window to left side of screen.hyper + up
resizes window to upper side of screen.hyper + down
resizes window to bottom side of screen.
Repeated presses of the above will cycle half, quarter, and 2/3 of screen.
hyper + enter resizes window to entire screen
Repeated presses of hyper + enter will cycle through resizing similarly.

Focus
File containing hotkey bindings. Each segment binds a hotkey to a useful application - such as hyper + c
to launch Chrome

Monitor
Keybindings used to interact with an external monitor, or between spaces within a monitor. Very useful for moving applications back and forth.
hyper + shift + right
cycles the current application to monitor on the righthyper + shift + left
cycles the current application to monitor on the lefthyper + shift + h
moves the current application to a space on the lefthyper + shift + l
moves the current application to a space on the right

gcal
Constructs a menubar. Uses the Google Calendar API to fetch events, colors, timing, etc. to a json file, which are then loaded into the menubar on each refresh.

timer
A simple pomodoro timer! Sets a default time for 25 minutes, with option to pause and cancel.

How to use
Karabiner-Elements
Karabiner-Elements is a relatively new tool made when OSX Sierra came out. As a result, installing it is a bit of a hassle as itβs still under continuous development. Follow the instructions in the How to Build
section in the link above. It requires installing C++ Boost Libraries, XCode Build tools beforehand but should compile into a standalone application, which doesnβt need to be compiled every time you update.
edit: it can now be downloaded directly as a package!
Use Karabiner to make a hyper
key. I rebinding my caps lock key (which I never use) into ctrl+alt+cmd
. Do this by editing your karabiner.json
file located in ~/.config/karabiner
. See my file here that you can copy/paste
Hammerspoon
Download the latest release. I recommend familiarizing with it through the getting started guide here.
Hammerspoon interacts with the operating system using the Lua language, which is an easy to learn scripting language. Whenever hammerspoon is loaded or refreshed, your ~/.hammerspoon/init.lua
file is processed. You can use the console as a REPL for lua code.
To start, I defined the hyperkey
init.lua
hyper = {"ctrl", "alt", "cmd"}
and followed the docs to build the focusing hotkey
focus.lua
hs.hotkey.bind(hyper, "C", function ()
hs.application.launchOrFocus('Google Chrome')
end)
hs.hotkey.bind(hyper, 'E', function ()
hs.application.launchOrFocus('Visual Studio Code')
end)
The file focus.lua
is separate from init.lua
. To activate this code, all I need to do is include focus.lua
init.lua
require('focus')
Hammerspoon has a great community that have built a ton of other spoons and sample configurations. For instance, I borrowed the fantastic resizing hotkey functionality from another user.