1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Make a function that can be used as shell.nix, given a system.
# For nix-shell(1), this is builtins.currentSystem (see shell.nix).
# For nix3-develop(1), this is passed in by the flake (see flake.nix).
{ system }:
let
pkgsForNpins =
import
(fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/a793ee3962cf3be3d0e9ed1022147ea9cd34eea9.tar.gz";
sha256 = "023d699q0s9rzx87x6fp4jpar7pd2y3h4gjrdmhznxbbg76yhp9b";
})
{
# Needed for nix3-develop(1) in pure evaluation mode (no --impure).
inherit system;
};
# Grab the npins default.nix and put it in the store next to sources.json,
# so the `(builtins.readFile ./sources.json)` in default.nix works correctly.
npins = pkgsForNpins.runCommand "npins" { } ''
mkdir -v $out
cp -v ${npins/sources.json} $out/sources.json
cp -v ${
pkgsForNpins.fetchurl {
url = "https://raw.githubusercontent.com/andir/npins/refs/tags/0.3.0/src/default.nix";
sha256 = "0gx3wcx6lhgk1hfvrmy6737bwa9bxfym6li6rb1gsxs1jaakj0bs";
}
} $out/default.nix
'';
pins = import npins;
in
{
pkgs ? import pins.nixpkgs {
inherit system;
},
}:
(pkgs.buildFHSEnv {
name = "chromium-env";
targetPkgs =
pkgs:
(with pkgs; [
## for reclient...
# E0508 08:28:41.337763 2357393 auth.go:527] Credentials helper warnings
# ... and errors: E0508 08:28:41.335345 2357400 main.go:64] Failed to
# ... initialize credentials: failed to retrieve gcloud credentials.
# ... gcloud not installed: exec: "gcloud": executable file not found in
# ... $PATH
google-cloud-sdk
## for `autoninja -C out/Debug content_shell`...
# ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned
# ... non-zero exit code.
# FileNotFoundError: [Errno 2] No such file or directory: 'pkg-config'
pkg-config
# ../../third_party/llvm-build/Release+Asserts/bin/clang++: error while
# ... loading shared libraries: libz.so.1: cannot open shared object file:
# ... No such file or directory
# ../../third_party/rust-toolchain/bin/rustc: error while loading shared
# ... libraries: libz.so.1: cannot open shared object file: No such file
# ... or directory
zlib
# FileNotFoundError: [Errno 2] No such file or directory: 'gperf'
gperf
# subprocess.CalledProcessError: Command '['/cuffs/build/chromium/src/out/
# ...Reclient/wayland_scanner', '--version']' returned non-zero exit
# ... status 127.
# => /cuffs/build/chromium/src/out/Reclient/wayland_scanner: error while
# ... loading shared libraries: libexpat.so.1: cannot open shared object
# ... file: No such file or directory
expat
# ./root_store_tool: error while loading shared libraries: <soname>:
# ... cannot open shared object file: No such file or directory
glib # libglib-2.0.so.0
nss # libnss3.so
# ./transport_security_state_generator: error while loading shared
# ... libraries: libnspr4.so: cannot open shared object file: No such file
# ... or directory
nspr
# ././v8_context_snapshot_generator: error while loading shared libraries:
# ... <soname>: cannot open shared object file: No such file or directory
xorg.libX11 # libX11.so.6
xorg.libXcomposite # libXcomposite.so.1
xorg.libXdamage # libXdamage.so.1
xorg.libXext # libXext.so.6
xorg.libXfixes # libXfixes.so.3
xorg.libXrandr # libXrandr.so.2
xorg.libXtst # libXtst.so.6
mesa # libgbm.so.1
libdrm # libdrm.so.2
alsa-lib # libasound.so.2
libxkbcommon # libxkbcommon.so.0
pango # libpango-1.0.so.0
dbus # libdbus-1.so.3
## for `content_shell`...
# out/Default/content_shell: error while loading shared libraries:
# ... <soname>: cannot open shared object file: No such file or directory
at-spi2-atk # libatk-1.0.so.0
xorg.libxcb # libxcb.so.1
cairo # libcairo.so.2
# [788412:788449:0502/062912.187804:FATAL:udev_loader.cc(48)] Check
# ... failed: false.
systemd
## for `third_party/blink/tools/run_web_tests.py`...
# FileNotFoundError raised: [Errno 2] No such file or directory:
# ... 'xdpyinfo'
xorg.xdpyinfo
## for `chrome`...
# out/Default/chrome: error while loading shared libraries: libcups.so.2:
# cannot open shared object file: No such file or directory
cups
## for clangd with remote indexing support...
## (see <https://github.com/clangd/chrome-remote-index>)
(stdenv.mkDerivation rec {
pname = "clangd";
version = "18.1.3";
src = pkgs.fetchzip {
url = "https://github.com/clangd/clangd/releases/download/${version}/${pname}-linux-${version}.zip";
hash = "sha256-6d1P510uHtXJ8fOyi2OZFyILDS8XgK6vsWFewKFVvq4=";
};
# autoPatchelfHook lets you run clangd (and your editor) outside this
# nix-shell
nativeBuildInputs = [ autoPatchelfHook ];
installPhase = ''
mkdir -p $out
mv bin $out
mv lib $out
'';
})
]);
# workaround for `nix-shell --run '...'` not working with buildFHSEnv.
# instead use `NIX_SHELL_RUN='...' nix-shell`.
runScript = pkgs.writeShellScript "chromium-env-run" (
''if [ -n "$''
+ ''
{NIX_SHELL_RUN:+set}" ]; then
eval "$NIX_SHELL_RUN"
else
exec bash
fi
''
);
}).env
|