|
#!/usr/bin/env bash |
|
|
|
# function to urlencode values |
|
# https://stackoverflow.com/questions/296536/how-to-urlencode-data-for-curl-command |
|
rawurlencode() { |
|
local string="${1}" |
|
local strlen=${#string} |
|
local encoded="" |
|
local pos c o |
|
|
|
for (( pos=0 ; pos<strlen ; pos++ )); do |
|
c=${string:$pos:1} |
|
case "$c" in |
|
[-_.~a-zA-Z0-9] ) o="${c}" ;; |
|
* ) printf -v o '%%%02x' "'$c" |
|
esac |
|
encoded+="${o}" |
|
done |
|
echo "${encoded}" # You can either set a return variable (FASTER) |
|
# REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p |
|
} |
|
|
|
# Requires Bash v4 or higher |
|
# add new entries as below |
|
# TASKS_BY_DAY["Some task you want to show up"]="Friday" |
|
# replace Friday with the day you want it to appear on |
|
# matching output of the %A date format |
|
if [[ "${BASH_VERSINFO:-0}" -ge 4 ]]; then |
|
# tasks that you want to show up every particular day |
|
# for example do the laundry every Sunday |
|
# TASKS_BY_DAY["Do the laundry"]="Sunday" |
|
declare -A TASKS_BY_DAY |
|
TASKS_BY_DAY["Do the laundry"]="Sunday" |
|
|
|
# tasks that you want to show up on every particular date |
|
# for example pay the cable bill every 10th of the month |
|
# TASKS_BY_DATE["Pay cable bill"]="10" |
|
declare -A TASKS_BY_DATE |
|
TASKS_BY_DATE["Pay cable bill"]="10" |
|
|
|
TODAY_DAY=$(date "+%A") |
|
for T in "${!TASKS_BY_DAY[@]}"; do |
|
if [[ ${TASKS_BY_DAY[$T]} == $TODAY_DAY ]]; then |
|
DAILY_TASKS=${DAILY_TASKS}"- [ ] ${T} |
|
" |
|
fi |
|
done |
|
|
|
TODAY_DATE=$(date "+%d") |
|
for T in "${!TASKS_BY_DATE[@]}"; do |
|
if [[ ${TASKS_BY_DATE[$T]} == $TODAY_DATE ]]; then |
|
DAILY_TASKS=${DAILY_TASKS}"- [ ] ${T} |
|
" |
|
fi |
|
done |
|
fi |
|
|
|
# URL to create new note in bear |
|
NEW_NOTE_URL_TEMPLATE="bear://x-callback-url/create?title=__TITLE__&text=__TEXT__&tags=__TAGS__" |
|
MONTHLY_NOTE_URL_TEMPLATE="bear://x-callback-url/add-text?title=__MONTHLY_NOTE_TITLE__&text=__DAILY_LINK__&mode=append" |
|
DAILY_LINK_TEMPLATE="[__DAILYTITLE__](bear://x-callback-url/open-note?title=__E_NEW_NOTE_TITLE__)" |
|
|
|
# grab daily quote to add to note |
|
QUOTE_URL="http://quotes.rest/qod" |
|
QUOTE_JSON=$(curl -s ${QUOTE_URL}) |
|
QUOTE=$(echo $QUOTE_JSON | jq '.contents.quotes[0] | .quote') |
|
QUOTE_AUTHOR=$(echo $QUOTE_JSON | jq '.contents.quotes[0] | .author') |
|
|
|
# generate link for yesterdays note |
|
YESTERDAY_NOTE_TITLE=$(date -v -1d "+%A, %B %d, %Y") |
|
YESTERDAY_NOTE_LINK=$(echo ${DAILY_LINK_TEMPLATE} | sed "s/__E_NEW_NOTE_TITLE__/${YESTERDAY_NOTE_TITLE}/" | sed "s/__DAILYTITLE__/yesterday/") |
|
|
|
# Title of Bear note |
|
# Day, Month Date, Year |
|
NEW_NOTE_TITLE=$(date "+%A, %B %d, %Y") |
|
|
|
# Tags for bear note for nested navigation |
|
# dailies/year/month |
|
NEW_NOTE_TAGS=$(date "+journal/dailies/%Y/%B") |
|
|
|
# Note template text, new note will be generated on each run matching the below |
|
NEW_NOTE_TEMPLATE="> ${QUOTE} |
|
> - ${QUOTE_AUTHOR} |
|
|
|
### do: |
|
- [ ] Carryover incomplete tasks from ${YESTERDAY_NOTE_LINK} |
|
${DAILY_TASKS} |
|
### eat: |
|
- Enter things you ate here |
|
[detailed nutrition info](https://cronometer.com) |
|
|
|
### move: |
|
- Enter exercise type things you did here |
|
" |
|
|
|
# Title of Monthly tracking note |
|
MONTHLY_NOTE_TITLE=$(date "+%B, %Y") |
|
|
|
# urlencode values for generating note |
|
E_NEW_NOTE_TITLE=$(rawurlencode "$NEW_NOTE_TITLE") |
|
E_NEW_NOTE_TEMPLATE=$(rawurlencode "$NEW_NOTE_TEMPLATE") |
|
E_NEW_NOTE_TAGS=$(rawurlencode "$NEW_NOTE_TAGS") |
|
DAILY_LINK=$(echo ${DAILY_LINK_TEMPLATE} | sed "s/__DAILYTITLE__/${NEW_NOTE_TITLE}/" | sed "s/__E_NEW_NOTE_TITLE__/${E_NEW_NOTE_TITLE}/") |
|
E_MONTHLY_NOTE_TITLE=$(rawurlencode "$MONTHLY_NOTE_TITLE") |
|
E_DAILY_LINK=$(rawurlencode "$DAILY_LINK") |
|
E_QUOTE_STRING=$(rawurlencode "$QUOTE_STRING") |
|
|
|
# replace placeholders strings in URL with urlencoded values and create note |
|
CREATE_URL=$(echo ${NEW_NOTE_URL_TEMPLATE} | sed "s/__TITLE__/${E_NEW_NOTE_TITLE}/" | sed "s/__TAGS__/${E_NEW_NOTE_TAGS}/" | sed "s/__TEXT__/${E_NEW_NOTE_TEMPLATE}/") |
|
open "$CREATE_URL" |
|
|
|
# append link to newly generated note to the monthly tracking note |
|
APPEND_URL=$(echo ${MONTHLY_NOTE_URL_TEMPLATE} | sed "s/__MONTHLY_NOTE_TITLE__/${E_MONTHLY_NOTE_TITLE}/" | sed "s/__DAILY_LINK__/${E_DAILY_LINK}/") |
|
open "$APPEND_URL" |