0ade724f |
1 | # bash notes |
2 | |
6c152f7e |
3 | ## a simple note taking script written in bash |
0ade724f |
4 | |
6c152f7e |
5 | I've found myself in need of a simple way to take notes, and since the other solutions available didn't meet my needs, I've decided to write my own script. |
0ade724f |
6 | |
7 | It's a simple (enough) bash script, the only dependance (yet) is [jq](https://stedolan.github.io/jq/). |
8 | |
6c152f7e |
9 | here's all the functions that are now available: |
0ade724f |
10 | |
11 | ```bash |
12 | -h | --help : This help text |
13 | -p | --plain : Output is in plain text (without this option the output is colored) |
14 | -l | --list : List existing notes |
026502da |
15 | -a | --add "<title>" : Add new note |
0ade724f |
16 | -m | --modify <note> : Modify note |
026502da |
17 | -d | --delete [<note> | all] : Delete note |
0ade724f |
18 | -v | --version : Print version |
19 | --userconf : Export User config file |
20 | ``` |
21 | |
6c152f7e |
22 | All the basic functionalities are present and working, it probably needs some polishing and some testing, so if you want to give it a try, let me know what you think. |
23 | |
24 | ### Settings |
25 | |
26 | When you first run it, notes.sh will create all the files it needs to operate. |
27 | By default the directory will be populated in `~/.local/share/bash-notes`. |
28 | |
29 | If you want to modify the predefined settings, you can export a user configuration file by running |
30 | |
31 | ```notes.sh --userconf``` |
32 | |
33 | And you'll have all your settings in `~/.config/bash-notes.rc`. This file will be sourced everytime you run the script. |
34 | |
35 | You can change all these settings: |
36 | |
04781825 |
37 | ```bash |
6c152f7e |
38 | # Binaries to use |
39 | JQ=/usr/bin/jq |
40 | EDITOR=/usr/bin/vim |
41 | TERMINAL=/usr/bin/alacritty |
42 | # add options for your terminal. Remember to add the last option to execute |
43 | # your editor program, otherwise the script will fail. |
44 | # see example in the addnote function |
45 | TERM_OPTS="--class notes --title notes -e " |
46 | |
47 | # base directory for program files |
48 | BASEDIR=~/.local/share/bash-notes |
49 | # notes database in json format |
50 | DB=${BASEDIR}/db.json |
51 | # directory containing the actual notes |
52 | NOTESDIR=${BASEDIR}/notes |
53 | ``` |
54 | |
55 | Most are pretty self explanatory, the only one that might need clarification is `TERM_OPTS` which is used to set the terminal window that will run the editor while writing the note. |
56 | |
57 | Special attention is needed when specifying the options, in my case, using [alacritty](https://github.com/alacritty/alacritty), the option that allows to run some software in the newly created window is `-e`, so I need to specify this as the last option. |
58 | |
59 | ### Functionalities |
60 | |
61 | bash-notes can: |
fe606f6a |
62 | |
6c152f7e |
63 | * write a new note `--add "Your note title"` or in short `-a "Your note title"` |
64 | * modify an existing note `--edit [note ID]`, short version `-e [note ID]` |
65 | * delete a note `--delete [note ID]`, or `-d [note ID]` |
66 | * delete all notes `--delete all`, or `-d all` |
67 | * list existing notes `--list` or `-l` in short |
68 | |
69 | The *note id* is assigned when the note is created, and that's how you refer to the note in the program. |
70 | |
71 | The `--plain` or `-p` option in short, dictates how the output from the script is formatted, here's a sample listing of all the notes: |
72 | |
04781825 |
73 | ```bash |
6c152f7e |
74 | notes.sh -l |
75 | listing all notes |
76 | |
77 | [ID] [TITLE] [CREATED] |
78 | [1] ciao nota 25/03/2023 18:53 +0100CET |
79 | [2] hello there 25/03/2023 19:02 +0100CET |
80 | ``` |
81 | |
82 | And here's the same listing with the plain option: |
83 | |
04781825 |
84 | ```bash |
6c152f7e |
85 | notes.sh -pl |
86 | 1 - ciao nota - 25/03/2023 18:53 +0100CET |
87 | 2 - hello there - 25/03/2023 19:02 +0100CET |
88 | ``` |
89 | |
90 | It's just a proof of concept at the moment, but the idea is to use a more interesting output maybe using markup, and strip it down in plain mode. After all is still a work in progress. |
91 | The plain option must precede all other options or it won't work. I'll try and fix this behaviour in the future. |
92 | |
93 | I'd love to implement some kind of searching functionality, but I'll have to look into that. |
94 | |
034ff3eb |
95 | ### Installing |
96 | |
97 | Simply copy the script in your $PATH and make it executable, something like this should work: |
98 | |
04781825 |
99 | ```bash |
034ff3eb |
100 | mv notes.sh ~/bin/ |
101 | chmod 755 ~/bin/notes.sh |
102 | ``` |
103 | |
104 | Adapt to your needs as you see fit. |
105 | |
6c152f7e |
106 | ### Vision |
107 | |
108 | Ok, maybe vision is a bit of a stretch, but I've written this script to use it in my daily workflow with [rofi](https://github.com/davatorium/rofi) and [i3wm](https://github.com/i3/i3). I'll adapt the way it works to better suit this need of mine. |
109 | |
110 | There are of course things I'd love to add, but my main goal is for it to work the way I planned to use it. |
111 | |
112 | ### TO DO |
113 | |
114 | * add a way to search the notes |
115 | * add a way to display a note without running vim |
116 | * markdown? |
117 | - maybe implement an export feature that builds the html file from the note |
034ff3eb |
118 | * write a bash completion script to enable autocomplete in the shell |
6c152f7e |
119 | * other ideas may come [...] |
120 | |
121 | ### Contributing |
122 | |
123 | It'd mean so much to receive some feedback, patches if you feel like contributing, I'm not expecting much as this is a personal project, but feel free to interact as much as you want. |
124 | |
125 | ### Mantainer |
126 | |
127 | * [danix](https://danix.xyz) - it's just me, really... |
128 | |
129 | ### LICENSE |
130 | |
131 | > 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/ |