feat: scaffold Nix flake with dotnet-sdk_9, typst, and nodejs #10

Merged
sscoble merged 2 commits from issue-1-flake-scaffold into main 2026-05-16 04:26:21 +00:00
Contributor

Closes #1

What

  • flake.nix with devShells.default (dotnetCorePackages.sdk_9_0, typst, nodejs) and packages.default (buildDotnetModule targeting net9.0)
  • Stub plugin/jellyfin-lessons.csproj for the build harness
  • deps.json (empty nuget deps)
  • .gitignore (.NET and Nix build artifacts)

Acceptance

  • ✅ nix develop → dotnet 9.0.313, typst 0.14.2, node v24.14.1 all working
  • ✅ nix build → produces result/ symlink with plugin DLL
Closes #1 ## What - `flake.nix` with `devShells.default` (dotnetCorePackages.sdk_9_0, typst, nodejs) and `packages.default` (buildDotnetModule targeting net9.0) - Stub `plugin/jellyfin-lessons.csproj` for the build harness - `deps.json` (empty nuget deps) - `.gitignore` (.NET and Nix build artifacts) ## Acceptance - ✅ `nix develop` → dotnet 9.0.313, typst 0.14.2, node v24.14.1 all working - ✅ `nix build` → produces `result/` symlink with plugin DLL
agent-engineering added 1 commit 2026-05-16 04:20:21 +00:00
- devShells.default provides dotnetCorePackages.sdk_9_0, typst, nodejs
- packages.default uses buildDotnetModule with net9.0 target via callPackage
- Stub plugin/ project with minimal .csproj
- .gitignore with .NET/Nix build artifacts
First-time contributor

Reviewed — structure and approach are solid. A few things to fix:

✅ Good

  • Flake uses forAllSystems — clean
  • Dev shell has dotnet, typst, nodejs with a helpful shellHook
  • .gitignore covers build artifacts, IDE files, Nix results

❌ Fix required

  1. deps.json is empty [] — buildDotnetModule needs actual NuGet dependency hashes. Run nix build once with a fake deps.json to generate the real lock, then copy it from the build log. The empty array will cause a hash mismatch on build.

  2. csproj doesn't reference Jellyfin packages — The plugin project needs PackageReference entries for Jellyfin.Controller and Jellyfin.Model (both with ExcludeAssets="runtime"). Without these, the plugin has no base classes to inherit from. Add:

    <PackageReference Include="Jellyfin.Controller" Version="10.10.*">
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>
    <PackageReference Include="Jellyfin.Model" Version="10.10.*">
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>
    

    Version should match what's installed via services.jellyfin.package on n97.

  3. csproj file name should match plugin naming convention — Other Jellyfin plugins use Jellyfin.Plugin.Name.csproj. Rename to Jellyfin.Plugin.Lessons.csproj and update the flake's projectFile reference.

Fix these three and re-push. The next issue (#2) depends on this being right.

Reviewed — structure and approach are solid. A few things to fix: ### ✅ Good - Flake uses `forAllSystems` — clean - Dev shell has dotnet, typst, nodejs with a helpful shellHook - `.gitignore` covers build artifacts, IDE files, Nix results ### ❌ Fix required 1. **`deps.json` is empty `[]`** — `buildDotnetModule` needs actual NuGet dependency hashes. Run `nix build` once with a fake deps.json to generate the real lock, then copy it from the build log. The empty array will cause a hash mismatch on build. 2. **csproj doesn't reference Jellyfin packages** — The plugin project needs `PackageReference` entries for `Jellyfin.Controller` and `Jellyfin.Model` (both with `ExcludeAssets="runtime"`). Without these, the plugin has no base classes to inherit from. Add: ```xml <PackageReference Include="Jellyfin.Controller" Version="10.10.*"> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference> <PackageReference Include="Jellyfin.Model" Version="10.10.*"> <ExcludeAssets>runtime</ExcludeAssets> </PackageReference> ``` Version should match what's installed via `services.jellyfin.package` on n97. 3. **csproj file name should match plugin naming convention** — Other Jellyfin plugins use `Jellyfin.Plugin.Name.csproj`. Rename to `Jellyfin.Plugin.Lessons.csproj` and update the flake's `projectFile` reference. Fix these three and re-push. The next issue (#2) depends on this being right.
sscoble added 1 commit 2026-05-16 04:25:28 +00:00
- Generated correct deps.json with nuget-to-json for all NuGet dependencies
- Added Jellyfin.Controller and Jellyfin.Model package references with ExcludeAssets=runtime
- Renamed csproj to Jellyfin.Plugin.Lessons.csproj (updated flake.nix projectFile)
First-time contributor

All three review fixes applied:

  1. deps.json populated — Generated via dotnet restore + nuget-to-json with all 30 NuGet dependency hashes (Jellyfin.Controller, Jellyfin.Model, and all transitive deps).

  2. Jellyfin NuGet packages added — Added Jellyfin.Controller 10.10.* and Jellyfin.Model 10.10.* with ExcludeAssets=runtime.

  3. csproj renamed — plugin/jellyfin-lessons.csproj → plugin/Jellyfin.Plugin.Lessons.csproj, flake.nix projectFile updated to match.

All three review fixes applied: 1. **deps.json populated** — Generated via `dotnet restore` + `nuget-to-json` with all 30 NuGet dependency hashes (Jellyfin.Controller, Jellyfin.Model, and all transitive deps). 2. **Jellyfin NuGet packages added** — Added `Jellyfin.Controller` 10.10.* and `Jellyfin.Model` 10.10.* with `ExcludeAssets=runtime`. 3. **csproj renamed** — `plugin/jellyfin-lessons.csproj` → `plugin/Jellyfin.Plugin.Lessons.csproj`, `flake.nix` projectFile updated to match.
sscoble merged commit 1e1d059642 into main 2026-05-16 04:26:21 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sscoble/jellyfin-lessons#10
No description provided.