Tsundoku
積ん読 — the pile of books you bought and haven't read yet. Tsundoku is that pile as an Omarchy shell plugin: one list for everything you want to read, listen to, or watch later. Save a link from wherever you found it, see it again with a real title and thumbnail instead of a bare URL, and open it in the right native app with one click.
Install
omarchy plugin add https://github.com/wryanp/tsundoku.git
omarchy plugin enable wryanp.tsundoku
The bar widget shows an unread count. Click it to open the popup: a list of everything you've saved, filterable by All, Watch, Listen, Read, and Done.
To remove it again:
omarchy plugin remove wryanp.tsundoku
Your saved library under ~/.local/share/tsundoku/ is left in place (see
Storage below); delete that directory too if you want nothing left behind.
Everything Tsundoku needs at runtime ships with a stock Omarchy install:
curl, jq, and sha256sum for link resolution, wl-paste and
notify-send for the capture hotkey. mpv (plus yt-dlp) is optional —
when present, watch links open in it instead of the browser.
Capture
Two ways in:
- Hotkey. Copy a URL anywhere and press
SUPER+SHIFT+U.scripts/tsundoku-addreads the clipboard withwl-paste, saves it over IPC, and confirms with a "Saved to Tsundoku" notification. A non-URL clipboard, a duplicate, or an unreachable shell each produce a clear error toast instead — a keypress never fails silently. - Popup. Click the bar icon and paste into the add field. Enter or the add button submits, the field clears on success, and an invalid or duplicate URL shows inline feedback under the field.
Bind the hotkey in ~/.config/hypr/bindings.lua:
o.bind("SUPER + SHIFT + U", "Tsundoku capture",
os.getenv("HOME") .. "/.config/omarchy/plugins/wryanp.tsundoku/scripts/tsundoku-add")
Pick any free chord — on a stock Omarchy install SUPER+SHIFT+U is
unclaimed. Run omarchy menu keybindings --print to check yours.
The panel
The popup is built to live in without a mouse:
- Tabs. All / Watch / Listen / Read / Done, each with a live count. All is everything unread; Done is everything you've finished.
- Keyboard. The add field has focus the moment the popup opens.
Downmoves onto the list andUp/Downwalk it;Enteropens the selected row (the same mpv/browser routing as a click),Deldeletes it, andUpfrom the top row returns to the add field.Esccloses the popup. Typing anything drops you back into the add field. - Notes. The button on a row opens an inline note field — a line
about why you saved the thing. Notes persist in the library, and a row
with a note shows a small next to its caption.
Escin the note field collapses it without closing the popup.
Previews
A saved link resolves into a real title, author, and thumbnail in the background — the item appears instantly and upgrades in place. Resolution tries three tiers in order: the platform's official oEmbed endpoint (YouTube, Vimeo, Spotify, SoundCloud, TikTok), then OpenGraph tags scraped from the page, then the bare hostname. Every request runs a 5-second timeout, a size cap, and an honest User-Agent, and nothing ever fails to save because resolution failed — a link that can't be resolved keeps its hostname title and shows a retry button.
Items from recognized platforms show that platform's logo, tinted to your theme's foreground color. Everything else gets a watch/listen/read glyph.
Supported providers
Tsundoku recognizes links from these platforms and shows their logo, real title, and thumbnail. Anything else still saves fine — it just falls back to a bare hostname and a watch/listen/read glyph.
Watch
- Netflix
- Prime Video
- Disney+
- HBO Max
- Hulu
- Apple TV
- Paramount+
- Peacock
- Crunchyroll
- Tubi
- Dailymotion
- YouTube
- Vimeo
- Twitch
- TikTok
- Pluto TV
- The Roku Channel
- Plex
- Sling TV
- Fubo
- ESPN
- DAZN
- NBA
- NFL
- MLB
- NHL
- Formula 1
- Nebula
- CuriosityStream
- MUBI
- Criterion Channel
- Shudder
- AMC+
- Starz
- BritBox
- Discovery+
- Rakuten Viki
- iQIYI
- Bilibili
- Niconico
- JioHotstar
- ZEE5
- PBS
- ITVX
- TED
- Vevo
- Dropout
Listen
- Apple Music
- Amazon Music
- Pandora
- iHeartRadio
- Audible
- Deezer
- Tidal
- Pocket Casts
- Spotify
- SoundCloud
- Bandcamp
- Apple Podcasts
- YouTube Music
- Qobuz
- Napster
- Overcast
- Castbox
- Podbean
- Acast
- TuneIn
- Audiomack
- Mixcloud
- Last.fm
- JioSaavn
- Anghami
- LibriVox
- Shazam
Read
- (https://x.com)
- The New York Times
- The Guardian
- Goodreads
- Webtoon
- Wattpad
- Archive of Our Own
- Kindle
- Medium
- Substack
- arXiv
- Wikipedia
- Hacker News
- GitHub
- The Washington Post
- The Wall Street Journal
- Bloomberg
- Reuters
- AP News
- CNN
- Fox News
- NBC News
- ABC News
- CBS News
- USA Today
- Los Angeles Times
- The Atlantic
- The New Yorker
- The Economist
- Financial Times
- Time
- Newsweek
- Politico
- Axios
- Vox
- HuffPost
- Business Insider
- Forbes
- Fortune
- CNBC
- ProPublica
- NPR
- Al Jazeera
- DW
- Yahoo News
- Globo
- The Independent
- The Telegraph
- Daily Mail
- Sky News
- BBC
- CBC
- ABC News (Australia)
- The Times of India
- NDTV
- South China Morning Post
- Le Monde
- Der Spiegel
- El País
- The Verge
- TechCrunch
- Ars Technica
- Wired
- Engadget
- Gizmodo
- CNET
- 404 Media
- MIT Technology Review
- Slashdot
- DEV Community
- Stack Overflow
- Quora
- Nature
- Science
- Scientific American
- New Scientist
- Quanta Magazine
- National Geographic
- Smithsonian Magazine
- bioRxiv
- Rolling Stone
- Variety
- The Hollywood Reporter
- People
- Vanity Fair
- Vogue
- Vulture
- The Ringer
- Pitchfork
- Billboard
- Rotten Tomatoes
- IMDb
- Letterboxd
- Metacritic
- IGN
- Kotaku
- Polygon
- PC Gamer
- The Athletic
- Sports Illustrated
- Bleacher Report
- Sky Sports
- Bon Appétit
- Serious Eats
- Allrecipes
- Eater
- Atlas Obscura
- wikiHow
- Royal Road
- FanFiction.Net
- MANGA Plus
- Kobo
- Project Gutenberg
- Internet Archive
- Everand
- The StoryGraph
- Britannica
- Bluesky
- Threads
- Tumblr
- Mastodon
- The Onion
- xkcd
- Genius
Contributing
Provider requests and bug reports are welcome as issues. Adding a provider yourself is a small, well-marked change — see CONTRIBUTING.md. Releases are listed in CHANGELOG.md.
IPC
The service answers on the tsundoku IPC target:
omarchy-shell tsundoku add <url> # prints "ok", "duplicate", or "invalid"
omarchy-shell tsundoku open <id> # opens an item, prints the method used
omarchy-shell tsundoku count # prints the unread count
omarchy-shell tsundoku list # prints the whole library as JSON
omarchy-shell tsundoku setNote <id> <text> # sets an item's note ("" clears)
omarchy-shell tsundoku ping # prints "ok" — is the service alive?
add always exits 0 when the shell is reachable; what happened is in the
printed result. A non-zero exit means the shell itself wasn't running.
Storage
Your library lives outside the plugin, in your data directory, not your config:
~/.local/share/tsundoku/library.json— the list itself~/.local/share/tsundoku/thumbs/— cached thumbnail images
Nothing runtime is stored in the plugin's own git checkout.
Theming
Tsundoku has no hardcoded colors. Every surface, fill, and text color comes
from the shell's Color and Style singletons, so the widget and popup
follow whatever Omarchy theme you're running, including a theme switch while
the popup is open.
Development
The working tree is ~/.config/omarchy/plugins/wryanp.tsundoku. Edit it in
place — saving any file under ~/.config/omarchy/plugins/ reloads the plugin,
but run omarchy-restart-shell after QML edits: the reload can re-instantiate
widgets from stale compiled components. Validate the manifest before
committing:
omarchy plugin validate .
See docs/FOUNDATION.md for the product vision and roadmap, and docs/ARCHITECTURE.md for how it's built.
License
MIT. The provider logos under assets/logos/ come from
Simple Icons (CC0); the brand marks themselves
remain the property of their respective owners — see
assets/logos/ATTRIBUTION.md.