commit 3856e6f3ec4be332650e17fd2132ab92fb17834e Author: zlei9 Date: Sun Mar 29 08:32:54 2026 +0800 Initial commit with translated description diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..76f9be2 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,149 @@ +--- +name: caldav-calendar +description: "使用vdirsyncer + khal同步和查询CalDAV日历(iCloud、Google、Fastmail、Nextcloud等)。适用于Linux。" +metadata: {"clawdbot":{"emoji":"📅","os":["linux"],"requires":{"bins":["vdirsyncer","khal"]},"install":[{"id":"apt","kind":"apt","packages":["vdirsyncer","khal"],"bins":["vdirsyncer","khal"],"label":"Install vdirsyncer + khal via apt"}]}} +--- + +# CalDAV Calendar (vdirsyncer + khal) + +**vdirsyncer** syncs CalDAV calendars to local `.ics` files. **khal** reads and writes them. + +## Sync First + +Always sync before querying or after making changes: +```bash +vdirsyncer sync +``` + +## View Events + +```bash +khal list # Today +khal list today 7d # Next 7 days +khal list tomorrow # Tomorrow +khal list 2026-01-15 2026-01-20 # Date range +khal list -a Work today # Specific calendar +``` + +## Search + +```bash +khal search "meeting" +khal search "dentist" --format "{start-date} {title}" +``` + +## Create Events + +```bash +khal new 2026-01-15 10:00 11:00 "Meeting title" +khal new 2026-01-15 "All day event" +khal new tomorrow 14:00 15:30 "Call" -a Work +khal new 2026-01-15 10:00 11:00 "With notes" :: Description goes here +``` + +After creating, sync to push changes: +```bash +vdirsyncer sync +``` + +## Edit Events (interactive) + +`khal edit` is interactive — requires a TTY. Use tmux if automating: + +```bash +khal edit "search term" +khal edit -a CalendarName "search term" +khal edit --show-past "old event" +``` + +Menu options: +- `s` → edit summary +- `d` → edit description +- `t` → edit datetime range +- `l` → edit location +- `D` → delete event +- `n` → skip (save changes, next match) +- `q` → quit + +After editing, sync: +```bash +vdirsyncer sync +``` + +## Delete Events + +Use `khal edit`, then press `D` to delete. + +## Output Formats + +For scripting: +```bash +khal list --format "{start-date} {start-time}-{end-time} {title}" today 7d +khal list --format "{uid} | {title} | {calendar}" today +``` + +Placeholders: `{title}`, `{description}`, `{start}`, `{end}`, `{start-date}`, `{start-time}`, `{end-date}`, `{end-time}`, `{location}`, `{calendar}`, `{uid}` + +## Caching + +khal caches events in `~/.local/share/khal/khal.db`. If data looks stale after syncing: +```bash +rm ~/.local/share/khal/khal.db +``` + +## Initial Setup + +### 1. Configure vdirsyncer (`~/.config/vdirsyncer/config`) + +Example for iCloud: +```ini +[general] +status_path = "~/.local/share/vdirsyncer/status/" + +[pair icloud_calendar] +a = "icloud_remote" +b = "icloud_local" +collections = ["from a", "from b"] +conflict_resolution = "a wins" + +[storage icloud_remote] +type = "caldav" +url = "https://caldav.icloud.com/" +username = "your@icloud.com" +password.fetch = ["command", "cat", "~/.config/vdirsyncer/icloud_password"] + +[storage icloud_local] +type = "filesystem" +path = "~/.local/share/vdirsyncer/calendars/" +fileext = ".ics" +``` + +Provider URLs: +- iCloud: `https://caldav.icloud.com/` +- Google: Use `google_calendar` storage type +- Fastmail: `https://caldav.fastmail.com/dav/calendars/user/EMAIL/` +- Nextcloud: `https://YOUR.CLOUD/remote.php/dav/calendars/USERNAME/` + +### 2. Configure khal (`~/.config/khal/config`) + +```ini +[calendars] +[[my_calendars]] +path = ~/.local/share/vdirsyncer/calendars/* +type = discover + +[default] +default_calendar = Home +highlight_event_days = True + +[locale] +timeformat = %H:%M +dateformat = %Y-%m-%d +``` + +### 3. Discover and sync + +```bash +vdirsyncer discover # First time only +vdirsyncer sync +``` diff --git a/_meta.json b/_meta.json new file mode 100644 index 0000000..8e8fcd7 --- /dev/null +++ b/_meta.json @@ -0,0 +1,6 @@ +{ + "ownerId": "kn7bxdhae07mn5rkhw363hyen17ymt5m", + "slug": "caldav-calendar", + "version": "1.0.1", + "publishedAt": 1767663916915 +} \ No newline at end of file