Zettl
Installing Zettl
To install Zettl, you will need the Rust toolchain installed. You can install Rust using rustup. Once you have Rust installed, clone the repository and install the binary using cargo.
$ git clone https://github.com/hedonhermdev/zettl
$ cargo install --path zettl
Initializing Zettl
You will need to create a directory to store your notes. You can tell zettl to use this directory by setting the $ZETTL_DIRECTORY
variable. Note that zettl will use this directory for all operations so you will probably have to set this variable in your .bashrc
(or your .zshrc
).
$ mkdir ~/kasten
$ echo "export ZETTL_DIRECTORY=~/kasten" >> .bashrc
Initializing zettl creates a .zettl
directory in your base directory.
$ zettl init
Configuring Zettl
You can change config options by setting values in the config file.
$ vim $ZETTL_DIRECTORY/.zettl/config.yml
Currently, zettl supports the following options:
---
name: My Zettelkasten
author: Me
editor_cmd: vim
editor_args: []
indexes: true
graph: true
An example, customised config will look like this:
---
name: My Zettelkasten
author: Tirth Jain
editor_cmd: nvim
editor_args:
- "+Goyo"
- "+Limelight"
indexes: true
graph: true
Using Zettl
Once Zettl is initialized, you can use it to write notes from anywhere.
# Create a new fleeting note. These are like daily notes.
$ zettl fleet
# Create a new note. This will be created in notes/some-idea.md.
$ zettl note some-idea
# Create a new note in a category. This will be created in notes/project1/some-idea.md.
$ zettl note project1/some-idea
These commands will open a markdown file in the editor you specified.
Graphs and Indexes
Zettl creates _index.md
files in each directory to index your notes. You can turn this off by setting the following in the config directory.
indexes: false
The fleets/_index.md
file will look kind of like this:
---
title: Fleets Index
author: Tirth Jain
created: "2021-04-29 11:16:25"
---
# Fleets Index
- [[fleets/2021-04-28]]
- [[fleets/2021-04-29]]
Similarly, Zettl creates a .graph.json
file to track connections between your notes. You can visualize this graph with a visualizer of your choice. I prefer 3d-force-graph. Note that connections are made using the [[mediawiki]] link format.
To turn off this graph generation:
graph: false
To manually create the graph and the indexes, you can run:
$ zettl graph
$ zettl index
How Your Notes are Saved
Zettl saves your notes as markdown files. After a few days of using zettl, your zettl directory will look something like this:
/Users/hedonhermdev/kasten
├── _index.md
├── fleets
│ ├── 2021-04-28.md
│ ├── 2021-04-29.md
│ └── _index.md
└── notes
├── SDNs
│ ├── _index.md
│ └── p4-notes.md
├── _index.md
├── devops
│ ├── _index.md
│ ├── git-server-setup.md
│ └── homegrown-autodeployment.md
├── git
│ ├── _index.md
│ ├── cli.md
│ ├── error-handling.md
│ ├── git-in-rust.md
│ ├── implementation.md
│ └── internal-objects.md
├── how-to-zettel.md
├── vim
│ ├── _index.md
│ ├── autocmds.md
│ └── vimrc-for-servers.md
├── workflow.md
├── zettl
│ ├── _index.md
│ ├── philosophy.md
│ └── roadmap.md
Integrations
While zettl doesnt have a programmatic way to support integrations (yet!) but here are some integrations I can think of:
- Version control with git
$ cd $ZETTL_DIRECTORY
$ git init
$ git add .
$ git commit -m "Saving notes"
$ ln -s $ZETTL_DIRECTORY path/to/hugo/content
$ hugo serve