Command line
n0te [options] [file…] n0 is the same command
n0 hands its arguments to n0te’s service and returns as soon as the window is up, so your shell stays free. If no service is running, it starts one first.
Opening things
n0 # the switcher over your vault
n0 "Launch plan" # a note by name, anywhere in the vault
n0 "Projects/Acme/Launch plan" # vault-relative, with or without .md
n0 Projects/Acme # a folder: the switcher, narrowed to it
n0 blue # no such note: the switcher, with "blue" typed in
n0 src/main.rs:42 # any file at a line; also file:line:col
n0 +42 src/main.rs # the same
n0 '~/notes/todo.txt' # a quoted ~ is expanded
n0 ./new-idea.md # a file that doesn't exist yet opens empty
n0 a.md b.md # several files, a window each
git log -1 | n0 - # stdin
n0 <(git show HEAD:README.md) # a pipe, read the same way
How a name is found
- A real path, relative to where you are, wins.
- Then a path in the vault, with or without
.md. - Then any note with that name, the way a wikilink resolves.
- A folder in the vault opens the switcher narrowed to that folder.
- Anything else that looks like a path (
./x,../x,~/x,/x,notes/x.mdwhennotes/is a folder where you are, or a short file extension other than.md, likex.sh) opens as a new, empty file, written when you type. So does everything, when there’s no vault. - Anything else opens the switcher with what you typed, ready to find it or create it. A name with a dot that isn’t an extension, like
v0.1 plan, counts as a name.
Options
| Option | What it does |
|---|---|
+N | start at line N |
-e | start editing: at line N if given, else at the end of a note (at the top of code) |
-t TEXT [NOTE] | add - [ ] TEXT to today’s daily note, or to NOTE, without opening a window |
--today | today’s daily note, created from your template if needed |
- | read from stdin |
--settings | open the settings page |
--setup | wire n0te into Omarchy; --setup default also opens .md files in n0te; --setup remove undoes it all |
--service | run the service (n0te starts it by itself when needed) |
--quit | save every open note and stop the service |
--help, -h | print the usage |
--version, -V | print the version |
--bench | report the time to the first frame, then close |
--check | render every note in the vault and report problems (for development) |
Examples
n0 -e --today # write in today's note
n0 -t "buy milk" # capture a task
n0 -t "call the bank" errands # …into a note
rg -n TODO | head -1 | cut -d: -f1,2 | xargs n0 # the first TODO, at its line
n0 -e +1 "Inbox" # edit the top of a note
Exit status
| Status | Meaning |
|---|---|
| 0 | done; for an open, the window is up |
| 1 | something failed, and n0te said what (-t couldn’t write, --quit couldn’t save a note) |
| 2 | a usage mistake: an unknown --option, -t without text |
| 127 | n0te-app couldn’t be started |
Tab completion
In bash, n0 <Tab> completes note names from your vault, also by file name (n0 laun<Tab> → Projects/Acme/Launch plan), then files and options. n0te --setup installs it; it takes effect in new shells.
Environment
n0 sends only its arguments and the current folder to the service, so these are read where the service runs: your session’s environment if it starts at login, or the shell of the first n0. After changing one, n0 --quit so the next n0 starts a service that sees it. (Tab completion runs in your shell, so it sees your shell’s N0TE_VAULT straight away.)
| Variable | What it does |
|---|---|
N0TE_VAULT | use this vault, over Settings and Obsidian’s |
XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_STATE_HOME | where config, app entries and state go (defaults under ~) |
XDG_RUNTIME_DIR | where the service’s socket and log live |
GSK_RENDERER | GTK’s renderer; n0te defaults to gl, which measured fastest |