dotfiles/.config/shell/functions/todo

40 lines
1.1 KiB
Bash

#!/bin/bash
# Source this and then run `todo`
# a simple way to manage your todo list
# Usage:
# todo -- pull latest repo version and edit ~/todo
# todo [any git command] -- manage todo for easy syncing, assuming ~/todo is
# a symlink that points to a file in a git repo
#
# Suggested use: make a git repo for holding your todo list, then make
# a symlink called 'todo' that points to your todo list in your home directory
#
todo() {
TODO_DIR="${FDOC:-"$(dirname "$(realpath ~/todo)")"}"
TODO_FILE="${FTD:-"$(realpath ~/todo)"}"
if [ -z "$*" ];then
( # subshell to protect against directory changes
cd "$TODO_DIR" || return
# pull the latest commits
git rev-parse &&
git pull
# open the file
$EDITOR "$TODO_FILE"
# commit and push the file if it's in a git repo and the file has changed
if git rev-parse && ! git diff --exit-code "$TODO_FILE"; then
git commit "$TODO_FILE" -m 'todo' &&
git push
fi
)
elif [ "$*" = "cd" ]; then
cd "$TODO_DIR" || return
else
git -C "$TODO_DIR" $@
fi
}