|
|
|
# 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.
|
|
|
|
|
|
|
|
## 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`
|
|
|
|
|
|
|
|
![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
|
|
|
|
* 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).
|
|
|
|
|