From 8f481210b7372e6db5f94127d9d1f73d90227bcd Mon Sep 17 00:00:00 2001 From: phaer Date: Tue, 24 Feb 2026 14:41:12 +0100 Subject: [PATCH 1/2] playwright-driver: expose selectBrowsers for custom browser selection Expose the underlying browsers function as `selectBrowsers` passthru, allowing users to create custom browser sets. Note: all browsers are enabled by default. Example usage: playwright-driver.selectBrowsers { withChromiumHeadlessShell = true; withChromium = false; withFirefox = false; withWebkit = false; withFfmpeg = false; } --- pkgs/development/web/playwright/driver.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/web/playwright/driver.nix b/pkgs/development/web/playwright/driver.nix index fba717617061..7750fac295ca 100644 --- a/pkgs/development/web/playwright/driver.nix +++ b/pkgs/development/web/playwright/driver.nix @@ -165,6 +165,7 @@ let passthru = { browsersJSON = (lib.importJSON ./browsers.json).browsers; + selectBrowsers = browsers; browsers = browsers { }; browsers-chromium = browsers { withFirefox = false; From 207e71e2a322fd217bf5fa2cbafe8531f192cfa7 Mon Sep 17 00:00:00 2001 From: phaer Date: Tue, 24 Feb 2026 14:41:17 +0100 Subject: [PATCH 2/2] linkwarden: use chromium-headless-shell instead of full chromium Linkwarden only needs headless browser functionality for archiving web pages. Switch from the full chromium browser to the lighter chromium-headless-shell via playwright-driver.selectBrowsers, reducing the closure size. --- pkgs/by-name/li/linkwarden/package.nix | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/pkgs/by-name/li/linkwarden/package.nix b/pkgs/by-name/li/linkwarden/package.nix index 5088e4bdb769..2e785ca5e1eb 100644 --- a/pkgs/by-name/li/linkwarden/package.nix +++ b/pkgs/by-name/li/linkwarden/package.nix @@ -48,12 +48,24 @@ let ]; }; - chromeDir = - { - x86_64-linux = "chrome-linux64"; - aarch64-linux = "chrome-linux"; - } - .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + # Playwright's upstream chromium-headless-shell zips use different directory + # names per architecture (chrome-headless-shell-linux64 vs chrome-linux). + chrome = + let + browsers = playwright-driver.selectBrowsers { + withChromiumHeadlessShell = true; + withChromium = false; + withFirefox = false; + withWebkit = false; + withFfmpeg = false; + }; + chromeDir = + { + x86_64-linux = "chrome-headless-shell-linux64"; + } + .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + in + "${browsers}/chromium_headless_shell-*/${chromeDir}/chrome-headless-shell"; in stdenvNoCC.mkDerivation (finalAttrs: { pname = "linkwarden"; @@ -181,7 +193,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { --set-default PRISMA_QUERY_ENGINE_LIBRARY "${prisma-engines_6}/lib/libquery_engine.node" \ --set-default PRISMA_QUERY_ENGINE_BINARY "${prisma-engines_6}/bin/query-engine" \ --set-default PRISMA_SCHEMA_ENGINE_BINARY "${prisma-engines_6}/bin/schema-engine" \ - --set-default PLAYWRIGHT_LAUNCH_OPTIONS_EXECUTABLE_PATH ${playwright-driver.browsers-chromium}/chromium-*/${chromeDir}/chrome \ + --set-default PLAYWRIGHT_LAUNCH_OPTIONS_EXECUTABLE_PATH ${chrome} \ --set-default LINKWARDEN_CACHE_DIR /var/cache/linkwarden \ --set-default LINKWARDEN_HOST localhost \ --set-default LINKWARDEN_PORT 3000 \