Configuration reference¶
This page documents the supported config.toml keys for noteui.
Config file lookup and validation¶
noteui loads configuration in this order:
- If
NOTEUI_CONFIGis set, use that file path. - Otherwise use
noteui/config.tomlinside the user config directory.
If the file does not exist, noteui uses defaults.
If the file contains unknown keys or invalid values, noteui rejects that load and falls back to defaults.
Minimal example¶
dashboard = true
default_workspace = "work"
[workspaces.work]
root = "/home/alice/notes"
label = "Work"
[workspaces.demo]
root = "/home/alice/demo-notes"
label = "Demo"
[theme]
name = "nord"
[preview]
style = "auto"
[sync]
default_profile = "homebox"
[sync.profiles.homebox]
ssh_host = "notes-prod"
remote_root = "/srv/noteui"
remote_bin = "/usr/local/bin/noteui-sync"
Full example¶
dashboard = true
default_workspace = "work"
[workspaces.work]
root = "/home/alice/notes"
label = "Work"
sync_remote_root = "/srv/noteui/work"
[workspaces.demo]
root = "/home/alice/demo-notes"
label = "Demo"
sync_remote_root = "/srv/noteui/demo"
[theme]
name = "default"
border_style = "rounded"
app_padding_x = 2
app_padding_y = 1
panel_padding_x = 1
panel_padding_y = 0
[typography]
bold_title_bar = true
bold_panel_titles = true
bold_headers = true
bold_selected = true
bold_modal_titles = true
[icons]
category_expanded = "▾"
category_collapsed = "▸"
category_leaf = "•"
note = "·"
[modal]
border_style = "rounded"
padding_x = 2
padding_y = 1
[preview]
render_markdown = true
style = "dark"
syntax_highlight = true
code_style = "monokai"
privacy = false
line_numbers = true
[sync]
default_profile = "homebox"
[sync.profiles.homebox]
ssh_host = "notes-prod"
remote_root = "/srv/noteui"
remote_bin = "/usr/local/bin/noteui-sync"
[keys]
toggle_sync = ["S"]
select_workspace = ["W"]
select_sync_profile = ["F"]
open_conflict_copy = ["O"]
show_sync_debug = ["ctrl+e"]
show_sync_timeline = ["Y"]
delete_remote_keep_local = ["U"]
sync_import_current = ["i"]
sync_import = ["I"]
Top-level keys¶
dashboarddefault_workspaceworkspacesthemetypographyiconsmodalpreviewkeyssyncdaily_notes
dashboard¶
Type: boolean
Default:
Controls whether the dashboard is enabled.
default_workspace¶
Type: string
Optional. When set, noteui starts in that configured workspace. The name must match a key under workspaces.
workspaces¶
Type: table of named workspace entries
Each workspace defines a notes root and an optional display label.
Example:
[workspaces.work]
root = "/home/alice/notes"
label = "Work"
[workspaces.demo]
root = "/home/alice/demo-notes"
label = "Demo"
Supported keys per workspace:
root: required notes root for that workspacelabel: optional UI label used in the footer, title bar, and pickersync_remote_root: optional path override that directs sync traffic for this workspace to a specific remote directory, instead of using the active sync profile'sremote_root
sync_remote_root is the key to preventing cross-workspace note contamination when multiple workspaces share the same sync profile. Without it, all workspaces upload to and download from the same remote directory, which means workspace A's notes appear as remote-only placeholders in workspace B.
Example with per-workspace remote roots:
[workspaces.work]
root = "/home/alice/notes/work"
label = "Work"
sync_remote_root = "/srv/noteui/work"
[workspaces.personal]
root = "/home/alice/notes/personal"
label = "Personal"
sync_remote_root = "/srv/noteui/personal"
When sync_remote_root is set, the workspace picker shows it as a third line under the root path so you can confirm the mapping before switching.
Workspace switching is available from the command palette when multiple workspaces are configured. Local UI state such as pins, collapsed folders, recent commands, and sort preference is stored separately per workspace.
theme¶
Theme chooses the built-in theme and optional visual overrides.
theme.name¶
Type: string
Default:
Valid built-in theme names:
defaultnordgruvboxcatppuccincatppuccin-mochamochacatppuccin-lattelattesolarized-lightpaperonedarkkanagawadraculaeverforesteverforest-darktokyo-night-stormtokyonight-stormgithub-lightgithub-darkcarbonfoxcrimsondusk
Theme color overrides¶
Type: string for each field
Supported override fields:
bg_colorpanel_bg_colorborder_colorfocus_border_coloraccent_coloraccent_soft_colortext_colormuted_colorsubtle_colorchip_bg_colorinline_code_bg_colorpinned_note_colorsynced_note_colorunsynced_note_colorsyncing_note_colormarked_item_colorerror_colorsuccess_colorselected_bg_colorselected_fg_colorhighlight_bg_color
These fields default to the selected built-in theme. Leave them unset unless you want to override a specific color.
theme.border_style¶
Type: string
Default:
Valid values:
roundednormaldoublethickhidden
Theme spacing¶
Type: integer
Defaults:
These fields control outer app padding and per-panel padding.
typography¶
Type: booleans
Defaults:
[typography]
bold_title_bar = true
bold_panel_titles = true
bold_headers = true
bold_selected = true
bold_modal_titles = true
Supported fields:
bold_title_barbold_panel_titlesbold_headersbold_selectedbold_modal_titles
icons¶
Type: strings
Defaults:
Supported fields:
category_expandedcategory_collapsedcategory_leafnote
modal¶
Modal controls popup colors, border style, and padding.
Supported fields:
bg_colorborder_colortitle_colortext_colormuted_coloraccent_colorerror_colorborder_stylepadding_xpadding_y
Fields left unset inherit the app's effective visual styling.
Defaults:
Valid modal.border_style values match theme.border_style.
preview¶
Preview controls terminal preview rendering.
Defaults:
[preview]
render_markdown = true
style = "dark"
syntax_highlight = true
code_style = "monokai"
privacy = false
line_numbers = true
preview.render_markdown¶
Type: boolean
When true, noteui renders Markdown-style previews for supported note content.
preview.disable_paths¶
Type: list of strings
Default: unset
Use this to turn off rich preview rendering for specific paths or subtrees.
Example:
preview.style¶
Type: string
Valid values:
darklightautonotty
preview.syntax_highlight¶
Type: boolean
Enables syntax highlighting inside rendered code blocks.
preview.code_style¶
Type: string
Supported values:
monokaigithubdraculaswapoffonesenterprisenativeparaiso-darkparaiso-light
preview.privacy¶
Type: boolean
Controls privacy blur mode in the preview pane.
preview.line_numbers¶
Type: boolean
Controls line numbers in the preview pane.
sync¶
Sync is optional. If sync.default_profile is empty, noteui does not attempt network sync.
sync.default_profile¶
Type: string
Default: empty
If set, it must match one of the names under sync.profiles.
sync.profiles.<name>¶
Each sync profile supports:
ssh_hostremote_rootremote_bin
All three are required when the profile exists.
Example:
[sync]
default_profile = "homebox"
[sync.profiles.homebox]
ssh_host = "notes-prod"
remote_root = "/srv/noteui"
remote_bin = "/usr/local/bin/noteui-sync"
For end-to-end sync setup, import flows, conflict resolution, and recovery behavior, see the Sync guide.
keys¶
Each [keys] field takes a list of key strings.
If a field is omitted or given an empty list, noteui keeps the built-in default binding.
Example:
[keys]
open = ["enter", "o"]
toggle_sync = ["S"]
open_conflict_copy = ["O"]
sync_import = ["I"]
note_history = ["H"]
trash_browser = ["X"]
Everyday navigation and panes¶
openDefault:["enter", "o"]refreshDefault:["r"]quitDefault:["q", "ctrl+c"]focusDefault:["tab"]searchDefault:["/"]command_paletteDefault:["ctrl+p", ":"]move_upDefault:["k", "up"]move_downDefault:["j", "down"]collapse_categoryDefault:["h", "left"]expand_categoryDefault:["l", "right"]jump_bottomDefault:["G"]pending_gDefault:["g"]scroll_half_page_upDefault:["ctrl+u"]scroll_half_page_downDefault:["ctrl+d"]scroll_page_downDefault:["ctrl+f", "pgdown"]scroll_page_upDefault:["ctrl+b", "pgup"]next_matchDefault:["n"]prev_matchDefault:["N"]
Notes, categories, and organization¶
new_noteDefault:["n"]new_temporary_noteDefault:["N"]new_todo_listDefault:["T"]create_categoryDefault:["C"]toggle_categoryDefault:[" "]deleteDefault:["d"]moveDefault:["m"]renameDefault:["R"]add_tagDefault:["A"]toggle_selectDefault:["v"]clear_marksDefault:["V"]pinDefault:["p"]promote_temporaryDefault:["M"]archive_temporaryDefault:["ctrl+a"]move_to_temporaryDefault:["ctrl+r"]show_pinsDefault:["P"]show_todosDefault:["ctrl+t"]select_workspaceDefault:["W"]sort_keyDefault:["s"]Opens the sort menu. Follow with a sub-key to pick a method.sort_by_nameDefault:["n"]Active only inside the sort menu. Sorts alphabetically by path.sort_by_modifiedDefault:["m"]Active only inside the sort menu. Sorts by modification time, newest first.sort_by_createdDefault:["c"]Active only inside the sort menu. Sorts by creation date (frontmatterdate:/created:/created-at:, falling back to modification time), newest first.sort_by_sizeDefault:["s"]Active only inside the sort menu. Sorts by file size, largest first.sort_reverseDefault:["r"]Active only inside the sort menu. Toggles ascending/descending order.
Preview and help¶
show_helpDefault:["?"]toggle_preview_privacyDefault:["B"]toggle_preview_line_numbersDefault:["L"]
Sync¶
toggle_syncDefault:["S"]Toggles the selected local note betweensync: localandsync: synced.make_sharedDefault:["ctrl+s"]Toggles the selected note betweensync: sharedandsync: local.select_sync_profileDefault:["F"]open_conflict_copyDefault:["O"]Opens the generated conflict copy for the selected conflicted synced note.show_sync_debugDefault:["ctrl+e"]Opens the sync details modal for the selected unhealthy synced note.show_sync_timelineDefault:["Y"]Opens the sync timeline showing recent sync run history for the current workspace.delete_remote_keep_localDefault:["U"]sync_import_currentDefault:["i"]sync_importDefault:["I"]undo_deleteDefault:["Z"]Restores the most recently trashed note or category to its original path. Available until the next deletion or workspace switch.
History and extra motions¶
note_historyDefault:["H"]Opens the version history modal for the selected local note.trash_browserDefault:["X"]Opens the trash browser modal, listing notes trashed from the current workspace. Navigate withj/k, pressenterto restore,escto close.
Templates¶
new_templateDefault:["ctrl+n"]Creates a blank template file in.templates/and opens it in your editor.edit_templatesDefault:["ctrl+k"]Opens the template picker in edit mode so you can select a template to edit.
Daily notes¶
open_daily_noteDefault:["D"]Opens today's daily note, creating it if it does not yet exist. See[daily_notes]for directory and template configuration.
Todo and extra motions¶
bracket_forwardDefault:["]"]bracket_backwardDefault:["["]heading_jump_keyDefault:["h"]todo_keyDefault:["t"]todo_addDefault:["a"]todo_deleteDefault:["d"]todo_editDefault:["e"]todo_due_dateDefault:["u"]todo_priorityDefault:["p"]pending_zDefault:["z"]delete_confirmDefault:["d"]toggle_encryptionDefault:["E"]link_keyDefault:["f"]Second key of the]f/[fchord to enter link nav mode in the preview pane. Also follows the selected link when already in link nav mode.follow_linkDefault:["f"]Follows (opens) the currently selected wikilink while in link nav mode. Shares the default withlink_key.
The in-app help modal is still the live source of truth if you change keybindings heavily.
[keys]¶
The [keys] section overrides default bindings.
Sync-related key defaults:
toggle_sync = ["S"]make_shared = ["ctrl+s"]select_workspace = ["W"]select_sync_profile = ["F"]open_conflict_copy = ["O"]show_sync_debug = ["ctrl+e"]show_sync_timeline = ["Y"]delete_remote_keep_local = ["U"]sync_import_current = ["i"]sync_import = ["I"]
[daily_notes]¶
Controls where daily notes are stored and which template is used when creating one.
daily_notes.dir¶
Type: string
Default: "daily"
The subdirectory inside your notes root where daily notes are stored. The directory is created automatically on first use.
daily_notes.template¶
Type: string
Default: "" (no template; a minimal heading is used instead)
Path to a template file relative to .templates/. When set, pressing D creates the daily note by applying that template (with {{date}}, {{time}}, and {{title}} substitution). When empty, the note is created with a # YYYY-MM-DD heading.
Example:
With this config, pressing D opens or creates journal/YYYY-MM-DD.md, using .templates/daily.md as the template for new files.
Reserved directories¶
noteui uses the following hidden directories inside the notes root and skips them during normal note discovery:
| Directory | Purpose |
|---|---|
.tmp/ |
Temporary notes |
.noteui-history/ |
Automatic per-note version history |
.noteui-sync/ |
Sync bookkeeping metadata and event log (sync-events.jsonl) |
.templates/ |
User-defined note templates (see Note templates) |