fzf-vcal/README.md

4.4 KiB

A fzf-based calendar application with CalDav support. If you are interested in this, then you may also be interested in the corresponding journaling application fzf-vjour.

Description and Use Case

This application allows for a keyboard-controlled maneuvering of your calendar entries. These entries are stored as iCalendar files of the type VEVENT.

For instance, you could use this application in a setup with a CalDav server, such as Radicale, and a synchronization tool like vdirsyncer.

Installation

Download the file fzf-vcal from the latest release, or run ./scripts/build.sh, then copy fzf-vcal to your preferred location, e.g., ~/.local/bin, and make it executable.

Requirements

This is a POSIX script with inline awk elements. Make sure you have fzf installed. I also suggest to install batcat for colorful previews.

Configuration

This application is configured with a file located at $HOME/.config/fzf-vcal/config. The entry ROOT specifies the root directory of your calendar entries. This directory may contain several subfolders, called collections. The entry COLLECTION_LABELS is a ;-delimited list, where each item specifies a subfolder and a label (see example below). In the application, the user sees the collection labels instead of the collection names. This is particularly useful, because some servers use randomly generated names. Finally, a third entry SYNC_CMD specifies the command to be executed for synchronizing.

Consider the following example:

ROOT=~/.calendar/
COLLECTION_LABELS="745ae7a0-d723-4cd8-80c4-75f52f5b7d90=👫🏼;12cacb18-d3e1-4ad4-a1d0-e5b209012e85=💼;"
SYNC_CMD="vdirsyncer sync calendar"

Here, the files are stored in ~/.journal/12cacb18-d3e1-4ad4-a1d0-e5b209012e85 (work-related entries) and ~/.journal/745ae7a0-d723-4cd8-80c4-75f52f5b7d90 (shared collection).

This configuration will work well with a vdirsyncer configuration such as

[pair calendar]
a = "local"
b = "remote"
collections = ["from a", "from b"]

[storage local]
type = "filesystem"
fileext = ".ics"
path = "~/.calendar"

[storage remote]
type = "caldav"
item_types = ["VEVENT"]
...

Usage

Use the default fzf keys to navigate your calendar entries, e.g., ctrl-j and ctrl-k for going down/up in the list. After starting fzf-vcal, you are presented with a view on the current week. Hit <enter> on any day, and you will see all entries for that date, including previews. In both, the week and day views, you can add entries by hitting ctrl-n.

Here is the list of available keybindings:

Key View Action
enter week view Switch to day view
ctrl-n week view Make a new entry
any letter week view Search in the list of all entries
backspace on empty query week view Undo search
ctrl-u week view Go back one week
ctrl-d week view Go forth one week
ctrl-alt-u week view Go back one month
ctrl-alt-d week view Go forth one month
ctrl-s week view Run the synchronization command
ctrl-r week view Go to current week
ctrl-g week view Goto date
enter day view Open selected calendar entry in your favorite $EDITOR
ctrl-n day view Make a new entry
ctrl-l day view Move to next day
ctrl-h day view Move to previous day
esc, backspace or q day view Go back to week view
ctrl-s day view Run the synchronization command
ctrl-alt-d day view Delete selected entry
j day view Scroll down in preview window
k day view Scroll up in preview window
w day view Toggle line wrap in preview window

You may also invoke the script with --help to see further command-line options.

Also, you may set LC_TIME to your preferred language, and TZ to your preferred timezone. The latter is in particular helpful if you want to take a look at your calendar relative to being in another timezone.

License

This project is licensed under the MIT License.