A simple command-line tool for managing a personal notes repository. Built with Spring Shell for a smooth interactive experience.
nof helps you manage markdown notes with a straightforward CLI interface. It handles daily journals, standard notes, and provides search/grep functionality across your note collection.
- Java 17+ (for running the jar)
- GraalVM (for building native binary)
- Optional: fzf for interactive file selection
# Standard jar
./mvnw clean package
# Native binary (faster startup)
./mvnw clean package -Pnative -DskipTests
sudo cp target/nof /usr/local/bin/nofJust run nof to start an interactive shell:
nof
shell:> stats
shell:> dn "Today's entry"
shell:> exitRun commands directly from your shell:
nof stats
nof dn "Quick journal entry"
nof sn "New Note Title"
nof gn "TODO" -lsn - Create a standard note in Inbox and opens it automatically
nof sn "Meeting Notes" # becomes -> # Meeting Notes (H1 title)dn - Daily journal entry
nof dn "Today was productive" # append just this one line
nof dn # lets you write multiple line markdown and appends it when you're done writing (.. on the new line to end the record)
nof dn -o # Open today's journal in your editoron - Open a note (with fuzzy search if fzf is installed)
nof on project # opens fzf with "project" selectedgn - Search/grep through notes
nof gn "TODO" -l # Show matching lines
nof gn "pattern" -i # Case insensitive
nof gn "^#" -r -l # Regex mode with linesgo - Open files from last grep results
nof go 1 # Open first result
nof go filename # Open by name
nof go # Open all resultsstats - Repository statistics (works also with git)
config - Manage configuration
nof config show
nof config editlogs - View application logs
nof logs 100
nof logs openConfig file: ~/.config/nof/application.properties
# Notes repository path
nof.repository.path=${HOME}/notes
# Default editor
nof.repository.editor=hx
# Log level
nof.logging.level=INFOI follow this structure for my notes. New notes go to my Inbox, where they are reviewed and condensed into a concise version that then moves to my Zettelkasten. Notes meant to be published on the blog are sent to my Output folder, while my Journal is used for personal journalling.
I might make this also configurable via config file later on.
notes/
├── Inbox/ # Unprocessed notes
├── Zettlekasten/ # Organized knowledge base
├── Journal/ # Daily notes (YYYY-MM-DD.md)
└── Output/ # Notes ready for publishing
# Run tests
./mvnw testDo whatever you want with it.

