From 014cee4ea6623854f054c26ff3ff6d2aeebeb87e Mon Sep 17 00:00:00 2001 From: Moraxyc Date: Wed, 13 May 2026 18:02:15 +0800 Subject: [PATCH 1/4] ghostfolio: reduce closure size --- pkgs/by-name/gh/ghostfolio/package.nix | 29 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/pkgs/by-name/gh/ghostfolio/package.nix b/pkgs/by-name/gh/ghostfolio/package.nix index 89af6e6a53dd..30868d9bfbe1 100644 --- a/pkgs/by-name/gh/ghostfolio/package.nix +++ b/pkgs/by-name/gh/ghostfolio/package.nix @@ -9,14 +9,14 @@ prisma-engines_6, }: -buildNpmPackage rec { +buildNpmPackage (finalAttrs: { pname = "ghostfolio"; version = "2.254.0"; src = fetchFromGitHub { owner = "ghostfolio"; repo = "ghostfolio"; - tag = version; + tag = finalAttrs.version; hash = "sha256-bcUr0tzq/X2pOmg7ZYj46+TQO9NBKmevm+C6PbyV/yc="; # populate values that require us to use git. By doing this in postFetch we # can delete .git afterwards and maintain better reproducibility of the src. @@ -48,8 +48,7 @@ buildNpmPackage rec { # Workaround for https://github.com/nrwl/nx/issues/22445 faketty npm run build:production - cp -r node_modules dist/apps/api/ - cp -r prisma dist/apps/api/ + npm prune --omit=dev --no-save runHook postBuild ''; @@ -57,10 +56,11 @@ buildNpmPackage rec { installPhase = '' runHook preInstall + cp -r {node_modules,prisma} dist/apps/api/ + mkdir -p "$out/lib/node_modules/ghostfolio" cp -r dist/apps/{api,client} "$out/lib/node_modules/ghostfolio/" - mkdir "$out/bin" makeWrapper ${lib.getExe nodejs} "$out/bin/ghostfolio" \ --add-flags "$out/lib/node_modules/ghostfolio/api/main" "''${user_args[@]}" \ --prefix PATH : ${lib.makeBinPath [ openssl ]} \ @@ -78,12 +78,27 @@ buildNpmPackage rec { runHook postInstall ''; + # Remove dev deps not needed at runtime + preFixup = '' + find $out/lib/node_modules -name "*.py" -delete + apiModules="$out/lib/node_modules/ghostfolio/api/node_modules" + rm -rf \ + "$out/lib/node_modules/ghostfolio/client/development" \ + "$apiModules"/sass-embedded* \ + "$apiModules"/{@,}esbuild \ + "$apiModules"/{@,}rollup \ + "$apiModules"/@rolldown \ + "$apiModules"/@parcel/watcher-* \ + "$apiModules"/typescript \ + "$apiModules"/.{bin,cache} \ + ''; + meta = { description = "Open Source Wealth Management Software"; homepage = "https://github.com/ghostfolio/ghostfolio"; - changelog = "https://github.com/ghostfolio/ghostfolio/blob/${src.rev}/CHANGELOG.md"; + changelog = "https://github.com/ghostfolio/ghostfolio/blob/${finalAttrs.src.rev}/CHANGELOG.md"; license = lib.licenses.agpl3Only; maintainers = with lib.maintainers; [ moraxyc ]; mainProgram = "ghostfolio"; }; -} +}) From a2bce4fdec13308bb6d709448da09d96ec01c445 Mon Sep 17 00:00:00 2001 From: Moraxyc Date: Wed, 13 May 2026 18:30:48 +0800 Subject: [PATCH 2/4] ghostfolio: 2.254.0 -> 3.2.0, refactor --- pkgs/by-name/gh/ghostfolio/package.nix | 55 ++++++++++++++++---------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/pkgs/by-name/gh/ghostfolio/package.nix b/pkgs/by-name/gh/ghostfolio/package.nix index 30868d9bfbe1..c3a715cc1b90 100644 --- a/pkgs/by-name/gh/ghostfolio/package.nix +++ b/pkgs/by-name/gh/ghostfolio/package.nix @@ -5,19 +5,19 @@ nodejs, faketty, openssl, - prisma_6, - prisma-engines_6, + prisma_7, + prisma-engines_7, }: buildNpmPackage (finalAttrs: { pname = "ghostfolio"; - version = "2.254.0"; + version = "3.2.0"; src = fetchFromGitHub { owner = "ghostfolio"; repo = "ghostfolio"; tag = finalAttrs.version; - hash = "sha256-bcUr0tzq/X2pOmg7ZYj46+TQO9NBKmevm+C6PbyV/yc="; + hash = "sha256-KmjGHiuPbXxJ9IkTA8PtjeNfhSyZnqdEp5yn8ypdM2g="; # populate values that require us to use git. By doing this in postFetch we # can delete .git afterwards and maintain better reproducibility of the src. leaveDotGit = true; @@ -27,10 +27,19 @@ buildNpmPackage (finalAttrs: { ''; }; - npmDepsHash = "sha256-Wa15OSsd2IXTO1OjZoiFsSF0UhrzvS6fsymvxyPm0s8="; + npmDepsHash = "sha256-YLS1tT15bj9WF9xzOn9UhXIA7Qe0FcQgfOQFSntPYm4="; + + postPatch = '' + substituteInPlace replace.build.mjs \ + --replace-fail 'new Date()' "new Date(''$( Date: Wed, 13 May 2026 22:19:03 +0800 Subject: [PATCH 3/4] ghostfolio: add ghostfolio-migrate helper --- pkgs/by-name/gh/ghostfolio/package.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/by-name/gh/ghostfolio/package.nix b/pkgs/by-name/gh/ghostfolio/package.nix index c3a715cc1b90..9a4aa2f0f529 100644 --- a/pkgs/by-name/gh/ghostfolio/package.nix +++ b/pkgs/by-name/gh/ghostfolio/package.nix @@ -7,6 +7,7 @@ openssl, prisma_7, prisma-engines_7, + runtimeShell, }: buildNpmPackage (finalAttrs: { @@ -86,6 +87,14 @@ buildNpmPackage (finalAttrs: { } )} + cat > $out/bin/ghostfolio-migrate < Date: Mon, 18 May 2026 00:39:55 +0800 Subject: [PATCH 4/4] ghostfolio: 3.2.0 -> 3.3.0 --- pkgs/by-name/gh/ghostfolio/package.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/gh/ghostfolio/package.nix b/pkgs/by-name/gh/ghostfolio/package.nix index 9a4aa2f0f529..04d19f30a190 100644 --- a/pkgs/by-name/gh/ghostfolio/package.nix +++ b/pkgs/by-name/gh/ghostfolio/package.nix @@ -12,13 +12,13 @@ buildNpmPackage (finalAttrs: { pname = "ghostfolio"; - version = "3.2.0"; + version = "3.3.0"; src = fetchFromGitHub { owner = "ghostfolio"; repo = "ghostfolio"; tag = finalAttrs.version; - hash = "sha256-KmjGHiuPbXxJ9IkTA8PtjeNfhSyZnqdEp5yn8ypdM2g="; + hash = "sha256-74CqCDyLrn3//FiTfo6xR5jLyo4jU+daBF9ES/uQE3E="; # populate values that require us to use git. By doing this in postFetch we # can delete .git afterwards and maintain better reproducibility of the src. leaveDotGit = true; @@ -28,7 +28,7 @@ buildNpmPackage (finalAttrs: { ''; }; - npmDepsHash = "sha256-YLS1tT15bj9WF9xzOn9UhXIA7Qe0FcQgfOQFSntPYm4="; + npmDepsHash = "sha256-klWmB6LYf6h1WPi3AasDrdVdaPCyb5ePWuO9zqMcXys="; postPatch = '' substituteInPlace replace.build.mjs \ @@ -37,6 +37,8 @@ buildNpmPackage (finalAttrs: { substituteInPlace prisma/seed.mts \ --replace-fail "import { PrismaClient } from '@prisma/client';" \ "import prismaClientPkg from '@prisma/client'; const { PrismaClient } = prismaClientPkg;" + # storybook output is not used, skip it + substituteInPlace package.json --replace-fail "nx run ui:build-storybook" "true" ''; nativeBuildInputs = [