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