config.toml 파일을 사용하여 Snapzy를 프로그래밍 방식으로 구성하고, 이식 가능한 설정 관리, 자동 백업 및 dotfiles 워크플로 동기화를 구현합니다.
개요
파워 유저, 개발자 및 시스템 관리자를 위해 Snapzy는 표준 TOML 파일(config.toml)을 사용한 고급 프로그래밍 방식 구성을 지원합니다. 이를 통해 모든 애플리케이션 설정을 일반 텍스트로 관리하고, dotfiles 저장소를 사용하여 동기화하며, macOS 환경 전반에 걸쳐 자동화된 배포를 설정할 수 있습니다.
시작하기
1. 설정 폴더 권한 허용
Snapzy 설정(Cmd + ,)을 열고 고급 (Advanced) 탭으로 이동합니다.
**config.toml 설정 (Set Up config.toml)**을 클릭합니다.
시스템 대화 상자가 나타나 설정 디렉터리를 선택하거나 액세스 권한을 부여하도록 요청합니다. 설정 디렉터리(일반적으로 ~/.config/snapzy/)를 선택하고 **액세스 허용 (Grant Access)**을 클릭합니다.
액세스가 허용되면 Snapzy는 자동으로 다음 경로에 기본 config.toml 파일을 생성합니다:
~/.config/snapzy/config.toml
2. 동기화 및 백그라운드 로딩
실행 시 자동 적용: 앱이 시작될 때마다 Snapzy는 config.toml을 구문 분석하고 유효성을 검사합니다.
자동 백그라운드 동기화: 앱은 백그라운드에서 config.toml 파일의 변경 사항을 모니터링합니다. 편집기에서 직접 저장된 변경 사항은 몇 초 내에 자동으로 검증되고 적용됩니다(불완전한 읽기를 방지하기 위해 디바운스 처리가 되어 있습니다).
수동 동기화: 고급 설정 탭에 있는 config.toml 동기화 (Sync config.toml) 버튼을 누르면 설정을 즉시 다시 로드할 수 있습니다.
기본값 복원:기본값 복원을 클릭하면 기존 TOML 파일이 리셋되고 공장 초기값으로 덮어씁니다.
TOML 파일 예제 템플릿
아래는 모든 구성 가능한 프로퍼티와 각 특성을 설명하는 주석이 포함된 완전한 config.toml 파일 템플릿입니다.
# Snapzy TOML 설정 스키마 버전 (반드시 1이어야 함)
schema_version = 1
# 이 파일에 필요한 최소 Snapzy 버전
snapzy_min_version = "1.20.0"
[general]
language = "system" # "system" 또는 언어 코드: "en", "vi", "ja", "ko", "ru", "zh", "zh-tw"
appearance = "system" # 테마 설정: "system", "light" 또는 "dark"
play_sounds = true # 캡처/녹화 시 사운드 효과 재생
start_at_login = false # macOS 시작 시 Snapzy 자동 실행
export_location = "~/Pictures" # 캡처 파일을 저장할 로컬 폴더 경로 (~ 문자 지원)
[updates]
check_automatically = true # Sparkle을 사용하여 자동으로 업데이트 확인
download_automatically = false # 안내 팝업 없이 백그라운드에서 자동으로 업데이트 다운로드
[diagnostics]
enabled = true # 문제 해결용 로컬 진단 로그 작성 활성화
retention_days = 7 # 로그 파일 보존 일수 (1~30일)
[capture]
hide_desktop_icons = false # 캡처 시 바탕화면 아이콘을 일시적으로 숨김
hide_desktop_widgets = false # 캡처 시 바탕화면 위젯을 일시적으로 숨김
[capture.naming]
screenshot_template = "Snapzy_{year}-{month}-{day}_{hour}-{minute}-{second}_{milliseconds}" # 스크린샷 이름 템플릿
recording_template = "Snapzy_{year}-{month}-{day}_{hour}-{minute}-{second}_{milliseconds}" # 녹화 비디오 이름 템플릿
[capture.screenshot]
format = "png" # 스크린샷 이미지 형식: "png", "jpeg" 또는 "webp"
include_snapzy = false # 캡처 이미지에 Snapzy 자신의 제어 창 영역을 포함
show_cursor = false # 스크린샷 이미지에 macOS 마우스 커서 표시 여부
[capture.scrolling]
show_hints = true # 스크롤 캡처 작업 시 화면 안내 힌트 표시
[capture.ocr]
success_notification = false # 텍스트 추출 (OCR) 성공 시 시스템 알림 표시
[capture.object_cutout]
auto_crop = true # 객체 잘라내기 시 주변 여백 자동 트리밍
[capture.after.screenshot]
save = true # 스크린샷을 로컬 내보내기 폴더에 자동 저장
quick_access = true # 캡처 후 화면에 퀵 액세스(미리보기) 패널 표시
copy_file = true # 저장된 파일 경로를 클립보드에 복사
open_annotate = false # 캡처 후 자동으로 주석(Annotate) 편집기에서 열기
upload_to_cloud = false # 캡처 후 즉시 구성된 클라우드 버킷에 업로드
[capture.after.recording]
save = true # 녹화 비디오를 로컬 내보내기 폴더에 자동 저장
quick_access = true # 녹화 완료 후 화면에 퀵 액세스 패널 표시
copy_file = true # 비디오 파일 경로를 클립보드에 복사
open_annotate = false # 녹화 후 자동으로 비디오 편집기(Video Editor)에서 열기
upload_to_cloud = false # 녹화 후 즉시 구성된 클라우드 버킷에 업로드
[recording]
format = "mov" # 비디오 파일 컨테이너 형식: "mov" 또는 "mp4"
quality = "high" # 녹화 품질 프리셋: "high", "medium" 또는 "low"
fps = 30 # 대상 녹화 프레임 레이트 (1~120)
output_mode = "video" # 내보내기 미디어 형식: "video" (MP4/MOV) 또는 "gif" (움짤 GIF)
capture_system_audio = true # 시스템 사운드 녹음 설정 (가상 오디오 드라이버 필요)
capture_microphone = false # 마이크 오디오 녹음 설정
microphone_device_id = "" # 오디오 입력을 위한 CoreAudio 마이크 장치 UID
remember_last_area = true # 다음 캡처를 위해 마지막으로 선택한 캡처 영역의 좌표 기억
include_snapzy = false # 녹화 비디오에 Snapzy 제어 도구 모음 및 오버레이 포함
show_cursor = true # 녹화 비디오에 macOS 마우스 커서 포함
highlight_clicks = false # 마우스 클릭 시 화면에 하이라이트 애니메이션 링 표시
show_keystrokes = false # 녹화 중 입력된 단축키를 화면에 표시
[recording.mouse_highlight]
size = 50 # 마우스 클릭 하이라이트 원의 직경 (픽셀 단위, 20~120)
animation_duration = 0.7 # 클릭 파동 애니메이션 지속 시간 (초 단위, 0.1~3.0)
color = "#FF000080" # 하이라이트 원 색상 HEX 코드 (#RRGGBB 또는 #RRGGBBAA)
opacity = 0.5 # 원의 불투명도 (0.0~1.0)
ripple_count = 3 # 클릭당 나타나는 파동 애니메이션 레이어 수 (1~6)
[recording.keystrokes]
font_size = 18.0 # 키 입력 표시 글자 크기 (포인트 단위, 10.0~48.0)
position = "bottomCenter" # 표시 위치: "topLeft", "topRight", "bottomLeft", "bottomRight", "bottomCenter" 등
display_duration = 2.0 # 화면에 단축키가 머무르는 시간 (초 단위, 0.3~10.0)
[recording.annotation_shortcuts]
modifier = "shift" # 녹화 중 주석 도구 호출용 보조 키: "shift", "option", "command", "control"
hold_duration = 1.0 # 주석 바 활성화를 위한 키 누름 지속 시간 (초 단위, 0.1~5.0)
[quick_access]
enabled = true # 캡처 후 퀵 액세스 미리보기 패널 활성화 여부
position = "bottomRight" # 패널이 고정될 화면 모서리: "topLeft", "topRight", "bottomLeft", "bottomRight"
auto_dismiss = true # 일정 시간 경과 후 패널 자동 사라짐 활성화
auto_dismiss_delay = 10.0 # 자동 사라짐 대기 시간 (초 단위, 3.0~30.0)
pause_countdown_on_hover = true # 패널 위에 마우스 커서가 있으면 카운트다운 타이머 중지
overlay_scale = 1.0 # 미리보기 패널의 확대 비율 (0.75~1.5)
drag_drop = true # 패널에서 직접 파일 드래그 앤 드롭 내보내기 허용
actions_order = ["copy", "annotate", "save", "cloud", "delete"] # 빠른 버튼 표시 순서
enabled_actions = ["copy", "annotate", "save", "cloud", "delete"] # 표시할 액션 버튼 목록
[quick_access.slots]
center_top = "copy" # 중앙 상단 슬롯에 액션 할당
center_bottom = "annotate" # 중앙 하단 슬롯에 액션 할당
top_trailing = "save" # 우측 상단 슬롯에 액션 할당
top_leading = "cloud" # 좌측 상단 슬롯에 액션 할당
bottom_leading = "delete" # 좌측 하단 슬롯에 액션 할당
bottom_trailing = "" # 비워 두면 할당 없음
[history]
enabled = true # 애플리케이션 내의 캡처 역사 기록 보관 활성화
retention_days = 30 # 기록 저장 기간 (0은 영구 보존)
max_count = 500 # 최대 기록 저장 개수 (0~1000)
background_style = "hud" # 패널 배경 테마: "hud" (유리 효과) 또는 "solid" (불투명)
open_on_launch = false # 앱이 실행될 때 역사 브라우저 창 자동 열기
[history.floating]
enabled = true # 화면에 떠 있는 역사 HUD 바 표시
position = "topCenter" # 역사 HUD 바의 고정 위치: "topCenter", "bottomCenter", "center"
default_filter = "all" # 초기 필터 유형: "all", "screenshot", "recording", "ocr", "cutout"
max_displayed_items = 10 # 역사 HUD의 최대 미리보기 카드 수 (3~20)
scale = 1.0 # 역사 HUD의 줌 비율 (0.8~1.2)
auto_clear_days = 0 # 지정 일수보다 오래된 역사 항목 자동 정리 (0~365)
[cloud]
provider = "aws_s3" # 클라우드 스토리지 서비스: "aws_s3" 또는 "cloudflare_r2"
bucket = "my-snapzy-bucket" # AWS S3 / Cloudflare R2 버킷 명칭
region = "us-east-1" # 버킷 리전 식별자 (S3 설정 시 필수)
endpoint = "" # API 접속 엔드포인트 URL (R2 설정 시 필수)
custom_domain = "" # 공유 링크 생성을 위한 사용자 정의 도메인명
expire_time = "7d" # 공유 링크 유효기간/라이프사이클: "1d", "3d", "7d", "14d", "30d", "60d", "90d", "permanent"
uploads_window_position = "center" # 업로드 현황 모니터링 HUD의 위치: "top", "center", "bottom"
[annotate]
clipboard_image_open_behavior = "ask" # 빈 주석 도구 실행 시 클립보드 이미지 처리: "ask", "loadAutomatically", "doNothing"
close_after_drag = true # 파일 드래그 드롭으로 복사 완료 시 주석 창 자동 닫기
bring_forward_after_drag = false # 드래그 복사 완료 후 타겟 앱 창을 전면으로 가져오기
quick_properties_sync = true # 펜 두께 및 색상 정보를 도구 간 즉시 동기화
[shortcuts]
enabled = true # 단축키 리스너 활성화 (단축키 등록 시 반드시 필요)
[shortcuts.global.fullscreen]
enabled = true
key = "3"
modifiers = ["command", "shift"]
[shortcuts.global.area]
enabled = true
key = "4"
modifiers = ["command", "shift"]
[shortcuts.global.areaAnnotate]
enabled = true
key = "7"
modifiers = ["command", "shift"]
[shortcuts.global.scrollingCapture]
enabled = true
key = "6"
modifiers = ["command", "shift"]
[shortcuts.global.recording]
enabled = true
key = "5"
modifiers = ["command", "shift"]
[shortcuts.global.annotate]
enabled = true
key = "A"
modifiers = ["command", "shift"]
[shortcuts.global.videoEditor]
enabled = true
key = "E"
modifiers = ["command", "shift"]
[shortcuts.global.cloudUploads]
enabled = true
key = "L"
modifiers = ["command", "shift"]
[shortcuts.global.shortcutList]
enabled = true
key = "K"
modifiers = ["command", "shift"]
[shortcuts.global.ocr]
enabled = true
key = "2"
modifiers = ["command", "shift"]
[shortcuts.global.objectCutout]
enabled = true
key = "1"
modifiers = ["command", "shift"]
[shortcuts.global.history]
enabled = true
key = "H"
modifiers = ["command", "shift"]
[shortcuts.overlay.area_application_capture]
enabled = true
key = "SPACE" # 영역 선택 모드 시 추가 제어 단축키
modifiers = []
[shortcuts.overlay.recording_application_capture]
enabled = true
key = "SPACE"
modifiers = []
[shortcuts.annotate_tools]
disabled = []
# 숫자 키 "1"~"8"을 눌러 각각의 주석 그리기 도구 즉시 전환
"1" = "pen"
"2" = "arrow"
"3" = "rect"
"4" = "oval"
"5" = "text"
"6" = "blur"
[shortcuts.annotate_actions.copyAndClose]
enabled = true
key = "C"
modifiers = ["command"]
[shortcuts.annotate_actions.toggleSidebar]
enabled = true
key = "B"
modifiers = ["command"]
[shortcuts.annotate_actions.togglePin]
enabled = true
key = "P"
modifiers = ["command"]
[shortcuts.annotate_actions.cloudUpload]
enabled = true
key = "U"
modifiers = ["command"]
범위 초과 경고: 특정 프로퍼티 값이 권장되는 유효 바운더리를 넘어가게 기재하면(예: fps = 150 또는 overlay_scale = 3.0), Snapzy는 로깅 영역에 Warning 문구를 뱉고 해당 속성을 스킵한 채 공장 기본값(Default)을 꺼내서 대입합니다.
데이터 타입 불일치: 잘못된 자료형(예: Boolean 속성에 일반 텍스트 문자열 지정)을 써넣게 되면 구문 분석 도중 치명적인 에러(Error)를 반환합니다. 이 경우에는 해당 섹션의 설정을 통째로 읽어 들이지 않으며, 기존 앱 내부 설정을 그대로 복원해 사용합니다.
오류 내역 파악:config.toml 검사 시 적발된 각종 문법 오류나 경고 메시지 목록은 앱 설정창의 고급(Advanced) 탭 설정 뷰 동기화 란에서 즉각 육안으로 파악하실 수 있습니다.