# *Jeff*
Installation •
Usage •
Build •
Notes
***Jeff*** is a command line note management app, similar to Obsidian.
## Installation
#### ***Install with cargo:***
```bash
$ cargo install jeff
```
## Usage
#### ***Create a vault using the following command:***
```bash
$ jf vault newvault ~/vaults
```
Here, ***newvault*** is the name of the vault, and '***~/vault***' is the location where it will be created (this location should be an absolute fs path and exist already or `jeff` will throw an error).
Providing no arguments to `vault` command will list all vaults.
```bash
$ jf vault
```
Adding the '***-l***' flag will list all vaults with their locations.
```bash
$ jf vault -l
```
At this moment only ***newvault*** will be listed.
#### ***Enter into the vault:***
```bash
$ jf enter newvault
```
`enter` command is also used to switch to other vaults.
#### ***Create notes and folders***
```bash
$ jf note newnote
```
```bash
$ jf folder newfolder
```
`note` and `folder`, both work similarly and create the corresponding items in ***current folder***. When a vault is first created, the ***current folder*** is set to its root.
#### ***Create templates***
To avoid having to write the boilerplate for things like weeks notes, `jeff` provides note templates.
```bash
# list all templates
$ jf template
```
```bash
# create and edit a new template "weekly_note"
$ jf template weekly_note
```
Notes can then be created using a template by supplying `--template (-t)` along with the name of the template.
```bash
# create a new note from the "weekly_note" template
$ jf note reflection --template weekly_note
# or equivalently
$ jf nt reflection -t weekly_note
```
#### ***Create and edit daily note in the current vault***
Daily notes are stored as `YYYY-MM-DD.md` at the top-level the current vault. `jf today` will edit any existing daily note. If no daily note exists,
you will be prompted to create one.
```bash
# Create daily note YYYY-MM-DD? (y/n)
$ jf today
```
#### ***Change folder***
```bash
$ jf chdir newfolder
```
`chdir` command will switch the current folder to the location mentioned.
Relative path to location from current folder has to be provided. Standard fs paths are accepted as valid input, like `../folder1/somefolder/`.
```bash
$ jf chdir ..
```
This will switch back to the root of vault.
#### ***Print dir tree of current folder***
```bash
$ jf list
```
When needed `list` command will print the dir tree of current folder.
All notes will be highlighted in ***yellow***,
vaults will be highlighted in ***red***, and folders will appear ***blue***.
This is what the dir tree will look like with this vault's root as the current folder.
```bash
newvault # red
├── newfolder # blue
└── newnote # yellow
```
The highlight colors can be configured using `jf config -color `. Colors can also be set using `jf config -color`, which displays a select containing all available options.
Set vault color to red
```bash
jf config vault-color red
```
Set folder color using selection
```bash
jf config folder-color
```
#### ***Fs operations***
Command `remove` works as its name suggests, on all items (vaults, notes, or folders).
```
$ jf remove note newnote
```
Commands `rename` and `move` are used similarly but take one additional argument each.
Command `rename` takes the new name as its third argument.
```bash
$ jf rename note newnote somenewnote
```
Command `move` takes the new location as its third argument.
For vaults, path rules are same as `vault` command and for other items, path rules are same as `chdir` command.
```bash
$ jf move note newnote /newfolder/
```
These commands take the item type (***vault***, ***note***, or ***folder***) as their first argument.
Command `vmove` is similar to `move`, but it moves an item (***note*** or ***folder***) from the current folder of the current vault to the root of a different vault, and takes the name of this vault as an argument in place of location.
```bash
$ jf vmove note newnote somevault
```
Every keyword used so far (commands and item names) is interchangeable with its two letter alias, e.g. `move` command can also be written as:
```
$ jf mv nt newnote /newfolder/
```
#### ***Handle Jeff's config***
```bash
$ jf config
```
Will display the current configuration. Add additional arguments, `jf config