tb-dotfiles/chezmoi/dot_zshrc.d/executable_notes.zsh

92 lines
1.4 KiB
Bash

#!/bin/bash
notes() {
local NOTES_DIR="${NOTES_DIR:-${HOME}/notes}"
local -r EDITOR="${EDITOR:-vim}"
local EDITOR_OPTIONS=()
if [[ "${EDITOR}" =~ 'vim$' ]]; then
EDITOR_OPTIONS=(
'-c'
'set spell'
)
fi
for ARG in "$@"; do
(
set -euo pipefail
mkdir -p "$NOTES_DIR"
cd "$NOTES_DIR"
case "${ARG}" in
'category')
shift
export NOTES_DIR="$NOTES_DIR/$1"
shift
notes "$@"
exit 255
;;
'fzf')
"${EDITOR}" "${EDITOR_OPTIONS[@]}" "$(notes ls | fzf)"
;;
'ls')
ag -g '' -l "${NOTES_DIR}" | sort -hr
;;
'status')
git status
;;
'commit')
git add .
git commit -m "notes commit $(strftime '%a %d %b %Y %r %Z')"
;;
'push')
git push
;;
'pull')
git pull
;;
*)
>&2 echo "invalid argument ${ARG}"
exit 1
;;
esac
)
local EXIT_CODE=$?
if [ $EXIT_CODE != 0 ]; then
if [ $EXIT_CODE = 255 ]; then
return 0
fi
return $EXIT_CODE
fi
done
# return if the above loop didn't return a bad code
if [ -n "$*" ]; then
return
fi
(
set -euo pipefail
readonly NOW="$EPOCHSECONDS"
readonly FILE_PATH="${NOTES_DIR}/$(strftime '%Y/%m/%Y-%m-%d.md' "$NOW")"
mkdir -p "$(dirname "${FILE_PATH}")"
if ! [ -e "${FILE_PATH}" ]; then
echo -e "# $(strftime '%a %d %b %Y' "$NOW")\n\n## todo\n\n" > "${FILE_PATH}"
fi
"${EDITOR}" "${EDITOR_OPTIONS[@]}" "${FILE_PATH}"
)
}