How to get Org-Caldav to sync different TODO states to different calendars?
I feel like I've tried everything I can think of. I've read through the org-caldav docs on this, and through org-agenda-skip-entry-if but I can't get this to work properly.
This syntax sort of works, but it still puts a lot of things in the wrong place
:skip-conditions (todo ( "ASSIGNMENT" "BILL" "CHORE" "MEETING" "PLANNING" "REVIEW" "HOLD" "READY" "ACTIVE" )))
here's my config snippet with some of the stuff I've tried commented out
(use-package org-caldav
:ensure t
:init
;; Master Switches from the Manual
(setq org-icalendar-include-todo 'all
org-caldav-sync-todo t
org-icalendar-categories '(local-tags))
(setq org-caldav-todo-percent-states
'((0 "TODO")
(0 "ASSIGNMENT")
(0 "BILL")
(0 "CHORE")
(0 "MEETING")
(0 "NEXT")
(0 "PLANNING")
(0 "REVIEW")
(0 "HOLD")
(0 "READY")
(0 "ACTIVE")
(100 "DONE")
(100 "CANCELED")))
:config
(setq org-caldav-url "MY_URL"
org-caldav-save-directory "~/org/org-caldav-cache/"
org-caldav-sync-direction 'twoway
org-caldav-show-sync-results nil)
(setq org-caldav-calendars
'((:calendar-id "MY_TODO_CAL_ID"
:files ("~/org/main/Tasks.org")
:inbox "~/org/main/Inbox.org"
;; :skip-conditions (todo ( "ASSIGNMENT" "BILL" "CHORE" "MEETING" "PLANNING" "REVIEW" "HOLD" "READY" "ACTIVE" )))
;; :skip-conditions (nottodo ( "TODO" "NEXT" )))
:skip-conditions (notregexp "TODO"))
(:calendar-id "MY_ASSIGNMENT_CAL_ID"
:files ("~/org/main/Tasks.org")
:inbox "~/org/main/Inbox.org"
;; :skip-conditions (nottodo ( "ASSIGNMENT" )))
:skip-conditions (notregexp "ASSIGNMENT"))
;; :skip-conditions (todo ( "TODO" "NEXT" "BILL" "CHORE" "MEETING" "PLANNING" "REVIEW" "HOLD" "READY" "ACTIVE" )))
;; (:calendar-id "MY_CAL_ID"
;; :files ("~/org/main/Tasks.org")
;; :inbox "~/org/main/Inbox.org"
;; :skip-conditions (nottodo "BILL"))
;; (:calendar-id "MY_CHORE_CAL_ID"
;; :files ("~/org/main/Tasks.org")
;; :inbox "~/org/main/Inbox.org"
;; :skip-conditions (nottodo ( "CHORE" )))
;; :skip-conditions (notregexp "CHORE"))
;; :skip-conditions (todo ( "TODO" "NEXT" "ASSIGNMENT" "BILL" "MEETING" "PLANNING" "REVIEW" "HOLD" "READY" "ACTIVE" )))
;; (:calendar-id "MY_MEETING_CAL_ID"
;; :files ("~/org/main/Tasks.org")
;; :inbox "~/org/main/Inbox.org"
;; :skip-conditions (nottodo "MEETING"))
;; (:calendar-id "MY_PROJECT_CAL_ID"
;; :files ("~/org/main/Tasks.org")
;; :inbox "~/org/main/Inbox.org"
;; :skip-conditions (nottodo "PLANNING" "REVIEW" "HOLD" "READY" "ACTIVE"))
))
;; iCalendar Time Handling
(setq org-icalendar-use-deadline '(event-if-todo event-if-not-todo todo-due)
org-icalendar-use-scheduled '(event-if-todo event-if-not-todo todo-start)
org-icalendar-deadline-summary-prefix ""
org-icalendar-scheduled-summary-prefix "")
(setq org-caldav-todo-percent nil)
)
If anyone has any insights they would be much appreciated.
Posted Feb 19, 2026, 10:02 PM UTC
60