|
|
|
# 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.
|
|
|
|
|
|
|
|
## 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. It is sometimes useful to include screenshots.
|
|
|
|
These can be added and are version controlled using git lfs.
|
|
|
|
|
|
|
|
### 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).
|
|
|
|
|
|
|
|
## 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`
|
|
|
|
|
|
|
|
![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)
|
|
|
|
|
|
|
|
## Future Functionality
|
|
|
|
|
|
|
|
In the future, I'd like to be able to use this to export my notes into other
|
|
|
|
formats, such as pdf, html or maybe epub. This will almost certainly be done
|
|
|
|
with Pandoc.
|
|
|
|
|
|
|
|
[Issue \#14](https://git.jonathanh.co.uk/jab2870/knowledge-base/issues/14)
|
|
|
|
|
|
|
|
|