Skip to main content

A CLI for managing your Neovim + Obsidian Zettelkasten

Project description

Zettelkasten CLI

A bespoke CLI for my Neovim + Obsidian Zettelkasten written in Python.

Installation

From PyPI

pip install zettelkasten-cli

Or with uv:

uv tool install zettelkasten-cli

From Source

git clone https://github.com/mischavandenburg/zettelkasten-cli.git
cd zettelkasten-cli
uv sync
uv run zk --help

Configuration

Environment Variables

Variable Required Default Description
ZETTELKASTEN Yes - Path to your Zettelkasten root directory
ZETTELKASTEN_INBOX_DIR No 0 Inbox Directory for new notes (relative to root)
ZETTELKASTEN_DAILY_DIR No periodic-notes/daily-notes Directory for daily notes (relative to root)
ZETTELKASTEN_WEEKLY_DIR No periodic-notes/weekly-notes Directory for weekly notes (relative to root)
ZETTELKASTEN_DAILY_TEMPLATE No zk/daily.md Path to daily note template (relative to root)
ZETTELKASTEN_WEEKLY_TEMPLATE No zk/weekly.md Path to weekly note template (relative to root)
ZETTELKASTEN_EDITOR No nvim Editor command (nvim, vim, hx, code, etc.)
ZETTELKASTEN_NVIM_ARGS No + normal Gzzo Arguments passed to Neovim when opening notes
ZETTELKASTEN_NVIM_COMMANDS No :NoNeckPain Comma-separated Neovim commands to run on open

Add to your shell profile (e.g., ~/.bashrc or ~/.zshrc):

export ZETTELKASTEN="$HOME/Documents/Zettelkasten"

# Optional: customize inbox directory
export ZETTELKASTEN_INBOX_DIR="Inbox"

# Optional: customize periodic notes directories
export ZETTELKASTEN_DAILY_DIR="daily-notes"
export ZETTELKASTEN_WEEKLY_DIR="weekly-notes"

# Optional: customize template locations
export ZETTELKASTEN_DAILY_TEMPLATE="templates/daily.md"
export ZETTELKASTEN_WEEKLY_TEMPLATE="templates/weekly.md"

# Optional: use a different editor
export ZETTELKASTEN_EDITOR="hx"  # or vim, code, etc.

# Optional: customize Neovim behavior (only applies when using nvim)
export ZETTELKASTEN_NVIM_ARGS="+ normal Gzzo"
export ZETTELKASTEN_NVIM_COMMANDS=":NoNeckPain,:set wrap"

Default Directory Structure

With default settings, the CLI expects the following structure:

$ZETTELKASTEN/
├── 0 Inbox/              # New notes are created here
├── periodic-notes/
│   ├── daily-notes/      # Daily notes (YYYY-MM-DD.md)
│   ├── weekly-notes/     # Weekly notes (YYYY-Www.md)
│   ├── monthly-notes/    # (not yet implemented)
│   └── yearly-notes/     # (not yet implemented)
└── zk/
    ├── daily.md          # Template for daily notes
    └── weekly.md         # Template for weekly notes

All paths are configurable via environment variables.

Templates

Templates are read from the configured template paths. If templates don't exist, minimal defaults are used.

Usage

zk [OPTIONS] COMMAND [ARGS]...

Options:

  • --install-completion: Install completion for the current shell.
  • --show-completion: Show completion for the current shell.
  • --help: Show this message and exit.

Commands:

  • day: Open daily note or create if it doesn't exist.
  • week: Open weekly note or create if it doesn't exist.
  • new: Create a new note with the provided title.

zk day

Open daily note or create if it doesn't exist.

zk day [OPTIONS]

zk week

Open weekly note or create if it doesn't exist.

zk week [OPTIONS]

zk new

Create a new note with the provided title. Will prompt if no title given. Adds Obsidian markdown link to the daily note.

zk new [OPTIONS] [TITLE]

Arguments:

  • [TITLE] - Note title (optional, will prompt if not provided)

Options:

  • --vim: Indicates input is coming from Neovim. Suppresses rich output.

Development

# Install dependencies
uv sync

# Run linter
uv run ruff check .

# Run tests
uv run pytest

# Build package
uv build

Releasing

This project uses release-please for automated releases.

  1. Use Conventional Commits for commit messages:

    • feat: for new features (bumps minor version)
    • fix: for bug fixes (bumps patch version)
    • feat!: or fix!: for breaking changes (bumps major version)
  2. When commits are pushed to main, release-please creates/updates a release PR

  3. Merging the release PR automatically:

    • Creates a GitHub release with changelog
    • Publishes to PyPI

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zettelkasten_cli-1.0.3.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zettelkasten_cli-1.0.3-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file zettelkasten_cli-1.0.3.tar.gz.

File metadata

  • Download URL: zettelkasten_cli-1.0.3.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zettelkasten_cli-1.0.3.tar.gz
Algorithm Hash digest
SHA256 61b2478b2868cc5b9fb94f4eedb047d056ad70cf29bc2e5071d36311fd729310
MD5 b1ccd78e77a753d264e72da39fb449ed
BLAKE2b-256 b42e2e0b2c138b63a9d68809c65ea78977510084301d5c7958d6b23a7360881c

See more details on using hashes here.

File details

Details for the file zettelkasten_cli-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for zettelkasten_cli-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4230f6bc19a49b597562ea4be1716883bb66bd0bc5f77422c8c6302fb1288dc3
MD5 d80cc1a2a8943d5e8505eaf71234f88f
BLAKE2b-256 43692ef901df21b9b7fc00ee6d6796aa89381ddd6c97133129129eebb0636beb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page