Jote is a simple Markdown notes manager.
I wanted a simple way of organizing my notes, without being required to use a new editor, or being bound to a specific editor. By design, such a method should at minium be:
- Frictionless to use, especially when adding a new note
- Usable by any editor (that can be invoked by the command line)
- Automatically backed by git
- Able to support any hierarchy
- Searchable via custom tags
For now, the easiest way to install is:
go install github.com/jhuntwork/jote/cmd/jote@latest
To create a new note, simply run jote new
or just jote
. If you have the
EDITOR
environment variable set, that command will be invoked to open a new
file. The EDITOR
command should block until the file is closed. For example,
the default command is vim --nofork
, which means vim launches in the
foreground and will block until you close the editor. A similar command for
VS Code would be code -w
.
On first run, jote
will initialize a git repository in ~/.local/share/jote
.
Because all further actions there are git actions, you can interact with it as
you would any other git repository.
New files will contain the following template:
---
title:
tags: []
---
The section between the ---
lines is considered front matter and is parsed as
yaml. If you provide a title, the file will be saved as [title].md
, otherwise
the file will be named with a unix timestamp of the current time.
title
is interpreted as a relative path in the git repository. This means that
notes can support a structured hierarchy. For example:
title: recipes/Asian Food/Spicy Thai Noodles
The resulting file would be named
~/.local/share/jote/recipes/Asian Food/Spicy Thai Noodles.md
.
tags
is a list of strings, so it can either be specified like this:
tags: [one, two, "another tag"]
or like this:
tags:
- one
- two
- another tag
Everything following the front matter section is the actual Markdown content.
Run jote ls
. This will provide a fzf
-like interface (via
go-fuzzyfinder) to list all notes.
Selecting a note will open it for editing.
Changes made to pre-existing notes via the jote interface will result in a new git commit tracking that change. Changing the title will move the file to the new location.
Run jote tags
. This provides a fzf
-like interface of all known tags, showing
the associated documents for each tag. Select a tag and the interface will
switch to a list of those documents, allowing you to select one for editing.
- An opinionated way for syncing to a git remote, allowing for editing across machines. For now, this can be managed through manual git commands in the repository.
- Outputting results of tag searches to stdout as a list, for consumption by other CLI tools.
- More advanced searches by content.
- Support a 'publish' keyword in the front matter. This could then be used by plugins to format and send documents to configured consumers.
- Deleting notes.