1P by GN⁺ 15시간전 | ★ favorite | 댓글 1개
  • macOS 환경을 Lua 스크립트로 제어할 수 있는 오픈소스 자동화 도구로, 운영체제와 스크립팅 엔진을 연결하는 브리지 역할을 수행
  • 다양한 확장 모듈(extensions) 을 통해 시스템 기능을 노출하고, 이를 조합해 창 관리, 입력 제어 등 복잡한 작업을 자동화 가능
  • 설치는 Homebrew 또는 수동 다운로드 방식으로 지원되며, 사용자 설정 파일 ~/.hammerspoon/init.lua를 직접 작성해야 동작
  • 프로젝트는 Mjolnir에서 포크되어 더 통합된 사용자 경험을 제공하며, 지속적으로 시스템 API 확장확장 간 통합 강화를 목표로 함
  • 개발자와 파워유저가 macOS를 세밀하게 제어할 수 있는 고급 자동화 플랫폼으로 자리잡음

Hammerspoon 개요

  • Hammerspoon은 macOS(구 OS X)의 강력한 자동화 도구로, 운영체제와 Lua 스크립팅 엔진을 연결하는 브리지 형태로 동작
    • 사용자는 Lua 스크립트를 통해 시스템의 다양한 기능을 제어 가능
  • 핵심 기능은 확장 모듈(extensions) 을 통해 제공되며, 이 모듈들이 시스템의 특정 기능을 노출함
    • 이를 이용해 창 관리, 오디오 제어, 입력 장치 설정 등 다양한 자동화 작업을 수행 가능

설치 방법

  • 수동 설치
    • GitHub의 최신 릴리스를 다운로드
    • Hammerspoon.appApplications 폴더로 이동
  • Homebrew 설치
    • 명령어: brew install hammerspoon --cask

초기 설정 및 활용

프로젝트의 역사

  • 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가 훨씬 쓸 만해졌음
    • 설정 파일을 공유해줄 수 있는지 궁금함
    • 예시 덕분에 나도 어떻게 활용할지 아이디어가 생겼음
  • 예전엔 tiling window manager를 좋아했지만, Mac에서는 시각적으로 복잡한 앱을 많이 써서 화면 배치가 더 중요해졌음
    메일, IDE, 브라우저, 터미널, 채팅 앱 각각에 맞는 창 크기 프리셋을 만들어 Hammerspoon 단축키로 전환함
    IDE가 빌드 중일 때 브라우저를 띄워도 하단 로그를 볼 수 있고, 모달 단축키로 앱 전환도 빠름
    다단계 모달 개념이 흥미로움

  • Hammerspoon의 메인테이너로서, 현재 Lua에서 JavaScript로 전환하는 v2를 개발 중임

    • Lua를 좋아해서 Hammerspoon이 Lua를 쓸 수 있는 거의 유일한 이유였는데, JS로 바뀌면 아쉽지만 현실적인 선택이라 생각함
    • 오랫동안 써온 사용자로서 Lua 전환 이유가 궁금하지만, 어쨌든 훌륭한 앱이라 감사함
    • “18일 후 출시인가요?”라며 농담 섞인 기대를 표현함
    • v2의 비전과 아키텍처 변경 이유, JS 선택 배경이 궁금함
    • AppleScript의 JavaScript 지원과 시너지가 생길지도 궁금함
  • 내 프로젝트 SpacehammerSpacemacs/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로 다시 작성해야 한다면 꽤 고생할 듯함