DotweaveDotweave
문서GitHub
DotweaveDotweave
    • 소개
    • dotweave 설치
    • 첫 동기화 설정
    • 두 번째 기기 설정
    • 동기화가 작동하는 방식
    • 디렉터리와 저장소 구조
    • 동기화 모드
    • 프로필
    • 플랫폼별 경로
    • 시크릿과 암호화
    • 파일과 디렉터리 추적하기
    • 매일 쓰는 push와 커밋 흐름
    • 여러 기기 동기화 유지하기
    • 셸 자동완성 켜기
    • 에이전트 스킬 설치하기
    • 설정과 저장소 형식 업그레이드
    • 동기화 문제 해결하기
    • dotweave init
    • dotweave track
    • dotweave push
    • dotweave pull
    • dotweave status
    • dotweave untrack
    • dotweave cd
    • dotweave profile
    • dotweave doctor
    • dotweave autocomplete
    • dotweave skill
    • manifest.jsonc
    • settings.jsonc
    • 환경 변수와 경로
    • 오류 메시지
문서GitHub
  1. Dotweave/
  2. manifest.jsonc

manifest.jsonc

버전 8 sync manifest의 모든 필드와 항목 구조, 플랫폼 값 객체, dotweave가 강제하는 검증 규칙을 정리해요.

위치와 버전

manifest.jsonc는 sync 디렉터리 루트에 있어요. 즉 커밋되어 모든 기기가 공유하는 파일이에요. dotweave가 무엇을 추적할지는 이 파일 하나가 결정해요.

현재 버전은 8이에요. 버전 7도 받아들여서 제자리에서 마이그레이션하고, 그전에 manifest.jsonc.v7.bak 백업을 먼저 써요. 버전 7은 프로필 이름을 항목에만 저장했고, 마이그레이션이 이를 최상위 profiles 레지스트리로 끌어올려요. 8보다 높은 버전이면 명령이 실패해요.

파일 형식은 JSONC라서 손으로 편집할 때 //와 /* */ 주석을 남길 수 있어요. 옆에 manifest.json 파일이 있으면 읽지 않고 거부해요.

dotweave track, dotweave untrack, dotweave profile add|remove를 실행하면 dotweave가 이 파일을 다시 써요. 손으로 넣은 주석과 키 순서는 재작성 과정에서 보존되지 않아요.

최상위 필드

필드타입과 기본값역할
version7 또는 8, 필수스키마 버전이에요. 정수가 아니면 검증에 실패해요.
repositoryFormat0 이상 integer, 선택디스크상 artifact 배치 버전이에요. 없으면 0으로 봐요. 현재 형식은 1이에요.
ageobject, 선택recipients를 담아요. sync 설정을 읽는 명령은 이 필드가 없으면 실패해요.
age.recipientsstring[], 최소 1개모든 시크릿 artifact를 암호화할 age 공개 키예요. 각 값은 앞뒤 공백이 잘리고 비어 있으면 안 돼요.
profilesstring[], 기본값 []이름 있는 프로필 레지스트리예요. default는 암묵적이라서 여기에 넣으면 안 돼요.
entriesarray, 필수추적 항목 목록이에요. 비어 있어도 괜찮아요.

dotweave는 이 키들을 version, repositoryFormat, age, profiles, entries 순서로 직렬화해요.

항목 필드

항목 하나는 홈 디렉터리 아래에 있는 추적 대상 파일이나 디렉터리 하나를 나타내요.

필드타입과 기본값역할
kind"file" 또는 "directory", 필수추적 대상의 종류예요. 실제 경로와 종류가 다르면 명령이 실패해요.
localPath플랫폼 문자열, 필수홈 디렉터리 아래 파일 위치예요. 절대 경로, ~/..., $XDG_CONFIG_HOME/..., %VARIABLE% 참조를 쓸 수 있어요.
repoPath플랫폼 문자열, 선택저장소 내부의 상대 POSIX 경로예요. 생략하면 홈 디렉터리 기준 localPath에서 유도해요.
mode플랫폼 동기화 모드, 선택normal, secret, ignore 중 하나예요. 기본값은 normal이고 상속돼요.
permission플랫폼 권한, 선택0600이나 0755 같은 네 자리 8진수 문자열이에요. 상속되고, Windows에서는 효과가 없어요.
profilesstring[], 선택이 항목이 속한 프로필이에요. 값이 있다면 비어 있으면 안 되고, 모든 이름이 등록되어 있어야 해요. 상속돼요.

항목은 kind, localPath, repoPath, mode, permission, profiles 순서로 직렬화돼요.

profiles 필드가 없는 항목은 모든 프로필에 적용돼요. 프로필을 나열한 항목은 그중 하나가 활성 프로필일 때만 적용돼요.

상속은 repoPath가 짧은 항목부터 긴 항목 순으로 진행돼요. mode, permission, profiles를 명시하지 않은 항목은 kind가 directory인 가장 가까운 상위 항목에서 그 필드를 가져와요. 각 필드는 서로 독립적으로 상속돼요.

플랫폼 값 객체

localPath, repoPath, mode, permission은 모두 단일 값이 아니라 객체예요. 그래서 manifest 하나로 네 가지 운영체제를 기술할 수 있어요.

{
  "default": "~/.config/tool/config.toml",
  "win": "%APPDATA%/tool/config.toml"
}

default는 필수예요. win, mac, linux, wsl은 선택적 오버라이드이고, 그 순서대로 직렬화돼요.

해석할 때는 플랫폼에 맞는 win, mac, linux를 고르고 없으면 default로 넘어가요. wsl 키는 해석 방식이 달라요. wsl을 먼저 보고, 없으면 linux, 그다음 default를 봐요.

검증 규칙

dotweave는 어떤 명령이 파일을 건드리기 전에 manifest 전체를 검증해요. 아래 규칙에 어긋나면 manifest를 그대로 거부해요.

  • repoPath는 .. 세그먼트가 없는 상대 POSIX 경로여야 하고, 비어 있거나 절대 경로면 안 돼요.
  • 어떤 경로 세그먼트도 .dotweave.secret이나 .dotweave.symlink로 끝나면 안 돼요. 이 접미사는 artifact 전용이에요.
  • 두 항목이 같은 repoPath로 해석되면 안 되고, 같은 localPath로 해석되어도 안 돼요.
  • 한쪽이 다른 쪽의 직계 상위인 경우를 빼면 두 localPath가 겹치면 안 돼요. 추적 중인 디렉터리 안에 추적 중인 하위 항목이 있는 건 괜찮지만, 부분적으로만 겹치는 두 항목은 허용되지 않아요.
  • 모든 localPath는 홈 디렉터리 안으로 해석되어야 하고, 홈 디렉터리 자체일 수는 없어요.
  • 프로필 이름은 ^[A-Za-z0-9][A-Za-z0-9._-]*$에 맞아야 하고, .으로 시작하면 안 되고, .이나 ..일 수 없고, 예약 이름 profiles도 쓸 수 없어요.
  • profiles 레지스트리에는 default나 중복 이름이 들어가면 안 돼요.
  • 항목이 참조하는 모든 프로필은 등록되어 있거나 default여야 해요.

검증은 보고하기 전에 가능한 모든 실패를 모으기 때문에, 한 번 실행으로 여러 문제를 함께 볼 수 있어요.

manifest.jsonc를 손으로 편집해도 괜찮지만, 편집한 뒤에 dotweave status를 실행하세요. 아무것도 쓰지 않은 상태로 검증 오류를 확인할 수 있어요.

예시

{
  "version": 8,
  "repositoryFormat": 1,
  "age": {
    "recipients": ["age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p"]
  },
  "profiles": ["work"],
  "entries": [
    {
      "kind": "file",
      "localPath": { "default": "~/.gitconfig" }
    },
    {
      "kind": "directory",
      "localPath": {
        "default": "~/.config/nvim",
        "win": "%LOCALAPPDATA%/nvim"
      },
      "repoPath": { "default": ".config/nvim" }
    },
    {
      "kind": "file",
      "localPath": { "default": "~/.ssh/config" },
      "mode": { "default": "secret" },
      "permission": { "default": "0600" }
    },
    {
      "kind": "file",
      "localPath": { "default": "~/.config/work-vpn.conf" },
      "mode": { "default": "secret" },
      "profiles": ["work"]
    }
  ]
}

오류

JSON 문법 오류, 필드 검사 실패, 읽을 수 없는 파일, 지원하지 않는 버전, 충돌하는 경로는 모두 쓰기 전에 명령을 멈춰요. 정확한 메시지와 해결 방법은 오류 메시지에서 확인하세요.

관련 문서

CLI로 이 필드를 바꾸는 방법은 파일과 디렉터리 추적하기, mode 값이 각각 무엇을 하는지는 동기화 모드에서 확인하세요.

← 이전명령어 레퍼런스dotweave skillDotweave에 내장된 이식 가능한 에이전트 skill을 코딩 에이전트의 skills 디렉터리에 설치해요.→ 다음설정 레퍼런스settings.jsonc어떤 sync 프로필이 활성 상태인지 기록하는 기기별 설정 파일이에요.

이 페이지에서

  1. 위치와 버전
  2. 최상위 필드
  3. 항목 필드
  4. 플랫폼 값 객체
  5. 검증 규칙
  6. 예시
  7. 오류
  8. 관련 문서