diff options
Diffstat (limited to 'modules/office')
| -rw-r--r-- | modules/office/calcurse/default.nix | 10 | ||||
| -rw-r--r-- | modules/office/calcurse/hooks/post-save | 16 | ||||
| -rw-r--r-- | modules/office/calcurse/hooks/pre-load | 16 |
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 |
