Hammerspoon

Hammerspoon это инструмент, который превращает macOS в настраиваемую среду под конкретный workflow. По сути, это лёгкая надстройка, которая слушает события клавиатуры и системы и выполняет действия, описанные кодом на Lua. Без лишнего UI и “мастеров настроек”: поведение задаётся напрямую, в виде правил и сценариев.
Главная ценность Hammerspoon в том, что он работает не как “ещё один ремаппер”, а как движок логики:
Запуск/фокус приложений, окна (позиции/раскладки/мониторы), навигация по окнам, медиа-контроль, системные действия, логика (проверки/задержки/фолбэки).
В моей практике это выглядит так:
-
Caps Lock (мой “суперклавишный” слой): Caps Lock + любая цифра/клавиша у меня привязаны к запуску или фокусу конкретных приложений. Это основной способ перемещаться по системе без Dock и поиска.
-
Space-layer: удержание Space включает отдельный режим, где собраны быстрые действия, в том числе медиа-контроль и запуск дополнительных приложений.
-
BackTick-layer: удержание backtick завязано на Leader Key: это вход в подслои, где, например, отдельные клавиши открывают нужные папки в Finder или конкретные проекты в ChatGPT. Я описывал об этом ранее тут.
Технически всё это описывается в конфигурации init.lua. Стандартный путь:
~/.hammerspoon/init.lua
Конфиг удобно хранить как код: версионировать, переносить на другие устройства, развивать поэтапно. В моём сетапе конфигурация синхронизируется через iCloud (через симлинк): система видит стандартный путь ~/.hammerspoon/, но фактически конфиг лежит в папке iCloud Drive, поэтому одинаковое поведение доступно на всех устройствах.
Базовый пример того, как выглядит действие в Hammerspoon: создаётся хоткей и привязывается к функции, которая делает нужное действие, например открывает приложение. В реальном конфиге это дополняется слоями, модальными режимами и сценариями, которые делают управление системой быстрым и предсказуемым.
Как выглядит запуск приложения в Hammerspoon
Базовая конструкция в конфиге выглядит так:
hs.hotkey.bind(hyper, "i", function()
hs.application.open("путь к приложению")
end)
-
hs.hotkey.bind(...)регистрирует сочетание клавиш -
hyperэто набор модификаторов (Hyper-слой) -
“
i” это клавиша-триггер внутри слоя -
function() ... endэто действие, которое выполняется при нажатии -
hs.application.open(...)открывает приложение по точному пути
Альтернативный вариант для многих задач: hs.application.launchOrFocus("AppName").
В следующем посте расскажу про Window Manager в Hammerspoon.