A [fzf](https://github.com/junegunn/fzf)-based **journaling and notes** application with CalDav support. Description and Use Case ------------------------ This application allows for a keyboard-controlled maneuvering of your notes and journal entries. A journal entry is nothing more than a note associated with a specific date. These entries are stored as [iCalendar](https://datatracker.ietf.org/doc/html/rfc5545) files of the type `VJOURNAL`. For instance, you could use this application as a minimalistic terminal-based counterpart of [jtx Board](https://jtx.techbee.at/) in a setup with a CalDav server, such as [Radicale](https://radicale.org/), and a synchronization tool like [vdirsyncer](http://vdirsyncer.pimutils.org/). Installation ------------ Just copy the file to your preferred location, e.g., `~/.local/bin`, and make it executable. ### Requirements This is a POSIX script with inline `python3` elements. Make sure you have [fzf](https://github.com/junegunn/fzf), [batcat](https://github.com/sharkdp/bat), and [yq](https://github.com/mikefarah/yq) installed. For the `python3` code, we also require [icalendar](https://pypi.org/project/icalendar/). Configuration -------------- This application is configured with a YAML file located at `$HOME/.config/fzf-vjour/config.yaml`. The entry `datadir` specifies the root directory of your journal and note entries. This directory may contain several subfolders, called _collections_. The entry `collections` is a list, where each item specifies a subfolder, given by `name`, and a label, given by `label` (any string). 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: ```yaml datadir: ~/.journal sync_cmd: vdirsyncer sync journals collections: - name: 12cacb18-d3e1-4ad4-a1d0-e5b209012e85 label: 💼 - name: 745ae7a0-d723-4cd8-80c4-75f52f5b7d90 label: 🏡 ``` Here the files are stored in `~/.journal/12cacb18-d3e1-4ad4-a1d0-e5b209012e85` (work-related entries) and `~/.journal/745ae7a0-d723-4cd8-80c4-75f52f5b7d90` (personal collection). This configuration will work well with a `vdirsyncer` configuration such as ```confini [pair journals] a = "local" b = "remote" collections = ["from a", "from b"] [storage local] type = "filesystem" fileext = ".ics" path = "~/.journal" [storage remote] type = "caldav" item_types = ["VJOURNAL"] ... ``` Usage ----- Use the default `fzf` keys to navigate your notes. In addition, there are the following keybindings: | Key | Action | | --- | ------ | | enter | Open note/journal in your `$EDITOR` | | ctrl-d | Delete the seleted entry | | ctrl-n | Make a new entry | | ctrl-r | Refresh the view | | ctrl-s | Run the synchronization command | License ------- This project is licensed under the [MIT License](./LICENSE).