adding notes now pushes changes to remote
[bash-notes.git] / SOURCE / head.sh
CommitLineData
fb711183 1#! /bin/bash
2
3# bash-notes © 2023 by danix is licensed under CC BY-NC 4.0.
4# To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/
5
6# to debug the script run it like:
7# DEBUG=true notes.sh ...
8# and check /tmp/debug_bash-notes.log
9if [[ $DEBUG == true ]]; then
10 exec 5> /tmp/debug_bash-notes.log
11 BASH_XTRACEFD="5"
12 PS4='$LINENO: '
13 set -x
14fi
15
16PID=$$
17BASENAME=$( basename "$0" )
18NOW=$(date +%s)
19
4cbcb39e 20VERSION="0.4git"
fb711183 21DBVERSION=${VERSION}_${NOW}
22
23set_defaults() {
24# Binaries to use
25JQ=${JQ:-/usr/bin/jq}
26EDITOR=${EDITOR:-/usr/bin/vim}
27TERMINAL=${TERMINAL:-/usr/bin/alacritty}
4cbcb39e 28# Git binary only used if $USEGIT is true - See below
29GIT=${GIT:-/usr/bin/git}
fb711183 30# add options for your terminal. Remember to add the last option to execute
31# your editor program, otherwise the script will fail.
32# see example in the addnote function
33TERM_OPTS="--class notes --title notes -e "
34# Setting PAGER here overrides whatever is set in your default shell
35# comment this option to use your default pager if set in your shell.
36PAGER=${PAGER:-/usr/bin/more}
37
38# set this to true to have output in plain text
39# or use the -p option on the command line before every other option
40PLAIN=false
41# base directory for program files
42BASEDIR=${BASEDIR:-~/.local/share/bash-notes}
43# notes database in json format
44DB=${BASEDIR}/db.json
45# directory containing the actual notes
46NOTESDIR=${BASEDIR}/notes
47
4cbcb39e 48### GIT SUPPORT
49
50# If you want to store your notes in a git repository set this to true
51USEGIT=true
52# Address of your remote repository
53GITREMOTE=${GITREMOTE:-""}
cf6d89bc 54# How long should we wait (in seconds) between sync on the git remote. Default 3600 (1 hour)
55GITSYNCDELAY=${GITSYNCDELAY:-3600}
bba0734f 56# The name of this client. Defaults to the output of hostname
57GITCLIENT=${GITCLIENT:-""}
4cbcb39e 58
fb711183 59} # end set_defaults, do not change this line.
60
61set_defaults
62
63# Do not edit below this point
64RCFILE=${RCFILE:-~/.config/bash-notes.rc}
65TMPDB=/tmp/db.json
66
67if [ ! -x "$JQ" ]; then
68 echo "jq not found in your PATH"
69 echo "install jq to continue"
70 exit 1
71fi
72
73# IMPORT USER DEFINED OPTIONS IF ANY
74if [[ -f $RCFILE ]]; then
75 # shellcheck disable=SC1090
76 source "$RCFILE"
77fi
78
79# We prevent the program from running more than one instance:
80PIDFILE=/var/tmp/$(basename "$0" .sh).pid
81
82# Make sure the PID file is removed when we kill the process
83trap 'rm -f $PIDFILE; exit 1' TERM INT
84
85if [[ -r $PIDFILE ]]; then
86 # PIDFILE exists, so I guess there's already an instance running
87 # let's kill it and run again
88 # shellcheck disable=SC2046,SC2086
89 kill -s 15 $(cat $PIDFILE) > /dev/null 2>&1
90 # should already be deleted by trap, but just to be sure
91 rm "$PIDFILE"
92fi
93
94# create PIDFILE
95echo $PID > "$PIDFILE"
96
97# Export config to file
b1e2a018 98export_config() {
fb711183 99 if [ -r ${RCFILE} ]; then
100 echo "Backing up current '${RCFILE}'...."
101 mv -f ${RCFILE} ${RCFILE}.$(date +%Y%m%d_%H%M)
102 fi
103 echo "Writing '${RCFILE}'...."
104 sed -n '/^set_defaults() {/,/^} # end set_defaults, do not change this line./p' $0 \
105 | grep -v set_defaults \
106 | sed -e 's/^\([^=]*\)=\${\1:-\([^}]*\)}/\1=\2/' \
107 > ${RCFILE}
108 if [ -r ${RCFILE} ]; then
109 echo "Taking no further action."
110 exit 0
111 else
112 echo "Could not write '${RCFILE}'...!"
113 exit 1
114 fi
115}
116
117# we should expand on this function to add a sample note and explain a little bit
118# how the program works.
b1e2a018 119firstrun() {
fb711183 120 [ -f $RCFILE ] && RC=$RCFILE || RC="none"
121
122 clear
123 echo "${BASENAME} configuration:
124
125base directory: ${BASEDIR}/
126notes archive: ${NOTESDIR}/
127notes database: ${DB}
128rc file: $RC
129text editor: ${EDITOR}
130terminal: ${TERMINAL}
131jq executable: ${JQ}
132"
133
9eb02251 134 echo "Now I'll create the needed files and directories."
fb711183 135 read -r -p "Do you wish to continue? (y/N) " ANSWER
136 case $ANSWER in
137 y|Y )
138 mkdir -p $NOTESDIR
139 cat << __EOL__ > ${DB}
140{
141 "params": {
142 "version": "${VERSION}",
143 "dbversion": "${DBVERSION}"
144 },
87a368fe 145 "git": {
146 "lastpull": ""
147 },
fb711183 148 "notes": []
149}
150__EOL__
151 echo; echo "All done, you can now write your first note."
152 ;;
153 * )
154 echo "No changes made. Exiting"
155 exit
156 ;;
157 esac
158}
159
160# check for notes dir existance and create it in case it doesn't exists
161if [[ ! -d $NOTESDIR ]]; then
162 # we don't have a directory. FIRST RUN?
163 firstrun
164fi