Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

  1. A real path, relative to where you are, wins.
  2. Then a path in the vault, with or without .md.
  3. Then any note with that name, the way a wikilink resolves.
  4. A folder in the vault opens the switcher narrowed to that folder.
  5. Anything else that looks like a path (./x, ../x, ~/x, /x, notes/x.md when notes/ is a folder where you are, or a short file extension other than .md, like x.sh) opens as a new, empty file, written when you type. So does everything, when there’s no vault.
  6. 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

OptionWhat it does
+Nstart at line N
-estart 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
--todaytoday’s daily note, created from your template if needed
-read from stdin
--settingsopen the settings page
--setupwire n0te into Omarchy; --setup default also opens .md files in n0te; --setup remove undoes it all
--servicerun the service (n0te starts it by itself when needed)
--quitsave every open note and stop the service
--help, -hprint the usage
--version, -Vprint the version
--benchreport the time to the first frame, then close
--checkrender 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

StatusMeaning
0done; for an open, the window is up
1something failed, and n0te said what (-t couldn’t write, --quit couldn’t save a note)
2a usage mistake: an unknown --option, -t without text
127n0te-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.)

VariableWhat it does
N0TE_VAULTuse this vault, over Settings and Obsidian’s
XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_STATE_HOMEwhere config, app entries and state go (defaults under ~)
XDG_RUNTIME_DIRwhere the service’s socket and log live
GSK_RENDERERGTK’s renderer; n0te defaults to gl, which measured fastest