▍ humdrum codex / glint v1.0.2
license AGPL-3.0
9.6 KB raw

glint

A modeless terminal markdown editor with live styling — a Bubble Tea TUI built for a notes vault. Type in a centered iA-Writer-style writing canvas with soft-wrapping and live markdown coloring, flip to a Glamour read preview, fuzzy-find notes with a live preview pane, and theme it to match your terminal (Flexoki light/dark + charm). Open any file, jump to today's daily note, or start a fresh document from anywhere. Code files open with calm, minimal syntax highlighting (strings, comments, and numbers only) so glint works as a quick $EDITOR too. Prose gets light inline spellcheck — a red curly underline under obvious typos, with one-key suggestions.

Install

brew tap humdrum/tap https://codex.humdrum.me/git/homebrew-tap.git
brew trust humdrum/tap   # Homebrew gates third-party taps
brew install glint

Upgrade later:

brew update && brew upgrade glint

Usage

glint                 # fuzzy picker over the current directory
glint notes.md        # open a file
glint -n [name]       # new note in the current dir (-n -i → inbox, -n -v → vault)
glint -t              # today's daily note
glint -d              # browse the daily-notes folder
glint -v              # fuzzy picker over your vault, from anywhere
glint -i              # fuzzy picker over your inbox
glint -c              # interactive config walkthrough
glint -h              # help: all commands and keys
glint --version       # print version

Every command flag accepts a short letter or the full word, with one or two dashes: -n / --n / -new / --new, -t / --today, -v / --vault, etc.

Keys

Key Action
type / arrows / Enter / Backspace / Del edit and move (Up/Down move by visual line)
Enter on a list item continue the list (-/*/+, N./N), - [ ] checkboxes; numbers increment); empty item exits the list
Tab / Shift+Tab indent / outdent the current list item
mouse click move the cursor
mouse wheel scroll the view
Home / End smart Home (first non-blank, then column 0) / end of line
type ( [ ` with no selection auto-closes the pair with the cursor inside; type the closer over it to step past
Shift+arrows · Shift+Home/End select text (Ctrl+Shift+←/→ selects by word)
Ctrl+C / Ctrl+X / Ctrl+V copy / cut / paste (system clipboard); pasting a URL over a selection makes a [selection](url) link
Alt+s / Alt+i / Alt+c / Alt+k wrap the selection: bold ** · italic _ · code ` · link [sel]() (toggles off if already wrapped; no selection inserts the empty pair)
type * _ ` [ ( { < " ' with a selection surround the selection with that punctuation (repeat to nest, e.g. *** for bold)
Alt+← / Alt+→ move by word (also Alt+b / Alt+f)
Alt+Backspace / Ctrl+W delete the word before the cursor (Alt+d deletes the word after)
Ctrl+U / Ctrl+K delete to start / end of line
Ctrl+Z / Ctrl+Y undo / redo
Ctrl+S save (an unnamed buffer prompts for a name → inbox)
Ctrl+E export a printable HTML document and open it in the browser → Print → Save as PDF (see Export)
Ctrl+P toggle the Glamour read preview
Ctrl+F fuzzy file picker (with live preview)
Ctrl+G find in document (Enter/ next, Shift+Tab/ prev, Esc close)
Ctrl+L go to line (type a number, Enter to jump, Esc to cancel)
Ctrl+D today's daily note
Ctrl+N new note in the current directory (a typed picker query becomes its name)
Ctrl+B new note in the inbox
Ctrl+T cycle theme (flexoki-light → flexoki-dark → charm)
Alt+; · click spellcheck popup on the misspelled word at the cursor (or click an underlined word): pick a suggestion 19, a add to dictionary, i ignore, t toggle spellcheck, Esc close
Ctrl+/ toggle the in-editor help overlay (keys + commands)
Ctrl+Q quit (press twice if there are unsaved changes)
Esc clear the selection, or close find / back to the editor

Configuration

Run glint -c for an interactive walkthrough that writes the file for you (no hand-editing, daily-format presets instead of raw Go layouts). The settings live in ~/.config/glint/config.toml (all keys optional):

vault_dir     = ""           # the vault `glint -v` opens from anywhere (e.g. "~/Notes"); unset = current dir
inbox_dir     = ""           # where `glint -n -i` / save-as land; "" = working dir, relative = under it
daily_subdir  = "Daily"      # daily notes live in <vault>/<daily_subdir>/ (absolute path used as-is)
daily_format  = "2006-01-02" # Go time layout for daily-note filenames
theme         = "auto"       # auto | flexoki-light | flexoki-dark | charm  (auto detects macOS appearance)
glamour_style = ""           # override the preview style; "" follows the theme
spellcheck    = "auto"       # auto | on | off  (auto = on for prose/notes, off for code files)
font_display  = ""           # PDF export heading/cover font stack; "" = Georgia serif
font_body     = ""           # PDF export body font stack; "" = system-ui sans
font_mono     = ""           # PDF export code font stack; "" = ui-monospace

Two roots. Bare glint, glint -n, and -d operate on the working directory — the folder you launched from (or $GLINT_VAULT if set), so glint works in whatever repo you're in. glint -v opens the picker on your configured vault_dir from anywhere — set it to your notes vault to reach it without cd-ing there.

Export (PDF)

Ctrl+E exports the current buffer to a clean, printable document in the Humdrum house style and opens it in your default browser — there you hit Print → Save as PDF. No external converter is required: the export is a single self-contained .html file (the house stylesheet and your rendered Markdown are baked in), written next to the source file (note.mdnote.html; an unnamed buffer lands in the temp dir). If the browser can't be opened automatically, glint prints the file path so you can open it yourself — the export still succeeds.

The print layout follows the kit's conventions: a leading # Title becomes a centered cover page, headings start new pages, {.page-break} on a heading forces a break, the page is US Letter with 1in margins, and printing collapses to black-on-white.

The stylesheet (doc.css) is vendored into the binary via go:embed, so a brew install glint on any machine has everything it needs. The kit's licensed display/body/mono faces are not bundled — the export ships portable open/system defaults (Georgia / system-ui / ui-monospace) and lets you point the three font slots at any fonts you have via the font_display / font_body / font_mono config keys above.

Fonts are embedded at export time. Set a custom font and glint finds it in your font directories (~/Library/Fonts, /Library/Fonts), reads the matching faces (regular + bold, roman + italic), and inlines them as base64 @font-face in the exported HTML. This is required because WebKit browsers (Safari, Orion) refuse to render locally-installed user fonts referenced only by name. A font glint can't find on disk falls back to a plain name reference (which still works in Chrome/Firefox), and nothing licensed is ever baked into the binary — it embeds only the fonts you configured and have installed.

To refresh the embedded style after the kit changes, run internal/export/assets/sync.sh.

Themes

Three palettes, every span explicitly colored so text stays readable on light and dark terminals: flexoki-light, flexoki-dark, and charm. auto picks light or dark from the macOS system appearance; Ctrl+T cycles live. The read preview and the whole canvas background follow the active theme.

Spellcheck

Misspelled prose gets a calm red curly underline (undercurl). It's deliberately light — an embedded ~60k common-English dictionary catches obvious typos without the false positives of a heavy morphological checker. Code fences, inline code, URLs, wikilinks, link targets, and frontmatter are never flagged, and recognized code files are skipped entirely (same extension routing as syntax highlighting).

Alt+; (or clicking an underlined word) opens a popup with up to five suggestions ranked by edit distance — pick one with 19 to replace in place, a to add the word to your personal dictionary, i to ignore it for the session, or t to toggle spellcheck off and on (Alt+; opens a toggle-only popup when no word is flagged). The personal dictionary is a plain, hand-editable file at ~/.config/glint/dict.txt (one word per line). Set spellcheck = off to disable it, or on to force it on.

The curly underline uses the 4:3 SGR underline-style and 58 underline-color codes — supported by Ghostty, kitty, WezTerm, foot, and recent VTE terminals. Terminals without them degrade to a straight underline or none. Inside tmux, enable passthrough so the styles reach the terminal:

set -as terminal-features ',*:usstyle'

License

glint — Copyright (C) 2026 humdrum-tiv.

Free software under the GNU Affero General Public License v3.0 (or, at your option, any later version). You may use, study, share, and modify it; any distributed derivative — or modified version offered to users over a network — must also be AGPL-licensed with source available. It comes with no warranty. See LICENSE for the full terms.