aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/office/calcurse/default.nix10
-rw-r--r--modules/office/calcurse/hooks/post-save16
-rw-r--r--modules/office/calcurse/hooks/pre-load16
3 files changed, 42 insertions, 0 deletions
diff --git a/modules/office/calcurse/default.nix b/modules/office/calcurse/default.nix
index 15fc452..2825b41 100644
--- a/modules/office/calcurse/default.nix
+++ b/modules/office/calcurse/default.nix
@@ -55,5 +55,15 @@ in
source = ./keys;
force = true;
};
+ xdg.configFile."calcurse/hooks/pre-load" = {
+ source = ./hooks/pre-load;
+ executable = true;
+ force = true;
+ };
+ xdg.configFile."calcurse/hooks/post-save" = {
+ source = ./hooks/post-save;
+ executable = true;
+ force = true;
+ };
};
}
diff --git a/modules/office/calcurse/hooks/post-save b/modules/office/calcurse/hooks/post-save
new file mode 100644
index 0000000..5d2ab1d
--- /dev/null
+++ b/modules/office/calcurse/hooks/post-save
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+# Commits and pushes the calcurse data dir after every save.
+#
+# Hooks hand calcurse's terminal over to whatever they run and calcurse
+# waits for them to exit before redrawing, so this backgrounds the actual
+# sync instead of blocking the UI on a git push. Output goes to a log
+# file rather than stdout/stderr, since hooks aren't meant to be
+# interactive.
+
+log="${XDG_DATA_HOME:-$HOME/.local/share}/calcurse/hooks.log"
+
+(
+ printf '[%s] post-save\n' "$(date '+%Y-%m-%d %H:%M:%S')"
+ calcurse-sync sync
+) >>"$log" 2>&1 &
+disown
diff --git a/modules/office/calcurse/hooks/pre-load b/modules/office/calcurse/hooks/pre-load
new file mode 100644
index 0000000..bd87af3
--- /dev/null
+++ b/modules/office/calcurse/hooks/pre-load
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+# Pulls the latest calcurse data before calcurse reads it, so a fresh
+# session (or a ^R reload) starts from wherever you last left off on
+# another machine.
+#
+# Runs synchronously, unlike post-save, since the point is to have
+# up-to-date data before it's loaded. Never fails calcurse's startup,
+# though: if the pull can't complete (offline, no remote configured
+# yet, a conflict), calcurse just opens with whatever's on disk.
+
+log="${XDG_DATA_HOME:-$HOME/.local/share}/calcurse/hooks.log"
+
+{
+ printf '[%s] pre-load\n' "$(date '+%Y-%m-%d %H:%M:%S')"
+ calcurse-sync pull
+} >>"$log" 2>&1 || true