A tool for managing my collection of notes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
2.8 KiB

# Knowledge Base
This is a script that I use to manage my personal knowledge base. I have yet to
find a tool that fits my requirements / desires so I decided to build one.
This is still in early stages of development so expect braking changes to come
if you use it.
## Requirements
I don't want to re-invent the wheel. The following tools are used within this
project:
### FZF
https://github.com/junegunn/fzf
This is used for the fuzzy searching
### Git
https://git-scm.com/
Git is used for version controlling the knowledge base. If you don't want to use
git, you can use the --nogit option
### Git-LFS
https://github.com/git-lfs/git-lfs
Vanilla git is not very good at version controlling binary files. Git LFS allows
assets to be stored separately from the main repository but referenced.
### Bat
https://github.com/sharkdp/bat
This is used to provide syntax highlighting in previews
### Sqlite3
This is used to index the documents in the knowledge base, making it fast to
search by tag etc.
## Setup
After cloning the repository, you can run
```
sudo make install
```
To initialise, run
```
kb init
```
This will create the necessary folders and create an sqlite database to store
the index in.
## Usage
List tracked files with `kb list`
4 years ago
![Listing Files](./assets/list.rec.gif)
View a file with `kb view`. You can use the filename, the title or the id to
specify the file.
![View a file](./assets/view.rec.gif)
Create a new file with `kb new`.
This will open your default editor.
![New file](./assets/new.rec.gif)
Delete a file with `kb delete`.
![Delete a file](./assets/del.rec.gif)
Fuzzy search for files using `kb fuzzy` (or just `kb` without augments).
From the fuzzy search, you can use `ctrl-v` to view, `ctrl-e` to edit, `ctrl-d`
to delete or `ctrl-n` to create a new file with the current query as the name.
![Fuzzy search](./assets/fuzzy.rec.gif)
## Goals
### Mostly Plain Text
Most of my notes are currently in Markdown. This has a couple of advantages for
me:
* I can read them anywhere
* I can version control them with Git
4 years ago
* They can be grepped
There may be some exceptions. I may wish to include links or images which I will
version control with Git LFS; but for the most part, my notes are plain text.
### Tags
Before starting this project, my notes were organised into folders.
Unfortunately, this makes storing articles or notes that apply to different
areas difficult. I would prefer a tag based system. This would allow a file to
have multiple tags assigned to it.
### Fast
I want to be able to retrieve my notes quickly by tag or by title. To do this,
this tool will index notes using an SQLite database. This will not be version
controlled.
### Don't re-invent the wheel
I will be building on top of already great, fast tools such as
[RipGrep](https://github.com/BurntSushi/ripgrep) and
[FZF](https://github.com/junegunn/fzf).