Repository navigation
Notes
A notes app that lives inside the shell: Super + Alt + N opens a floating three-pane window — places and notebooks on the left, a list of cards in the middle, the note itself on the right — with a block editor that handles headings, lists, code, tables, pictures, files, link cards, wikilinks and drawings. It keeps revisions, sends reminders, exports to Markdown, HTML, PDF or a zip, imports from Google Keep, and lets the AI assistant rewrite a selection or write into the note.
The notes you already had in the widget overlay (Super + G) are migrated once at startup and keep working from the same store.
- Super + Alt + N — the app opens as an ordinary floating window (ii Notes), centred on the current workspace; move, resize or close it like any other.
-
Ctrl + N makes a note. Type
#for a heading,-for a list,1.for a numbered one,- [ ]for a checkbox (- [x]starts it ticked),>for a quote,```for code,---for a divider — the prefix converts the block and disappears. - Type
[[to link another note by title; an autocompletion list appears as you type. - The Draw button (pencil) in the formatting toolbar adds a drawing. Ctrl + F jumps to the search box. Esc goes back, then closes.
Three panes, because notes are three questions at once — where am I, which note, and what does it say. On a narrow window it collapses to two panes and then to one. The rail lists the places — All notes, Recent, Favourites, Trash — and your notebooks, each with a count; the list draws its cards from the index alone, so no card opens a document just to render itself.
From the header or the note menu: create, rename, pin, favourite, trash, restore and purge. The header keeps favourite, pin, page style, Ask AI (when AI is enabled) and a menu; the menu holds the rest — table of contents, version history, focus mode, reminder, lock, export and Move to the trash.
- Focus mode — Ctrl + Shift + F hides everything but the page.
- Outline — a table-of-contents drawer built from the note's headings; a heading scrolls to its block and puts the caret in it.
- Statistics — from the top bar: counts per notebook as a column chart and a six-week activity heatmap.
A note is an ordered list of blocks, not one string. Text blocks come as paragraph, heading, list (three styles), quote, callout and divider; Enter splits a block, Backspace at the start joins upward (or undoes the bullet first), Tab indents, and undo/redo walk the exact inverse operations. A contextual toolbar shows what the block under the caret can become. Inline Markdown is drawn when the caret is elsewhere and shown as source on the line you are editing.
Blocks that hold things:
- Pictures — pasted, dropped on the page or chosen from a dialog. Resize by dragging the right edge; a picture is never enlarged past its own size, and its width is stored as a fraction of the page so the note agrees with itself on two monitors.
-
Code — on its own surface, deliberately outside the typing shortcuts (inside code
#is a comment). - Tables — edited in place; Tab moves to the next cell, and Tab in the last one adds a row.
- Files — attached to the note.
- Link cards — a block holding only a URL offers Convert to preview card: a card with the site's title and picture. Fetch link previews (in the app's settings) can be turned off; then a link shows only its address and nothing leaves the machine.
- Drawings — see below.
Wikilinks (a note title between double square brackets, opened with [[) autocomplete against your note titles, and an Open affordance appears under the cursor when it rests on one; a note's footer lists the notes that link to it (Mentioned in). Search (Ctrl + F) narrows the list of the current place, and ignores accents.
Seven page styles, drawn by a shader so they scroll with the text and stay crisp at any spacing: Plain, Grid, Dots, Ruled, Ruled with margin, Isometric and Graph. The paper colour is a theme token, so it follows your palette. The default style and how strongly the page shows are app settings (Config.options.notes.defaultPaper, paperStrength); any note can change its own from the header.
The Draw button in the formatting toolbar opens an ink sheet over the note; double-click a drawing that is already there (or use its pencil button) to continue it. It reuses the tablet family's ink engine — pressure through the pointer, three smoothing passes, width from pressure with a floor — and the tray offers tools, a width slider that previews the stroke, and a pressure switch that appears once a device that measures pressure has been seen. The ink colour is chosen by contrast against the paper, so a dark theme does not get invisible ink.
Strokes are kept in a sidecar beside the picture, so a drawing can be undone stroke by stroke in a later session and re-exported at another size. The sheet has a fixed aspect that follows the existing drawing, so a second edit lands exactly on the first.
- Templates — Meeting, Journal, Tasks, Code, Recipe and Review, dated when used.
- Revisions — Version history in the note menu, with a visual diff of the blocks that changed and a restore. A version is kept automatically when the last one for that note is more than a quarter of an hour old, and whenever you ask for one; the newest fifty per note are kept.
-
Autosave — Save after you stop typing (
Config.options.notes.autosaveDelay, 400 ms by default). - Reminders — Remind me… in the note menu (in an hour, this evening, tomorrow, in a week); when it is due it arrives once as a desktop notification.
- Locked notes — a note can be hidden behind a PIN (four characters or more); the same PIN opens every locked note. The PIN is stored salted and hashed in the app's own state, never beside the note, and the page says plainly that the note itself is not encrypted on disk. Forgetting the PIN is a row in the app's settings: every locked note opens again and the next lock asks for a new one.
- Small things — a dictation button in the editor toolbar, and a checkbox item can be promoted to a task on hover.
With the AI policy enabled (Config.options.policies.ai), an assistant button sits in the editor toolbar and a floating bar appears above any text selection with formatting on one side and AI on the other. The AI menu offers eight tones, transformations, code actions and custom styles; the result opens in a side-by-side comparison with four choices: Replace, Add it below, Copy, Discard. The spark button in the note header (Ask AI) opens a prompt bar in the note itself: what the assistant writes is added to the note as new blocks, and it can use the same tools as the AI tab (this needs a model with tool support). In the other direction, the assistant gained a notes_search tool so it can look things up in your notes.
The menu actions run as single-turn tasks that respect the same privacy policies as the chat.
All three live in the app's settings page (the gear at the bottom of the rail):
-
Import from Google Keep — Choose a folder… opens the system folder chooser; point it at the
Takeout/Keepfolder of a Google Takeout export (the archive root works too). -
Export — this note or the whole store as Markdown (text files with the pictures beside them — Obsidian and Logseq read these), a single web page with the pictures inside it, PDF (needs
weasyprintorwkhtmltopdf), or everything zipped (notes, pictures and drawings). -
Keep a copy in Google Drive — adds the notes folder to the backup that
rclonealready runs on its own schedule, with a Sync now button. It is a backup, not a two-way sync, and it needs Google Drive set up in the shell's own settings first.
-
Dashboard — a Notes tab in the bottom widget group next to Calendar, Tasks and Timer (Settings → Sidebars → Notes tab in dashboard,
Config.options.sidebar.bottomGroup.notesTab). - Quick toggle — a Notes quick toggle opens and closes the app.
- Search — notes are a result section in the launcher.
- Desktop widgets — the Notes widgets on the wallpaper read the same store.
- Tablet family — Notes is an app in the app drawer, and the tablet's draw-on-screen sheet can file a drawing straight into a note.
-
IPC —
qs -c ii ipc call notes open | close | toggle | openNote <id> | capture <text> | trash <id> | list, plus thenotesToggle,notesOpenandnotesCloseglobal shortcuts for your own binds.
The app's own switch is Settings → Overlays & OSD → Notes App → Enable Notes app (Config.options.notes.enable); turning it off also drops the dashboard tab, the launcher section and the tablet app. Everything else — page style, autosave delay, link previews, Drive backup, Keep import, export, the PIN and the trash — is on the app's own settings page. Shortcuts:
| Keys | Action |
|---|---|
| Super + Alt + N | Open notes from anywhere |
| Ctrl + N | New note |
| Ctrl + F | Search notes |
| Ctrl + Shift + F | Focus mode |
| Esc | Back, or close |
Notes are stored as an index plus one document per note under ~/.local/state/quickshell/user/notes/ (index.json, with docs/, assets/ and revisions/ beside it), so typing in one note rewrites one small file. The old single notes.json is migrated once, at startup (and kept as notes.json.migrated), and a bridge keeps the older surfaces (widget overlay, desktop widgets, live draw, the AI integration) working unchanged.
| Piece | Role |
|---|---|
modules/ii/notes/ |
The app: NotesApp.qml (shortcuts, IPC), NotesAppWindow.qml, NotesAppContent.qml, the rail, list and detail panes, settings and statistics pages, the export, revisions and lock sheets, the templates page, sketch/ (the ink sheet), editor/ (one file per block type, the toolbar and the selection bar) |
services/NotesService.qml + services/notes/NotesStore.qml, NotesDocumentFile.qml
|
The store API, per-note writers with their own debounce and atomic writes, reminders |
services/notes/NotesDocument.js, NotesMarkdown.js, NotesMigration.js
|
Block schema and operations, document ⇄ markdown, the notes.json migration |
services/notes/NotesSearchIndex.js, NotesTemplates.js, NotesRevisions.qml, NotesLinkPreview.qml, NotesSync.qml
|
Search, templates, revision history, link cards, the Drive backup |
scripts/notes/notes_store.py, notes_export.py, keep_import.py, link_preview.py
|
The Python side: directory tree and batch commits, export formats, Google Keep import, link metadata |