From 69fc3e4e61029eaa8498eb4e593f8cbea05f69a7 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 19 Jun 2026 21:37:24 +0300 Subject: taskwarrior: export +rocky tasks and import them on the rocky host Factor the per-tag export loop out of taskwarrior::export into a reusable _taskwarrior::export_tag helper, then use it to export everything tagged +rocky into a separate tw-rocky-export-*.json set. Those files are picked up by the existing hostname-keyed import path, so the rocky VM imports them automatically while work/personal export/import behaviour is unchanged. Co-Authored-By: Claude Opus 4.8 --- fish/conf.d/taskwarrior.fish | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'fish') diff --git a/fish/conf.d/taskwarrior.fish b/fish/conf.d/taskwarrior.fish index d7f642e..1948629 100644 --- a/fish/conf.d/taskwarrior.fish +++ b/fish/conf.d/taskwarrior.fish @@ -112,21 +112,39 @@ function taskwarrior::export::wins end end -function taskwarrior::export - _taskwarrior::set_import_export_tags - set -l ts (date +%s) +# Exports all tasks tagged +$tag for both pending and completed status into +# per-status .json files named after $file_label, then deletes the exported +# tasks. $file_label drives the filename so the matching importer (which keys +# off either TASK_IMPORT_TAG or the hostname) can pick the files up later. +function _taskwarrior::export_tag + set -l tag $argv[1] + set -l file_label $argv[2] + set -l ts $argv[3] for task_status in pending completed - set -l count (task +$TASK_EXPORT_TAG status:$task_status count) + set -l count (task +$tag status:$task_status count) if test $count -eq 0 continue end - echo "Exporting $count $task_status tasks to $TASK_EXPORT_TAG" - task +$TASK_EXPORT_TAG status:$task_status export >"$WORKTIME_DIR/tw-$TASK_EXPORT_TAG-export-$ts-$task_status.json" - yes | task +$TASK_EXPORT_TAG status:$task_status delete &>/dev/null + echo "Exporting $count $task_status tasks to $file_label" + task +$tag status:$task_status export >"$WORKTIME_DIR/tw-$file_label-export-$ts-$task_status.json" + yes | task +$tag status:$task_status delete &>/dev/null end +end + +function taskwarrior::export + _taskwarrior::set_import_export_tags + set -l ts (date +%s) + + # Export the OS-specific work/personal tag under its own tag name. + _taskwarrior::export_tag $TASK_EXPORT_TAG $TASK_EXPORT_TAG $ts + + # Export everything tagged +rocky under the "rocky" file label so the rocky + # host imports them via the hostname-based import path. The +rocky export is + # independent of the work/personal handling and runs on every host. + _taskwarrior::export_tag rocky rocky $ts taskwarrior::export::bd taskwarrior::export::maybe @@ -141,6 +159,9 @@ function taskwarrior::import rm $import end + # Hostname-keyed exports are imported only on the matching host. The +rocky + # exports are written as tw-rocky-export-*.json, so this picks them up when + # the local hostname is "rocky". find $WORKTIME_DIR -name "tw-(hostname)-export-*.json" | while read -l import task import $import rm $import -- cgit v1.2.3