crluehmann583 downloadsAn Obsidian theme built around old-display aesthetics — LCD, E-Ink, and Color E-Ink screens with a device/document typography split
An Obsidian theme built around old-display aesthetics — three selectable Display types (LCD, E-Ink, Color E-Ink), each with its own light and dark look, layered under a shared Cartridge hue picker, a device/document typography split, and a consistent set of chrome (rounded device-panel modals, hairline borders, hard-contrast inverted-fill selection bars), the way a reflective monochrome LCD (Game Boy Pocket / Pokédex / graphing calculator / digital clock) reads.
| Light | Dark |
|---|---|
![]() |
![]() |
Shown with Style Settings configured, not necessarily the raw install defaults — a fresh install looks like LCD display, Sage cartridge, Special Elite typewriter throughout (headings, body, and chrome), with VT323 as the pixel face whenever you opt into Pixel anywhere.
theme.css, no network
dependency#d1c6b4→text-tuned, pink #d7a8be→text-tuned, gold
#ded4ab→text-tuned, blue #85a0b8→text-tuned) applied to headings,
links, tags, code, and callouts by type — muted colors layered over
one scene, the way a Game Boy Color game palette-swaps sprites, or a
Kaleido-style color e-paper panel renders a few desaturated colors at
once. The primary heading (H1) and success/tip callouts use the
current Cartridge's own ink/screen tone instead, so the Cartridge
picker still matters here.Each Display type has its own light/dark pair, and Obsidian's own light/dark setting switches between them (the Cartridge and Display choices carry over to both):
In all three, elevated surfaces (sidebar, tab bar) lift toward a neutral sage-grey rather than pure white — mixing a tinted dark with white is what turns it milky — and in small steps (roughly 17% → 21% → 25% lightness).
The organizing idea is an e-reader: a screen whose own chrome is pixel-rendered, showing a document that is typeset. Two independent layers:
Both layers ship defaulting to typewriter, so the theme reads as an old-fashioned instrument out of the box rather than a retro-game readout. Pixel is there as an accent you can bring in for either layer independently — anywhere from a single opted-in element up to "pixel everywhere" — five Style Settings pickers control it:
Pixel font — which dot-matrix face draws the Device layer (and Heading/Body when set to Pixel). All SIL OFL 1.1:
VT323, Jersey 10, and Press Start 2P are auto-compensated in size against the others — their natural x-heights are quite different, so switching between them shouldn't mean also hand-tuning size.
Typewriter font — which face draws the Document layer (and Heading/Body/Device when set to Typewriter):
Heading font — note headings specifically, split out from the rest of the Document layer so you can tune it on its own:
Only H1 takes uppercase+tracking under Typewriter, so it reads as a title stamped at the top of the page while H2–H6 keep a normal typeset hierarchy.
Device font — the whole chrome layer at once:
This is the main dial for how much LCD/E-Ink pixel identity shows up at all — the default keeps both layers on the document's own typewriter face.
Body font — the actual note text, reading and writing:
All nine fonts are embedded directly in theme.css as base64 data URIs
rather than external files — Obsidian resolves relative url() paths
against its own app shell, not the theme's folder, so external font
files silently fail to load; embedding sidesteps that entirely, needs
no network access, and works offline and on mobile, at a cost of
~250KB. License texts for all nine are still in fonts/ for
attribution, even though the font data now lives in theme.css.
Via Obsidian (once approved as a Community Theme): Settings → Appearance → Themes → Manage → search "Report Writer" → Install.
Manually: download this repository and place its contents — keeping
manifest.json and theme.css together (the fonts are embedded in
theme.css itself; the fonts/ folder only holds license texts for
attribution) — in a folder named Report Writer inside your vault's
.obsidian/themes/ directory. Then in Obsidian: Settings →
Appearance → Themes, select Report Writer.
Install the community plugin Style Settings to unlock:
Without Style Settings installed, the theme still looks correct — it just uses the built-in defaults: LCD display, Sage cartridge, Special Elite throughout (device chrome, headings, document, body), VT323 as the pixel face if you opt into Pixel anywhere, 18px rounding, scanlines on.
Same as desktop: copy the Report Writer folder into .obsidian/themes/
in your vault — via a sync service (Obsidian Sync, iCloud, a git-based
sync plugin) since there's no in-app file browser on mobile to place it
manually. Confirmed working on mobile: the theme renders correctly, the
embedded fonts load (no fallback to system fonts), touch targets are
usable, and the Style Settings pickers are reachable and functional in
the mobile Settings UI.
v0.1.2. Defaults changed from v0.1.0: Pixel font now defaults to VT323 (was Silkscreen), and Body font and Device font now both default to Typewriter (were Serif and Pixel) — the out-of-box look is now typewriter throughout, with pixel as an opt-in accent rather than the default chrome. Fixed a real sizing bug this exposed: device-chrome font-size was multiplying by whichever Pixel font happened to be selected regardless of whether that layer was actually displaying it — e.g. Device set to Typewriter still inherited VT323's 1.3× size compensation. Each layer (Body/Heading/Device) now tracks its own active scale, only applying pixel compensation when pixel is what's actually rendering. Also added a "Device text scale" slider and fixed the note title and Properties panel (frontmatter) never having been targeted, silently falling back to Obsidian's default font. Core Obsidian UI is covered: workspace, sidebars, tabs, modals, command palette and menus, settings, checkboxes, scrollbars, form inputs, the native title bar, and all three Display types in both light and dark. Bases (table/card views) has a first pass — it's a newer core feature that doesn't expose a font-family hook the way it does for size, so styling it took more forcing than everything else and hasn't been checked against every view type. Confirmed working on Obsidian Mobile (rendering, fonts, touch targets, Style Settings). Not yet covered: third-party plugin UI (Kanban, Dataview, Excalidraw, etc. may look inconsistent until each is checked individually).