diff --git a/office/.local/share/task/hooks/on-exit.git-backup b/office/.local/share/task/hooks/on-exit.git-backup deleted file mode 100755 index e80cbe2..0000000 --- a/office/.local/share/task/hooks/on-exit.git-backup +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -# Automatically git commits, pushes and pulls if doable in the taskwarrior data directory -# -# Much of this taken from: https://github.com/mrschyte/taskwarrior-hooks/ -# with much gratitude -# -# The minimum amount of time required between 2 commits in seconds. -# So only if the last commit is at least x seconds old will a new one -# be created. Set to 0 to sync each taskwarrior change. -MINIMUM_WAIT_TIME=60 - -# Do not display status information. -QUIET=true - -# Removes the tasks.json file after each run, keeping the -# task directory clean. -REMOVE_JSON=false - -# Sort with `jq` commandline program if it is found. -# Also drops extra values 'urgency' and 'id' which are not -# necessary for backups and automatically calculated by tw. -STABLE_JSON=true - -if [ "${DISABLE_HOOKS}" = "true" ] || ! command -v git >/dev/null 2>&1; then - exit 0 -fi - -if [ "$1" != "api:2" ]; then - printf "Taskwarrior uses different data API version than git plugin. Aborting!" 1>&2 - exit 1 -fi - -data_dir="$(echo "$5" | cut -f2 -d:)" -command_run="$(echo "$3" | cut -f2 -d:)" - -if [ "$command_run" = "synchronize" ]; then - DISABLE_HOOKS=true env task sync - - git -C "$data_dir" pull >/dev/null 2>&1 - pull_ret="$?" - git -C "$data_dir" push >/dev/null 2>&1 - push_ret="$?" - if [ "$pull_ret" -eq 0 ] && [ "$push_ret" -eq 0 ]; then - [ $QUIET = "true" ] || echo "Git upstream synchronized." - fi -fi - -last_commit=$(git -C "$data_dir" log -1 --format="%at") -# if now is not yet greater than last commit + wait time do nothing -if [ "$(date "+%s")" -lt $((last_commit + MINIMUM_WAIT_TIME)) ]; then - # TODO: Implement DEBUG msg level (info/debug) system - # echo "Too early to check for changes, exiting." - exit 0 -fi - -# echo "EXPORTING TASKS" -if [ "$STABLE_JSON" = true ] && command -v jq >/dev/null 2>&1; then - DISABLE_HOOKS=true env task export | jq -S 'map(del(.id, .urgency)) | sort_by(.entry, .modified) | reverse' >"$data_dir/tasks.json" -else - DISABLE_HOOKS=true env task export >"$data_dir/tasks.json" -fi - -# after any command, if there's changes add and commit -if ! git -C "$data_dir" diff --exit-code >/dev/null 2>&1; then - # echo "found changes" - # need to run to fully update tasks that just got done - DISABLE_HOOKS=true env task next >/dev/null 2>&1 - - header="auto: ${2##* }" - msg="full command: $2" - git -C "$data_dir" commit "$data_dir/tasks.json" -m "$header" -m "$msg" --no-gpg-sign >/dev/null 2>&1 - [ $QUIET = "true" ] || echo "Backup up to git." -fi - -if [ "$REMOVE_JSON" = true ] && [ -f "$data_dir/tasks.json" ]; then - rm "$data_dir/tasks.json" >/dev/null 2>&1 -fi diff --git a/office/.local/share/task/hooks/on-modify.timewarrior b/office/.local/share/task/hooks/on-modify.timewarrior deleted file mode 100755 index 61a16e5..0000000 --- a/office/.local/share/task/hooks/on-modify.timewarrior +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python3 - -############################################################################### -# -# Copyright 2016 - 2021, Thomas Lauf, Paul Beckingham, Federico Hernandez. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# https://www.opensource.org/licenses/mit-license.php -# -############################################################################### - -from __future__ import print_function - -import json -import subprocess -import sys - -# Hook should extract all of the following for use as Timewarrior tags: -# UUID -# Project -# Tags -# Description -# UDAs - -try: - input_stream = sys.stdin.buffer -except AttributeError: - input_stream = sys.stdin - -# Make no changes to the task, simply observe. -old = json.loads(input_stream.readline().decode("utf-8", errors="replace")) -new = json.loads(input_stream.readline().decode("utf-8", errors="replace")) -print(json.dumps(new)) - - -def extract_tags_from(json_obj): - # Extract attributes for use as tags. - tags = [json_obj['description']] - - if 'project' in json_obj: - tags.append(f"#{json_obj['project']}") - - if 'tags' in json_obj: - tags.extend([f"+{tag}" for tag in json_obj['tags']]) - - return tags - - -def extract_annotation_from(json_obj): - - if 'annotations' not in json_obj: - return '\'\'' - - return json_obj['annotations'][0]['description'] - - -start_or_stop = '' - -# Started task. -if 'start' in new and 'start' not in old: - start_or_stop = 'start' - -# Stopped task. -elif ('start' not in new or 'end' in new) and 'start' in old: - start_or_stop = 'stop' - -if start_or_stop: - tags = extract_tags_from(new) - - subprocess.call(['timew', start_or_stop] + tags + [':yes']) - -# Modifications to task other than start/stop -elif 'start' in new and 'start' in old: - old_tags = extract_tags_from(old) - new_tags = extract_tags_from(new) - - if old_tags != new_tags: - subprocess.call(['timew', 'untag', '@1'] + old_tags + [':yes']) - subprocess.call(['timew', 'tag', '@1'] + new_tags + [':yes']) - - old_annotation = extract_annotation_from(old) - new_annotation = extract_annotation_from(new) - - if old_annotation != new_annotation: - subprocess.call(['timew', 'annotate', '@1', new_annotation])