agendafs
A filesystem for your calendar.
git clone git://mccd.space/agendafscommit 537a7af1466378f9af551b7fc0c08f023c57eda2
parent 5531003e684ec82fa1a2e5b0bedadfe8de15c750
Author: Marc Coquand <marc@coquand.email>
Date: Wed, 23 Jul 2025 19:15:29 +0200
Update readme; use the name vdir
Diffstat:
2 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/README.md b/README.md
@@ -1,12 +1,15 @@
# agendafs
-Agendafs is a FUSE-based filesystem for writing notes that syncs to
-ical-backends using [vdirsyncer](https://vdirsyncer.pimutils.org/) or similar
-tools. It supports directories, categories and access rights.
+[Todo](todo.sr.ht/~marcc/agendafs)
+| [Mailing List](https://lists.sr.ht/~marcc/agendafs)
+
+Agendafs is a FUSE-based filesystem for writing notes that syncs to caldav
+servers through using [vdirsyncer](https://vdirsyncer.pimutils.org/) or
+similar tools. It supports directories, categories and access rights.
## Status
-Agendafs is still in early development and is alpha-level software.
+Agendafs is still in early development and is alpha-level software. It probably leaks memory, destroys files and might summon demons. However, I use it daily for my note-taking.
## Installation
@@ -25,9 +28,9 @@ make
## Basic principles
-Agendafs uses [vdirsyncer](https://vdirsyncer.pimutils.org/) as a backend to sync iCalendar files to a remote caldav server.
+Agendafs uses [vdirsyncer](https://vdirsyncer.pimutils.org/) as a backend to sync VJOURNAL entries to a remote caldav server.
-Each VJOURNAL iCalendar entry is represented as a file or directory in Agendafs. Edit these files like you would on a regular filesystem. iCalendar entries that have a parent relationship are represented as directories. iCalendar attributes can also be accessed via xattr(7). Currently supported attributes are:
+Each VJOURNAL vdir entry is represented as a file or directory in Agendafs. Edit these files like you would on a regular filesystem. iCalendar entries that have a parent relationship are represented as directories. iCalendar attributes can also be accessed via xattr(7). Currently supported attributes are:
- `user.categories` - comma separated list of categories
- `user.class` - Can be either private, public, confidential.
@@ -36,26 +39,25 @@ Agendafs pairs well with file explorers like `ranger`, `lf` or `nnn`.
## Usage
-To mount an iCalendar directory with Agendafs:
+To mount a vdir with Agendafs:
```
-mount_agendafs -o icsdir=<vdirsyncer_directory> <mountpoint>
+mount_agendafs -o vdir=<vdir directory> <mountpoint>
```
### Limitations
-Right now attachments are not supported. I don't quite know what happens if you store a file but the behavior is undefined. You should only store plain-text files for now.
+Notably:
+
+- [Attachment support is missing](https://todo.sr.ht/~marcc/agendafs/2)
+- [Symlink support is missing](https://todo.sr.ht/~marcc/agendafs/11)
+- [File extensions are missing](https://todo.sr.ht/~marcc/agendafs/5)
## Motivation
I like plaintext notes, but found it hard to sync them and use them on mobile. The beauty of caldav is that you most likely have one if you're signed up an email provider, so you can take advantage of it and use it for sync.
-Caldav also have some interesting social features. There is a lot of opportunities to have shared notes, shared todo lists and shared calendars with friends and family this way.
-
-## Contribute
-
-See [tickets](https://todo.sr.ht/~marcc/agendafs) and [mailing
-list](https://lists.sr.ht/~marcc/agendafs)
+Caldav also have some interesting social features. There are a lot of opportunities to have shared notes, shared todo lists and shared calendars with friends and family this way.
## Appendix
diff --git a/main.c b/main.c
@@ -633,12 +633,9 @@ enum {
#define CUSTOMFS_OPT(t, p, v) {t, offsetof(struct agendafs_config, p), v}
static struct fuse_opt agendafs_opts[] = {
- CUSTOMFS_OPT("icsdir=%s", ics_directory, 0),
- FUSE_OPT_KEY("-V", KEY_VERSION),
- FUSE_OPT_KEY("--version", KEY_VERSION),
- FUSE_OPT_KEY("-h", KEY_HELP),
- FUSE_OPT_KEY("--help", KEY_HELP),
- FUSE_OPT_END};
+ CUSTOMFS_OPT("vdir=%s", ics_directory, 0), FUSE_OPT_KEY("-V", KEY_VERSION),
+ FUSE_OPT_KEY("--version", KEY_VERSION), FUSE_OPT_KEY("-h", KEY_HELP),
+ FUSE_OPT_KEY("--help", KEY_HELP), FUSE_OPT_END};
static int
agendafs_opt_proc(void *data, const char *arg, int key,