| ---------------------------------------- | |
| Google Calendar -> calcurse synchronise one way without CalDAV/OAuth2 | |
| January 24th, 2019 | |
| ---------------------------------------- | |
| calcurse is a nice ncurses calendar, appointment and to-do program for | |
| terminal use... It includes an extremely clunky ALPHA software called | |
| calcurse-caldav to synchronise with CalDAV servers or Google Calendar | |
| (using OAuth2 Authentication). | |
| If, like myself, you have ever used calcurse with Google Calendar, you | |
| may have noticed that calcurse-caldav is indeed alpha software, and | |
| should probably be avoided by all but the most hardcore users and | |
| developers... Fortunately in my case I've found a workaround that suits | |
| me, as I only need to synchronise one-way, from Google to my local | |
| machine. The workaround is simple: many calendars on Google Calendars | |
| have publicly-available addresses in iCal format and some have secret | |
| addresses in iCal format... You can find them by going to | |
| calendar.google.com, click the hamburger (why isn't it a cheeseburger?) | |
| menu at the top-left so that "My calendars" and "Other calendars" are | |
| displayed in the bar on the left. Hover over a calendar you are | |
| interested in and hit the three-dot menu and then "Settings and sharing". | |
| The URLs (if available) will be in the "Integrate calendar section" and | |
| labeled as "Public address in iCal format" and/or "Secret address in iCal | |
| format". | |
| I was able to import my personal calendar, and some holiday calendars | |
| that I follow (en.christian#holiday, en.philippines#holiday, | |
| en-gb.usa#holiday, and en.islamic#holiday). I could not pull-in | |
| #contacts (birthdays and anniversary dates from Google Contacts, and some | |
| weird legacy crap from Google+ which nobody cares about) and family. | |
| The way I get calcurse to do what I want is via a simple function in my | |
| shell which does the following: sets the windows title (if I'm running in | |
| tmux or some kind of graphical terminal emuilator {xterm}), sets | |
| appropriate file permissions (I don't have anything secret, but I do want | |
| any other users to have to work to snoop on my files, haha!), nukes | |
| almost everything on startup (this is important, because calcurse import | |
| can't tell if an event is a duplicate, and they can pile up rather | |
| quickly), downloads the iCal files from Google, imports the iCal files, | |
| and finally actually runs calcurse. | |
| I had to set ~/calcurse/apts and ~/calcurse/notes/ to symlink to a tmp | |
| directory. | |
| Here's what I came up with in the end: | |
| calcurse() { | |
| echo -ne '\033k'calcurse'\033\\' | |
| umask 027 | |
| rm -rf /tmp/calcurse-zachary/ | |
| mkdir -p /tmp/calcurse-zachary/notes | |
| wget -q https://SECRETURL /tmp/calcurse-zachary/zach.ics | |
| wget -q http://bit.ly/2FKrneX -O /tmp/calcurse-zachary/christian_holidays | |
| wget -q http://bit.ly2WeQgnO -O /tmp/calcurse-zachary/philippine_holidays | |
| wget -q http://bit.ly/2FNXryq -O /tmp/calcurse-zachary/us_holidays.ics | |
| wget -q http://bit.ly/2RIx0As -O /tmp/calcurse-zachary/islamic_holidays | |
| /usr/bin/calcurse -qi /tmp/calcurse-zachary/zach.ics | |
| /usr/bin/calcurse -qi /tmp/calcurse-zachary/christian_holidays | |
| /usr/bin/calcurse -qi /tmp/calcurse-zachary/philippine_holidays | |
| /usr/bin/calcurse -qi /tmp/calcurse-zachary/us_holidays.ics | |
| /usr/bin/calcurse -qi /tmp/calcurse-zachary/islamic_holidays | |
| /usr/bin/calcurse $@ | |
| echo -ne '\033k'sh'\033\\' | |
| } | |
| That shell function will refresh calcurse whenever I open it.... If I | |
| leave it open for days and need an update, I just close it and then open | |
| it again. Easy. | |
| ---------------------------------------- | |
| Back to phlog index | |
| gopher.zcrayfish.soy gopher root | |
| This phlog entry has been read 3630 times. | |
| Future direct comment submission has been disabled for this phlog entry. | |
| Comments are still accepted by email, please send to: | |
| [email protected] | |
| Be sure to include the post title in the subject line! Thanks! | |
| Nobody has commented on this post. |