{ lib , buildDotnetModule , buildNpmPackage , importNpmLock , dotnetCorePackages , gtk3 , webkitgtk_4_1 , libnotify , makeDesktopItem , copyDesktopItems , src }: # Tome (née AudibleLibrary) — darman's own Photino/.NET desktop app for # converting/managing an Audible library. Private repo on our own gitea; # `src` is threaded in by the caller from the `tome` flake input rather than # fetched here, so this file has no credentials or URL baked in. # # Two-stage build: the Preact/Vite frontend (Tome.App/ClientApp) is built as # its own npm derivation, then copied into the published app's wwwroot. # Upstream normally does this via an in-project MSBuild npm target, # which has no network access in the Nix sandbox — skipped here # (-p:SkipNpmBuild=true) in favor of doing it as a proper Nix derivation. let frontend = buildNpmPackage { pname = "tome-frontend"; version = "0.0.0"; src = "${src}/Tome.App/ClientApp"; npmDeps = importNpmLock { npmRoot = "${src}/Tome.App/ClientApp"; }; npmConfigHook = importNpmLock.npmConfigHook; installPhase = '' runHook preInstall cp -r dist $out runHook postInstall ''; }; in buildDotnetModule (finalAttrs: { pname = "tome"; version = "0-unstable"; inherit src; projectFile = "Tome.App/Tome.App.csproj"; nugetDeps = ./tome-deps.json; dotnet-sdk = dotnetCorePackages.sdk_10_0; dotnet-runtime = dotnetCorePackages.runtime_10_0; dotnetFlags = [ "-p:SkipNpmBuild=true" ]; executables = [ "Tome.App" ]; nativeBuildInputs = [ copyDesktopItems ]; runtimeDeps = [ gtk3 webkitgtk_4_1 libnotify ]; postInstall = '' cp -r ${frontend} $out/lib/${finalAttrs.pname}/wwwroot ''; desktopItems = [ (makeDesktopItem { name = "tome"; exec = "Tome.App"; desktopName = "Tome"; comment = "Audible library manager"; categories = [ "AudioVideo" ]; }) ]; meta = { description = "Audible library manager (Photino/.NET desktop app)"; homepage = "https://git.mgaction.town/darman/TOME"; platforms = [ "x86_64-linux" ]; mainProgram = "Tome.App"; }; })