af9ea49430
The stable channel update in #130877 is currently blocked due to regressions but a cached build on Hydra might be useful for the meantime (and that build would even be reusable if the PR is merged without any changes).
97 lines
3.8 KiB
Nix
97 lines
3.8 KiB
Nix
{ lib, mkChromiumDerivation, channel, enableWideVine, ungoogled }:
|
|
|
|
with 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/"*.so "$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
|
|
'' + lib.optionalString (channel != "stable") ''
|
|
cp -v "$buildPath/crashpad_handler" "$libExecPath/"
|
|
'';
|
|
|
|
passthru = { inherit sandboxExecutableName; };
|
|
|
|
requiredSystemFeatures = [ "big-parallel" ];
|
|
|
|
meta = {
|
|
description = "An open source web browser from Google"
|
|
+ optionalString ungoogled ", with dependencies on Google web services removed";
|
|
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 = if ungoogled
|
|
then "https://github.com/Eloston/ungoogled-chromium"
|
|
else "https://www.chromium.org/";
|
|
maintainers = with maintainers; if ungoogled
|
|
then [ squalus primeos ]
|
|
else [ primeos thefloweringash bendlas ];
|
|
license = if enableWideVine then licenses.unfree else licenses.bsd3;
|
|
platforms = platforms.linux;
|
|
mainProgram = "chromium";
|
|
hydraPlatforms = if (channel == "stable" || channel == "ungoogled-chromium" || channel == "beta")
|
|
then ["aarch64-linux" "x86_64-linux"]
|
|
else [];
|
|
timeout = 172800; # 48 hours (increased from the Hydra default of 10h)
|
|
};
|
|
})
|