mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-10 22:24:40 +00:00
![Niklas Hambüchen](/assets/img/avatar_default.png)
This makes it possible to use chromium headless with WebGL (e.g. for webdriver tests) without having to rebuild from source. The upstram default is to enable, thus simply removing our disabling switch. Also fixes #41918.
95 lines
3.6 KiB
Nix
95 lines
3.6 KiB
Nix
{ stdenv, mkChromiumDerivation, channel, enableWideVine }:
|
|
|
|
with stdenv.lib;
|
|
|
|
mkChromiumDerivation (base: rec {
|
|
name = "chromium-browser";
|
|
packageName = "chromium";
|
|
buildTargets = [ "mksnapshot" "chrome_sandbox" "chrome" ];
|
|
|
|
outputs = ["out" "sandbox"];
|
|
|
|
sandboxExecutableName = "__chromium-suid-sandbox";
|
|
|
|
installPhase = ''
|
|
mkdir -p "$libExecPath"
|
|
cp -v "$buildPath/"*.pak "$buildPath/"*.bin "$libExecPath/"
|
|
cp -v "$buildPath/icudtl.dat" "$libExecPath/"
|
|
cp -vLR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
|
|
cp -v "$buildPath/chrome" "$libExecPath/$packageName"
|
|
|
|
# Swiftshader
|
|
# See https://stackoverflow.com/a/4264351/263061 for the find invocation.
|
|
if [ -n "$(find "$buildPath/swiftshader/" -maxdepth 1 -name '*.so' -print -quit)" ]; then
|
|
echo "Swiftshader files found; installing"
|
|
mkdir -p "$libExecPath/swiftshader"
|
|
cp -v "$buildPath/swiftshader/"*.so "$libExecPath/swiftshader/"
|
|
else
|
|
echo "Swiftshader files not found"
|
|
fi
|
|
|
|
mkdir -p "$sandbox/bin"
|
|
cp -v "$buildPath/chrome_sandbox" "$sandbox/bin/${sandboxExecutableName}"
|
|
|
|
mkdir -vp "$out/share/man/man1"
|
|
cp -v "$buildPath/chrome.1" "$out/share/man/man1/$packageName.1"
|
|
|
|
for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
|
|
num_and_suffix="''${icon_file##*logo_}"
|
|
icon_size="''${num_and_suffix%.*}"
|
|
expr "$icon_size" : "^[0-9][0-9]*$" || continue
|
|
logo_output_prefix="$out/share/icons/hicolor"
|
|
logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
|
|
mkdir -vp "$logo_output_path"
|
|
cp -v "$icon_file" "$logo_output_path/$packageName.png"
|
|
done
|
|
|
|
# Install Desktop Entry
|
|
install -D chrome/installer/linux/common/desktop.template \
|
|
$out/share/applications/chromium-browser.desktop
|
|
|
|
substituteInPlace $out/share/applications/chromium-browser.desktop \
|
|
--replace "@@MENUNAME@@" "Chromium" \
|
|
--replace "@@PACKAGE@@" "chromium" \
|
|
--replace "Exec=/usr/bin/@@USR_BIN_SYMLINK_NAME@@" "Exec=chromium"
|
|
|
|
# Append more mime types to the end
|
|
sed -i '/^MimeType=/ s,$,x-scheme-handler/webcal;x-scheme-handler/mailto;x-scheme-handler/about;x-scheme-handler/unknown,' \
|
|
$out/share/applications/chromium-browser.desktop
|
|
|
|
# See https://github.com/NixOS/nixpkgs/issues/12433
|
|
sed -i \
|
|
-e '/\[Desktop Entry\]/a\' \
|
|
-e 'StartupWMClass=chromium-browser' \
|
|
$out/share/applications/chromium-browser.desktop
|
|
'';
|
|
|
|
passthru = { inherit sandboxExecutableName; };
|
|
|
|
requiredSystemFeatures = [ "big-parallel" ];
|
|
|
|
meta = {
|
|
description = "An open source web browser from Google";
|
|
longDescription = ''
|
|
Chromium is an open source web browser from Google that aims to build a
|
|
safer, faster, and more stable way for all Internet users to experience
|
|
the web. It has a minimalist user interface and provides the vast majority
|
|
of source code for Google Chrome (which has some additional features).
|
|
'';
|
|
homepage = https://www.chromium.org/;
|
|
maintainers = with maintainers; [ bendlas thefloweringash primeos ];
|
|
# Overview of the maintainer roles:
|
|
# nixos-unstable:
|
|
# - TODO: Need a new maintainer for x86_64 [0]
|
|
# - @thefloweringash: aarch64
|
|
# - @primeos: Provisional maintainer (x86_64)
|
|
# Stable channel:
|
|
# - TODO (need someone to test backports [0])
|
|
# [0]: https://github.com/NixOS/nixpkgs/issues/78450
|
|
license = if enableWideVine then licenses.unfree else licenses.bsd3;
|
|
platforms = platforms.linux;
|
|
hydraPlatforms = if channel == "stable" then ["aarch64-linux" "x86_64-linux"] else [];
|
|
timeout = 172800; # 48 hours
|
|
};
|
|
})
|