diff --git a/Dockerfile.dev b/Dockerfile.dev index 5471195..fa8c2fe 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -9,7 +9,18 @@ RUN apk add --no-cache \ mysql-client \ vim \ bash \ - nano + nano \ + chromium \ + nss \ + freetype \ + harfbuzz \ + ttf-freefont \ + font-noto-emoji + +# Playwright ships glibc-linked browser builds that do not run on Alpine (musl), +# so drive Alpine's own Chromium instead of downloading one. +ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 \ + PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser # Install PHP extensions including xdebug for development RUN install-php-extensions \ diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index 1d6e9ca..b4a71b7 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -40,6 +40,10 @@ services: # Vite VITE_HOST: "0.0.0.0" + + # Playwright drives Alpine's system Chromium (musl); see Dockerfile.dev + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH: "/usr/bin/chromium-browser" volumes: # Mount entire project for hot reload with SELinux context - ../..:/app:Z diff --git a/shell.nix b/shell.nix index b977c72..6096fc5 100644 --- a/shell.nix +++ b/shell.nix @@ -1,5 +1,17 @@ { pkgs ? import {} }: +let + # Playwright's bundled Chromium is a prebuilt glibc binary. NixOS has no + # /usr/lib, so nix-ld (enabled system-wide) resolves its interpreter and + # NIX_LD_LIBRARY_PATH supplies the libraries below. + chromiumLibs = with pkgs; [ + glib nss nspr atk at-spi2-atk at-spi2-core cups dbus expat + xorg.libxcb libxkbcommon alsa-lib libgbm mesa + xorg.libX11 xorg.libXext xorg.libXcomposite xorg.libXdamage + xorg.libXfixes xorg.libXrandr cairo pango systemd libdrm + ]; +in + pkgs.mkShell { buildInputs = with pkgs; [ # PHP and tools @@ -28,7 +40,9 @@ pkgs.mkShell { export GROUP_ID=$(id -g) # Use keep-id for proper permission mapping in rootless podman export PODMAN_USERNS=keep-id - + + export NIX_LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath chromiumLibs}:$NIX_LD_LIBRARY_PATH" + # Compose file location COMPOSE_FILE="$PWD/docker/dev/docker-compose.yml"