diff options
| author | cashmere <cashmere@autistici.org> | 2026-07-30 20:12:09 +0200 |
|---|---|---|
| committer | cashmere <cashmere@autistici.org> | 2026-07-30 20:12:09 +0200 |
| commit | 465071d8232e74b1690280a38a86d435269fc35d (patch) | |
| tree | f9ce8eb12cf87928eb9d528c1359e3fbb8e44b32 /nix/web.nix | |
| parent | 01509b53c6bc6e891c55da7093e1fdf5d29499d7 (diff) | |
| download | opencut-465071d8232e74b1690280a38a86d435269fc35d.tar.gz | |
build: replace flake with npins, add Nix packages for web and desktop
- npins pins nixpkgs-unstable + Inter font tarball; shell.nix replaces the flake devshell
- nix/bun-deps.nix: fixed-output bun install of the workspace (hash tied to bun.lock)
- nix/web.nix: static Next.js export; next/font/google patched to local Inter for offline builds
- nix/desktop.nix: tsc-built Electron app embedding the web export, wrapped with nixpkgs electron; ffmpeg-static satisfied by nixpkgs ffmpeg
Diffstat (limited to 'nix/web.nix')
| -rw-r--r-- | nix/web.nix | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/nix/web.nix b/nix/web.nix new file mode 100644 index 00000000..eb464a2a --- /dev/null +++ b/nix/web.nix @@ -0,0 +1,64 @@ +# Static export of the Next.js web app (apps/web/out). +# Deps come from the bun-deps FOD; the Google-font fetch in next/font is +# replaced by the npins-pinned Inter so the build runs offline. +{ + lib, + stdenvNoCC, + bun, + nodejs, + callPackage, + sources ? import ../npins, +}: + +let + bunDeps = callPackage ./bun-deps.nix { }; + webPkg = builtins.fromJSON (builtins.readFile ../apps/web/package.json); +in +stdenvNoCC.mkDerivation { + pname = "opencut-web"; + version = webPkg.version; + src = lib.cleanSource ../.; + + nativeBuildInputs = [ + bun + nodejs + ]; + + postPatch = '' + mkdir -p apps/web/public/fonts + cp ${sources.inter}/web/InterVariable.woff2 apps/web/public/fonts/InterVariable.woff2 + substituteInPlace apps/web/src/app/layout.tsx \ + --replace-fail 'import { Inter } from "next/font/google";' 'import localFont from "next/font/local";' \ + --replace-fail 'const siteFont = Inter({ subsets: ["latin"] });' 'const siteFont = localFont({ src: "../../public/fonts/InterVariable.woff2" });' + ''; + + configurePhase = '' + runHook preConfigure + cp -r ${bunDeps}/node_modules node_modules + cp -r ${bunDeps}/apps/web/node_modules apps/web/node_modules + chmod -R u+w node_modules apps/web/node_modules + patchShebangs node_modules apps/web/node_modules + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + export HOME=$TMPDIR + export NEXT_TELEMETRY_DISABLED=1 + export NODE_ENV=production + cd apps/web + bun run build + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + cp -r out $out + runHook postInstall + ''; + + meta = { + description = "OpenCut web app (static export)"; + license = lib.licenses.mit; + }; +} |
