7 из 132 мин

Hammerspoon

Hammerspoon: иллюстрация 1

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.

Оглавление серии
  1. Клавиатурные слои
  2. Karabiner = набор JSON-правил
  3. 1) Caps Lock = Hyper
  4. 2) Слой на Space: tap = пробел, hold = F18
  5. 3) backtick hold = F17
  6. 4) RU-раскладка: точечные правила только для русского набора
  7. Hammerspoon
  8. Window Manager в Hammerspoon
  9. Медиа-контроль как сценарии в Hammerspoon
  10. Hammerspoon как локальный сервер и “пульт” управления
  11. Мониторы и стабильность рабочего места (Hammerspoon)
  12. MIDI-клавиатура и OBS как аппаратный контроллер (Hammerspoon)
  13. Тема клавиатурных слоев на этом этапе закрыта.