Jellyfin plugin for homeschool lesson plans — Typst-based content with embedded media playback
Find a file
Scott Scoble 22da56ff4a feat: add NixOS module for Jellyfin integration
Add nixosModules.default with:
- services.jellyfin-lessons.enable toggle
- Configurable dataDir and adminPort options
- Plugin DLL auto-copy to Jellyfin plugins dir
- Admin UI as a user systemd service

The projectFile path was already correct (Jellyfin.Plugin.Lessons.csproj).
nix flake check passes.
2026-05-15 21:55:10 -07:00
admin-ui fix: sync admin UI schema with plugin (UUID keys, lesson_media table) 2026-05-15 21:50:21 -07:00
plugin feat: add lesson detail view with Typst HTML rendering and Jellyfin media player 2026-05-15 21:53:08 -07:00
templates fix: make media-ref inline with block: false 2026-05-15 21:39:28 -07:00
.gitignore feat: scaffold Nix flake with dotnet-sdk_9, typst, and nodejs 2026-05-15 21:18:15 -07:00
deps.json fix: populate deps.json, add Jellyfin package refs, rename csproj to Jellyfin.Plugin.Lessons.csproj 2026-05-15 21:25:13 -07:00
flake.lock feat: scaffold Nix flake with dotnet-sdk_9, typst, and nodejs 2026-05-15 21:18:15 -07:00
flake.nix feat: add NixOS module for Jellyfin integration 2026-05-15 21:55:10 -07:00
README.md Architecture and component overview 2026-05-15 21:12:08 -07:00

Jellyfin Lessons Plugin

A Jellyfin plugin that delivers homeschool lesson plans with embedded media playback. Content authored in Typst, managed via a web admin UI, displayed natively inside Jellyfin on any client (Fire TV, web, mobile).

Architecture

~/vault/lessons/                    ← Typst source files (author here)
    └── grade-N/
        └── subject/
            └── lesson-name.typ

        ↓ admin UI reads/writes lesson metadata

~/.local/share/jellyfin-lessons/    ← Lessons DB + compiled HTML cache
        ↓ Jellyfin plugin reads

Jellyfin "Lessons" tab              ← Plugin renders lesson HTML + media player

Components

  1. Jellyfin Plugin (C# / .NET 9) — Registers a "Lessons" page in Jellyfin, reads lesson data from the store, renders Typst-compiled HTML, and embeds the native Jellyfin media player for linked items.

  2. Lesson Data Store — SQLite database mapping lesson metadata (title, grade, subject, date, jellyfin item IDs) to compiled HTML output. Shared between the plugin and admin UI.

  3. Typst Lesson Template — A .typ template with frontmatter conventions for lesson metadata and embedded Jellyfin media references. Compiles to HTML.

  4. Web Admin UI — Simple web interface (served from n97) for creating, editing, and previewing lessons. Writes to the same SQLite store the plugin reads from.

  5. Nix Flake — Builds the plugin DLL, packages it for Jellyfin, provides a dev shell with dotnet-sdk + typst.

End State (Outcome Engineering)

  • Open Jellyfin on any device → see "Lessons" in the nav
  • Click a lesson → read the content → click play on embedded media → Jellyfin plays it
  • Author lessons by writing .typ files (with a web UI option)
  • Everything works fully offline on the homelab
  • One nix build produces the plugin

Development

nix develop    # dotnet-sdk, typst, node (for admin UI)

License

MIT