blob: dd8fea8d559ea4c6ab1ae6d78717cae65a1c67b8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
#+TITLE: Chime Integrations
#+AUTHOR: Craig Jennings
Setup notes for related org-mode packages.
[[file:../README.org][README]] | [[file:CONFIGURATION.org][Configuration]] | [[file:ARCHITECTURE.org][Architecture]] | [[file:TROUBLESHOOTING.org][Troubleshooting]] | [[file:../TESTING.org][Testing]]
* org-gcal
:PROPERTIES:
:CUSTOM_ID: org-gcal
:END:
[[https://github.com/kidd/org-gcal.el][org-gcal]] syncs Google Calendar events into org files, which is exactly what chime reads. They work well together with no special configuration as long as the org files that org-gcal writes to are in =org-agenda-files=.
Typical setup:
#+BEGIN_SRC elisp
(use-package org-gcal
:after org
:config
(setq org-gcal-client-id "your-client-id"
org-gcal-client-secret "your-client-secret"
org-gcal-fetch-file-alist
'(("you@gmail.com" . "~/org/gcal.org"))))
;; Make sure chime can see those events
(add-to-list 'org-agenda-files "~/org/gcal.org")
#+END_SRC
After org-gcal syncs, run:
#+BEGIN_SRC elisp
M-x chime-refresh-modeline
#+END_SRC
That refreshes the modeline without sending notifications. Otherwise chime will pick up synced events on the next polling cycle.
org-gcal commonly writes plain timestamps like:
#+BEGIN_SRC org
* Team Sync
<2026-05-10 Sun 14:00>
#+END_SRC
Chime handles plain timestamps, SCHEDULED timestamps, and DEADLINE timestamps. If you filter by TODO keyword, remember that org-gcal events usually do not have TODO keywords unless you add them through your org-gcal templates.
Chime also ships =chime-declined-events-predicate=, which filters out org-gcal entries with =:STATUS: declined=. This predicate is included in the default =chime-exclude-filters=.
* org-contacts
:PROPERTIES:
:CUSTOM_ID: org-contacts
:END:
org-contacts birthdays are often exposed through diary sexps such as:
#+BEGIN_SRC org
%%(org-contacts-anniversaries)
#+END_SRC
Chime does not support diary sexp timestamps as event timestamps. For birthday notifications, convert contacts to standard repeating org timestamps.
** Convert Existing Contacts
Load the conversion script:
#+BEGIN_SRC elisp
(require 'convert-org-contacts-birthdays
(expand-file-name "convert-org-contacts-birthdays.el"
(file-name-directory (locate-library "chime"))))
#+END_SRC
Then run:
#+BEGIN_SRC elisp
M-x chime-convert-contacts-in-place RET ~/org/contacts.org RET
#+END_SRC
The command creates a timestamped backup first, then adds yearly repeating timestamps below contacts with birthday properties. vCard export still works because the original =:BIRTHDAY:= property remains in place.
After conversion, comment out the diary sexp from your schedule file:
#+BEGIN_SRC org
# %%(org-contacts-anniversaries)
#+END_SRC
** Capture Template for New Contacts
The optional =chime-org-contacts= integration adds an org-capture template that prompts for contact details and inserts a yearly repeating timestamp when a birthday is provided.
#+BEGIN_SRC elisp
(setq chime-org-contacts-file "~/org/contacts.org")
;; Optional: customize capture key. Default is "C".
(setq chime-org-contacts-capture-key "C")
(with-eval-after-load 'org-capture
(require 'chime-org-contacts))
#+END_SRC
With use-package:
#+BEGIN_SRC elisp
(use-package chime-org-contacts
:after org-capture
:init
(setq chime-org-contacts-file "~/org/contacts.org"))
#+END_SRC
Set =chime-org-contacts-file= to nil to disable the integration.
|