Omahub
← All plugins
W

Tsundoku

by wryanp

A read/listen/watch list: save links from anywhere, see them with rich previews in a popup off the bar, and open them in the right player with one click.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
e7f656b
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
e7f656b
Reviewed
1 month ago

The plugin is a benign link-saving widget: it stores user-provided URLs locally, fetches metadata via curl with documented SSRF protections, and opens links in mpv or the browser. No obfuscation, destructive commands, persistence, or credential theft were found in the sampled code.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/wryanp/tsundoku --enable
Productivity #bar #media

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-add reads the clipboard with wl-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. Down moves onto the list and Up/Down walk it; Enter opens the selected row (the same mpv/browser routing as a click), Del deletes it, and Up from the top row returns to the add field. Esc closes 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. Esc in 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

Listen

Read

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.