aboutsummaryrefslogtreecommitdiff
path: root/.config/vdirsyncer
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2024-03-07 13:31:48 +0100
committerlonkaars <loek@pipeframe.xyz>2024-03-07 13:31:48 +0100
commitd3261948b866f7e7b60024f2dd6e82502b2dbea1 (patch)
tree543e4e8188c02b4266da61ee78a059f9e2bf46b2 /.config/vdirsyncer
parent91b44861f53237169859de186e38cc076635a9b0 (diff)
add khal + vdirsyncer config
Diffstat (limited to '.config/vdirsyncer')
-rw-r--r--.config/vdirsyncer/config.sh.example29
-rwxr-xr-x.config/vdirsyncer/config_gen99
2 files changed, 128 insertions, 0 deletions
diff --git a/.config/vdirsyncer/config.sh.example b/.config/vdirsyncer/config.sh.example
new file mode 100644
index 0000000..c40bd94
--- /dev/null
+++ b/.config/vdirsyncer/config.sh.example
@@ -0,0 +1,29 @@
+#!/bin/sh
+# this file is included from .config/vdirsyncer/config_gen and
+# .config/khal/config_gen. The shims for `khal` and `vdirsyncer` automatically
+# run these scripts to update the configuration files. Note that you do still
+# need to set up a synchronization mechanism (e.g. systemd timer for running
+# `vdirsyncer sync`)
+
+# uncomment to convert true color calendar color (#RRGGBB) into 16-color (ANSI)
+# codes (TODO: this is not implemented yet)
+# export QUANTIZE_COLOR=y
+
+### CalDAV example
+# NOTE: color and display name are automatically downloaded from the server,
+# and can not be set manually
+caldav 'https://dav.example.com' 'username' "$(pass www/dav.example.com/username)"
+
+### Web calendar example
+# NOTE: url should start with http(s)://, not webcal://
+ical 'https://example.com/calendar-1.ics'
+# COLOR and NAME can be overridden for ical URLs:
+COLOR='light magenta' NAME='Calendar 2' ical 'https://example.com/calendar-2.ics'
+# Comment a line to disable the calendar (temporarily)
+#ical 'https://example.com/calendar-3.ics'
+# iCal URL that requires HTTP authentication:
+ical 'https://example.com/calendar-1.ics' 'username' 'password'
+
+# Keep in mind that this file is just a POSIX sh script, and you can use
+# environment variables, control flow, etc.
+
diff --git a/.config/vdirsyncer/config_gen b/.config/vdirsyncer/config_gen
new file mode 100755
index 0000000..2e536d5
--- /dev/null
+++ b/.config/vdirsyncer/config_gen
@@ -0,0 +1,99 @@
+#!/bin/sh
+CONFIG_FILE="$(dirname "$0")/config.sh"
+[ ! -e "$CONFIG_FILE" ] && {
+ echo "please create $CONFIG_FILE"
+ exit 1
+}
+
+CFG_MODE="$1"
+
+VDIRSYNCER_PREFIX="$XDG_DATA_HOME/vdirsyncer"
+VDIRSYNCER_STATUS_PATH="$VDIRSYNCER_PREFIX/status"
+
+# generate a valid storage/pair name from an invalid one
+safeify() { echo "$1" | sha1sum | cut -c1-40 ; }
+# safeify() { echo "$1" | tr -c '0-9A-Za-z' '_' | sed 's/_\+/_/g' ; }
+
+[ "$CFG_MODE" != "lib" ] && cat << EOF
+# THIS FILE IS AUTO-GENERATED AND SHOULD NOT BE SAVED TO DISK!!! Use with
+# vdirsyncer by piping the output of this script to a named pipe.
+
+[general]
+status_path = "$VDIRSYNCER_STATUS_PATH"
+
+EOF
+
+_cfg_caldav() {
+ cat << EOF
+[pair $ID]
+a = "${ID}_local"
+b = "${ID}_remote"
+collections = ["from a", "from b"]
+metadata = ["displayname", "color"]
+
+[storage ${ID}_local]
+type = "filesystem"
+path = "$VDIRSYNCER_PREFIX/$ID/"
+fileext = ".ics"
+
+[storage ${ID}_remote]
+type = "caldav"
+url = "${BASE_URL}"
+EOF
+ [ -n "$USERNAME" ] && echo "username = \"$USERNAME\""
+ [ -n "$PASSWORD" ] && echo "password = \"$PASSWORD\""
+
+ echo # trailing blank line
+}
+
+caldav() {
+ BASE_URL="$1"
+ USERNAME="$2" # optional
+ PASSWORD="$3" # optional
+
+ NAME="$(echo "$BASE_URL" | sed -e 's#^https\?://##' -e 's#/.*##')"
+ ID="$(safeify "$NAME")"
+
+ _cfg_caldav
+}
+
+_cfg_ical() {
+ cat << EOF
+[pair $ID]
+a = "${ID}_remote"
+b = "${ID}_local"
+collections = null
+
+[storage ${ID}_local]
+type = "filesystem"
+path = "$VDIRSYNCER_PREFIX/$ID/"
+fileext = ".ics"
+
+[storage ${ID}_remote]
+type = "http"
+url = "${URL}"
+EOF
+
+ [ -n "$USERNAME" ] && echo "username = \"$USERNAME\""
+ [ -n "$PASSWORD" ] && echo "password = \"$PASSWORD\""
+
+ echo # trailing blank line
+}
+
+ical() {
+ URL="$1"
+ USERNAME="$2" # optional
+ PASSWORD="$3" # optional
+
+ NAME="${NAME-"$(basename "$URL")"}"
+ ID="$(safeify "$NAME")"
+
+ _cfg_ical
+}
+
+# load "actual" config file
+[ "$CFG_MODE" != "lib" ] && . "$CONFIG_FILE"
+
+# make inspecting output easier
+[ "$CFG_MODE" != "lib" ] && printf '# %s:%s=%s\n' vim ft dosini
+