r/emacs•
catphish_

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
Loading comments…