{ stdenv, buildEnv, fetchurl, patchelf, bash # Linked dynamic libraries. , glib, fontconfig, freetype, pango, cairo, libX11, libXi, atk, gconf, nss, nspr , libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite , alsaLib, libXdamage, libXtst, libXrandr, expat, cups , dbus_libs, gtk, gdk_pixbuf, gcc # Will crash without. , udev # Loaded at runtime. , libexif # Additional dependencies according to other distros. ## Ubuntu , liberation_ttf, curl, utillinux, xdg_utils, wget ## Arch Linux. , flac, harfbuzz, icu, libpng, libopus, snappy, speechd ## Gentoo , bzip2, libcap # Which distribution channel to use. , channel ? "stable" # Necessary for USB audio devices. , pulseSupport ? true, libpulseaudio ? null }: with stdenv.lib; with (import ../chromium/source/update.nix { inherit (stdenv) system; }).getChannel channel; let dist = if channel == "dev" then "unstable" else channel; opusWithCustomModes = libopus.override { withCustomModes = true; }; env = buildEnv { name = "google-chrome-env"; paths = [ glib fontconfig freetype pango cairo libX11 libXi atk gconf nss nspr libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite alsaLib libXdamage libXtst libXrandr expat cups dbus_libs gtk gdk_pixbuf gcc udev libexif liberation_ttf curl utillinux xdg_utils wget flac harfbuzz icu libpng opusWithCustomModes snappy speechd bzip2 libcap ] ++ optional pulseSupport libpulseaudio; }; in stdenv.mkDerivation rec { inherit version; name = "google-chrome-${version}"; src = fetchurl binary; buildInputs = [ env patchelf ]; unpackPhase = '' ar x $src tar xf data.tar.xz ''; installPhase = '' exe=$out/bin/google-chrome-${dist} rpath="${env}/lib:${env}/lib64" mkdir -p $out/bin $out/share cp -a opt/* $out/share cp -a usr/share/* $out/share substituteInPlace $out/share/applications/google-chrome.desktop \ --replace /usr/bin/google-chrome-${dist} $exe substituteInPlace $out/share/gnome-control-center/default-apps/google-chrome.xml \ --replace /opt/google/chrome/google-chrome $exe substituteInPlace $out/share/menu/google-chrome.menu \ --replace /opt $out/share \ --replace $out/share/google/chrome/google-chrome $exe for icon_file in $out/share/google/chrome/product_logo_*[0-9].png; do num_and_suffix="''${icon_file##*logo_}" icon_size="''${num_and_suffix%.*}" logo_output_prefix="$out/share/icons/hicolor" logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps" mkdir -p "$logo_output_path" mv "$icon_file" "$logo_output_path/google-chrome.png" done cat > $exe << EOF #!${bash}/bin/sh export LD_LIBRARY_PATH=$rpath\''${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} export PATH=${env}/bin\''${PATH:+:\$PATH} $out/share/google/chrome/google-chrome "\$@" EOF chmod +x $exe for elf in $out/share/google/chrome/{chrome,chrome-sandbox,nacl_helper}; do patchelf --set-rpath $rpath $elf patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $elf done ''; meta = { description = "A freeware web browser developed by Google"; homepage = "https://www.google.com/chrome/browser/"; license = licenses.unfree; maintainers = [ maintainers.msteen ]; platforms = platforms.linux; }; }