Hammerspoon - Lua로 구현된 강력한 macOS 데스크톱 자동화 도구
(github.com/Hammerspoon)- macOS 환경을 Lua 스크립트로 제어할 수 있는 오픈소스 자동화 도구로, 운영체제와 스크립팅 엔진을 연결하는 브리지 역할을 수행
- 다양한 확장 모듈(extensions) 을 통해 시스템 기능을 노출하고, 이를 조합해 창 관리, 입력 제어 등 복잡한 작업을 자동화 가능
- 설치는 Homebrew 또는 수동 다운로드 방식으로 지원되며, 사용자 설정 파일
~/.hammerspoon/init.lua를 직접 작성해야 동작 - 프로젝트는 Mjolnir에서 포크되어 더 통합된 사용자 경험을 제공하며, 지속적으로 시스템 API 확장과 확장 간 통합 강화를 목표로 함
- 개발자와 파워유저가 macOS를 세밀하게 제어할 수 있는 고급 자동화 플랫폼으로 자리잡음
Hammerspoon 개요
- Hammerspoon은 macOS(구 OS X)의 강력한 자동화 도구로, 운영체제와 Lua 스크립팅 엔진을 연결하는 브리지 형태로 동작
- 사용자는 Lua 스크립트를 통해 시스템의 다양한 기능을 제어 가능
- 핵심 기능은 확장 모듈(extensions) 을 통해 제공되며, 이 모듈들이 시스템의 특정 기능을 노출함
- 이를 이용해 창 관리, 오디오 제어, 입력 장치 설정 등 다양한 자동화 작업을 수행 가능
설치 방법
-
수동 설치
- GitHub의 최신 릴리스를 다운로드
-
Hammerspoon.app을Applications폴더로 이동
-
Homebrew 설치
- 명령어:
brew install hammerspoon --cask
- 명령어:
초기 설정 및 활용
- 설치 직후에는 아무 동작도 하지 않으며, 사용자가 직접
~/.hammerspoon/init.lua파일을 만들어야 함 - 참고 가능한 리소스:
- Getting Started Guide
- API 문서
- FAQ
- 샘플 설정 모음
- 개발자 기여 가이드
- IRC 채널(#hammerspoon on Libera) 및 Google Group 지원
프로젝트의 역사
- Hammerspoon은 Mjolnir 프로젝트의 포크로 시작됨
- Mjolnir는 최소한의 애플리케이션 구조를 지향하며, 확장을 외부 Lua 패키지로 관리
- Hammerspoon은 이를 기반으로 더 통합된 사용자 경험을 제공하기 위해 개발됨
프로젝트의 향후 방향
- 시스템 API 확장 범위 확대
- 확장 모듈 간 통합 강화
- 사용자 경험 개선
기술 구성 및 통계
- 주요 언어 구성: Objective-C 51%, Lua 24.7%, C 16.3%, HTML 5.6%, Shell 0.7%, Python 0.5%
- GitHub 통계: 14.9k stars, 678 forks, 133명 기여자
- 라이선스: MIT License
- 공식 웹사이트: www.hammerspoon.org
주요 주제 태그
- macOS, automation, lua, objective-c, osx, mjolnir, hammerspoon, irc
Hacker News 의견들
-
Hammerspoon은 내 Mac을 하나로 묶는 접착제 같은 존재임
Safari 탭을 Obsidian 문서로 덤프하거나, Hyper 키 조합(Ctrl+Opt+Cmd) 으로 Safari, Finder, Terminal, VS Code, Notes 등 주요 앱을 새 창으로 띄움
AeroSpace와 연동해 창을 다른 모니터로 옮기거나, 두 창을 나란히 배치하고, 교체하거나, 모든 창을 한 워크스페이스로 모으는 등 다양한 자동화를 설정해둠
또한 백그라운드 앱이 죽으면 자동으로 재시작하고, 디스크 이미지가 휴지통으로 가면 언마운트하도록 프롬프트를 띄움
Skim과 연동해 Markdown 링크로 PDF의 특정 섹션으로 점프하는 기능도 있음- 나는 두 가지 용도로만 씀 — Teams 창 목록을 확인해 회의 중이면 HomeAssistant에 웹훅을 보내 조명 프리셋을 바꾸고, ical 캘린더를 내려받아 15분 내 회의가 있으면 “pending” 프리셋으로 전환함
원래 Outlook 공유 링크를 썼지만 인증이 필요해져서 Apple Calendar를 경유함. 다만 일정의 40%만 동기화되는 건 여전히 미스터리임 - Safari 탭을 Obsidian으로 덤프하는 방법이 궁금함. 간단한 기능인지, 아니면 공유할 만한 스크립트가 있는지 알고 싶음
- 정말 인상적인 ‘spooning’ 임. 나는 창 관리용으로만 쓰지만, 그 덕분에 macOS가 훨씬 쓸 만해졌음
- 설정 파일을 공유해줄 수 있는지 궁금함
- 예시 덕분에 나도 어떻게 활용할지 아이디어가 생겼음
- 나는 두 가지 용도로만 씀 — Teams 창 목록을 확인해 회의 중이면 HomeAssistant에 웹훅을 보내 조명 프리셋을 바꾸고, ical 캘린더를 내려받아 15분 내 회의가 있으면 “pending” 프리셋으로 전환함
-
예전엔 tiling window manager를 좋아했지만, Mac에서는 시각적으로 복잡한 앱을 많이 써서 화면 배치가 더 중요해졌음
메일, IDE, 브라우저, 터미널, 채팅 앱 각각에 맞는 창 크기 프리셋을 만들어 Hammerspoon 단축키로 전환함
IDE가 빌드 중일 때 브라우저를 띄워도 하단 로그를 볼 수 있고, 모달 단축키로 앱 전환도 빠름
다단계 모달 개념이 흥미로움 -
Hammerspoon의 메인테이너로서, 현재 Lua에서 JavaScript로 전환하는 v2를 개발 중임
- Lua를 좋아해서 Hammerspoon이 Lua를 쓸 수 있는 거의 유일한 이유였는데, JS로 바뀌면 아쉽지만 현실적인 선택이라 생각함
- 오랫동안 써온 사용자로서 Lua 전환 이유가 궁금하지만, 어쨌든 훌륭한 앱이라 감사함
- “18일 후 출시인가요?”라며 농담 섞인 기대를 표현함
- v2의 비전과 아키텍처 변경 이유, JS 선택 배경이 궁금함
- AppleScript의 JavaScript 지원과 시너지가 생길지도 궁금함
-
내 프로젝트 Spacehammer는 Spacemacs/Doom에서 영감을 받은 Hammerspoon 모달 툴킷임
“alt+spc a b”로 브라우저를 열거나, “alt+spc m j/k”로 볼륨 조절, 혹은 어떤 앱의 텍스트든 Emacs에서 편집 가능함
Fennel로 작성되어 REPL을 통해 실시간 개발 가능하고, Yabai 같은 윈도우 매니저와도 잘 연동됨- “볼륨 조절 키가 키보드에 있는데…”라며 농담을 던짐. 다만 Touch Bar Mac 사용자라면 이해함
-
나는 Hammerspoon으로 가짜 타일링 윈도우 매니저를 구현함
창을 화면 비율로 재배치하고, 단축키로 모니터 간 이동도 가능함- AeroSpace를 추천함. i3 사용자에게 익숙한 방식으로 잘 작동함
- 나도 비슷하게 쓰지만, 좌·중앙·우 배치까지 추가함. 수학으로 창 크기를 계산하는 게 기괴하지만 멋짐
- hammerspoon-shiftit을 사용함. 죽은 ShiftIt을 완벽히 재현한 프로젝트임
- 나도 hyper+화살표로 창을 이동시키고, hyper+enter로 전체화면 전환함. 자연스러운 창 이동감이 마음에 듦
- miro-windows-manager 플러그인을 좋아함. 반쪽/3분할 배치를 순환시키기 좋음
-
최근 처음으로 Hammerspoon을 써봤는데, 메뉴바 앱의 옵션에 단축키를 직접 바인딩하려고 ChatGPT가 AppleScript로 스크립트를 짜줬음
정말 멋지고, 앞으로 더 많은 자동화를 시도해볼 생각임 -
Zoom의 화면 공유 컨트롤을 숨기는 스크립트를 만들어서, ESC를 눌러도 다시 나타나지 않게 함
- “이것만으로도 설치할 가치가 있다”는 반응을 받음
-
내 전체 설정은 단 한 줄임
ctrl + D로 그리드 인터페이스를 띄워 창을 원하는 위치로 조정함
다른 윈도우 매니저보다 단순하고 직관적임- “이 기능이 있는 줄 몰랐다”며 놀람.
hs.grid.setGrid('4x4')로 그리드 크기를 바꾸거나,hs.grid.ui.textSize로 글자 크기를 조정할 수도 있음 - 나도 비슷한 기능을 쓰지만, 한쪽에서만 리사이즈하는 등 더 유연하게 구성함
- 여러 기기 간 설정 동기화는 dotfile 지옥이 될 수 있음. 그래도 마우스를 안 쓰고 창을 제어할 수 있는 몇 안 되는 현대적 도구임
- 터미널에서
Ctrl+D와 충돌하지 않는지 궁금함
- “이 기능이 있는 줄 몰랐다”며 놀람.
-
나도 Hammerspoon 덕분에 창 전환 스트레스에서 해방됨
Cmd+1~9로 Chrome 창을 전환하고, Cmd+0으로 선택 다이얼로그를 띄움
내 설정 파일을 참고하면 창 이름을 기억하고 재시작 후에도 유지됨 -
Hammerspoon은 Mac의 Automator보다 강력함
Automator가 이제 JavaScriptCore를 지원하듯, Hammerspoon도 Lua 대신 JS를 쓴다면 Node 패키지를 그대로 활용할 수 있을 것임
Lua로 다시 작성해야 한다면 꽤 고생할 듯함