A fzf-based journaling, notes, and tasks application with CalDav support. If you are interested in this, then you may also be interested in the corresponding calendar application fzf-vcal.
Description and Use Case
This application allows for a keyboard-controlled maneuvering of your notes, journal entries, and tasks.
These entries are stored as iCalendar files of the type VJOURNAL and VTODO.
For instance, you could use this application as a terminal-based counterpart of jtx Board in a setup with a CalDav server, such as Radicale, and a synchronization tool like vdirsyncer.
Demo
Run the script ./scripts/generate_demo.sh to generate a demo.
Installation
Manual
Run ./scripts/build.sh, then copy fzf-vjour 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.
Arch Linux
yay -S fzf-vjour-git
Configuration
This application is configured with a file located at $HOME/.config/fzf-vjour/config.
The entry ROOT specifies the root directory of your journal and note 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=~/.journal/
COLLECTION_LABELS="745ae7a0-d723-4cd8-80c4-75f52f5b7d90=shared 👫🏼;12cacb18-d3e1-4ad4-a1d0-e5b209012e85=work 💼;"
SYNC_CMD="vdirsyncer sync journals"
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 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", "VTODO"]
...
You may also specify the location of the configuration file with the environment CONFIGFILE.
By default, fzf-vjour sets a descriptive terminal title.
This can be bypassed by specyfing SET_TERMINAL_TITLE="no" in the configuration file.
Usage
Use the default fzf keys to navigate your notes, e.g., ctrl-j and ctrl-k for going down/up in the list.
In addition, there are the following keybindings:
| Key | Action |
|---|---|
enter |
Open note/journal/task in your $EDITOR |
ctrl-alt-d |
Delete the seleted entry |
ctrl-n |
Make a new entry |
ctrl-r |
Refresh the view |
ctrl-s |
Run the synchronization command |
ctrl-x |
Toggle task completion |
alt-up |
Increase task priority |
alt-down |
Decrease task priority |
ctrl-a |
Open attachments view |
ctrl-t |
Filter by category |
alt-v |
View bare iCalendar file |
alt-0 |
Default view: Journal, notes, and open tasks |
alt-j |
Display journal entries |
alt-n |
Display notes |
alt-t |
Display all tasks |
alt-[1-9] |
Display first, second, ... collection |
alt-w |
Toggle line-wrap in preview |
ctrl-d |
Scroll down in preview |
ctrl-u |
Scroll up in preview |
You may also invoke the script with --help to see further command-line options.
In the attachment view, you may use the following keys:
| Key | Action |
|---|---|
enter |
Open attachment |
w |
Toggle line wrap |
ctrl-a |
Add attachment |
ctrl-alt-d |
Delete attachment |
Git support
You can track your entries with git by simply running fzf-vjour --git-init.
Extended configuration / Theming
You may override any of the following parameters (shown with default values) in the configuration file:
FLAG_OPEN=🔲
FLAG_COMPLETED=✅
FLAG_JOURNAL=📘
FLAG_NOTE=🗒️
FLAG_PRIORITY=❗
FLAG_ATTACHMENT=🔗
STYLE_COLLECTION="$FAINT$WHITE"
STYLE_DATE="$CYAN"
STYLE_SUMMARY="$GREEN"
STYLE_EXPIRED="$RED"
STYLE_CATEGORY="$WHITE"
Limitations
Here is a list of some currently present limitations.
- Timezone agnostic: Timezone specifications are ignored.
- Time agnostic: We use the date portion only of date-time specifications.
- No alarms or notifications
- Inline attachments only
- No recurrences
License
This project is licensed under the MIT License.
