---
author:
    email: mail@petermolnar.net
    image: https://petermolnar.net/favicon.jpg
    name: Peter Molnar
    url: https://petermolnar.net
copies:
- http://web.archive.org/web/20120802041721/http://petermolnar.eu/linux-tech-coding/conky-with-ical/
lang: en
published: '2012-02-20T09:45:15+00:00'
summary: Make conky display ical calendars from the web with the help of calcurse.
tags:
- linux desktop
title: conky with ical

---

I encountered a simple problem: how to display ical calendar events with
conky without writing an ical parser. The solution came in the form of a
suprising tool: calcurse. This is a command-line, text-based, slightly
graphical-like interface for ical handling.

So: download the calendar, import it into calcurse, show it in conky.
But how to manage possible remote update? Do this every 30 minutes.

`install calcurse`

``` {.bash}
sudo apt-get install calcurse
```

`load_calendars.sh`

``` {.bash}
#!/bin/bash

# clear calcurse data
rm ~/.calcurse/apts

# array for remote calendars
calendars=( 'http://link-to-first-cal.ics' 'http://link-to-second-cal.ics' 'and so on' );

# temp file to save a calendar
TMPCAL=/tmp/temp.ics

# run through the calendars
for ical in "${calendars[@]}"
do
    # download ical file
    wget -q "$ical" -O $TMPCAL
    # import into calcurse, error & output silenced
    calcurse -i $TMPCAL >/dev/null 2>&1
    # clear the temp calendar file
    rm $TMPCAL
done

# display current & next 6 days (7 altogether)
calcurse -r7
```

`conky-cal.conf`

``` {.apache}
use_xft yes
xftfont DejaVu Sans:size=8
xftalpha 0.8
text_buffer_size 2048
total_run_times 0
no_buffers yes
uppercase no
cpu_avg_samples 1
net_avg_samples 1
override_utf8_locale yes
double_buffer yes
use_spacer none

own_window yes
own_window_transparent yes
own_window_type normal
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
minimum_size 420 0
maximum_width 420
draw_shades no
draw_outline no
draw_borders no
stippled_borders 0
border_width 0
default_color grey
own_window_colour grey
alignment top_left

update_interval 3600
gap_x 20
gap_y 20

TEXT
${font DejaVu Sans:style=Bold:size=10}EVENTS${font}
${font DejaVu Sans:size=9}${exec /path/to/load_calendars.sh}${font}
```