brave, brave-origin: extract shared builder, init at 1.92.144 (#540488)

This commit is contained in:
Sandro
2026-07-25 12:37:05 +00:00
committed by GitHub
9 changed files with 262 additions and 122 deletions
+7
View File
@@ -23314,6 +23314,13 @@
github = "DaRacci";
githubId = 90304606;
};
rachalaraj = {
name = "Rachala Raj Kumar";
email = "rachaalaraj@gmail.com";
matrix = "@rachalaraj:matrix.org";
github = "rachalaraj";
githubId = 124191100;
};
RadxaYuntian = {
# This is the work account for @MakiseKurisu
name = "ZHANG Yuntian";
@@ -0,0 +1,37 @@
{ callPackage }:
let
flavorData = {
browser = {
optStem = "brave";
fileStem = "brave-browser";
appIdStem = "com.brave.Browser";
darwinStem = "Brave Browser";
changelogFile = "CHANGELOG_DESKTOP.md";
homepage = "https://brave.com/";
innerBinary = "brave";
};
origin = {
optStem = "brave-origin";
fileStem = "brave-origin";
appIdStem = "com.brave.Origin";
darwinStem = "Brave Origin";
changelogFile = "CHANGELOG_DESKTOP_ORIGIN.md";
homepage = "https://brave.com/origin/";
innerBinary = "brave";
};
};
mkBrave =
release:
let
pkg = import release;
fd = flavorData.${pkg.flavor or "browser"};
in
callPackage ./make-brave.nix { } (pkg // fd);
in
{
brave = mkBrave ./packages/brave.nix;
brave-origin = mkBrave ./packages/brave-origin.nix;
}
@@ -49,26 +49,20 @@
coreutils,
libxcb,
zlib,
# Darwin dependencies
unzip,
makeWrapper,
# command line arguments which are always set e.g "--disable-gpu"
commandLineArgs ? "",
# Necessary for USB audio devices.
pulseSupport ? stdenv.hostPlatform.isLinux,
libpulseaudio,
# For GPU acceleration support on Wayland (without the lib it doesn't seem to work)
libGL,
# For video acceleration via VA-API (--enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder)
libvaSupport ? stdenv.hostPlatform.isLinux,
libva,
enableVideoAcceleration ? libvaSupport,
# For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API
vulkanSupport ? false,
addDriverRunpath,
@@ -78,8 +72,22 @@
{
pname,
version,
hash,
url,
# Map from Nix system strings ("x86_64-linux", "aarch64-darwin", ...) to
# the corresponding upstream `{ url, hash }` record. Encoding the per-system
# sources as data rather than positional arguments lets channel-specific
# package.nix files drop platforms that upstream hasn't published yet.
archives,
# Upstream product flavor: "browser" (the regular Brave) or "origin" (the
# stripped-down Brave Origin).
flavor ? "browser",
# Flavor-specific paths supplied by the caller (default.nix).
optStem,
fileStem,
appIdStem,
darwinStem,
changelogFile,
homepage,
innerBinary,
}:
let
@@ -94,6 +102,19 @@ let
escapeShellArg
;
# /opt/brave.com/<optName>/
optName = optStem;
# Basename used for .desktop, gnome-control-center xml and icon files.
fileBase = fileStem;
# Secondary .desktop app-id.
appId = appIdStem;
# Upstream shell wrapper inside /opt.
innerWrapper = fileStem;
# macOS .app bundle name (inside the zip).
darwinApp = darwinStem;
# Upstream Exec= target in .desktop files (replaced with our wrapper).
upstreamBin = "brave-${flavor}-stable";
deps = [
alsa-lib
at-spi2-atk
@@ -156,13 +177,19 @@ let
] # disable automatic updates
# The feature disable is needed for VAAPI to work correctly: https://github.com/brave/brave-browser/issues/20935
++ optionals enableVideoAcceleration [ "UseChromeOSDirectVideoDecoder" ];
archive =
assert lib.assertMsg (builtins.hasAttr stdenv.hostPlatform.system archives)
"${pname} is not available for ${stdenv.hostPlatform.system}";
archives.${stdenv.hostPlatform.system};
in
stdenv.mkDerivation {
inherit pname version;
src = fetchurl {
inherit url hash;
};
__structuredAttrs = true;
strictDeps = true;
src = fetchurl { inherit (archive) url hash; };
dontConfigure = true;
dontBuild = true;
@@ -201,27 +228,27 @@ stdenv.mkDerivation {
cp -R usr/share $out
cp -R opt/ $out/opt
export BINARYWRAPPER=$out/opt/brave.com/brave/brave-browser
export BINARYWRAPPER=$out/opt/brave.com/${optName}/${innerWrapper}
# Fix path to bash in $BINARYWRAPPER
substituteInPlace $BINARYWRAPPER \
--replace-fail /bin/bash ${stdenv.shell} \
--replace-fail 'CHROME_WRAPPER' 'WRAPPER'
ln -sf $BINARYWRAPPER $out/bin/brave
ln -sf $BINARYWRAPPER $out/bin/${pname}
for exe in $out/opt/brave.com/brave/{brave,chrome_crashpad_handler}; do
for exe in $out/opt/brave.com/${optName}/{${innerBinary},chrome_crashpad_handler}; do
patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "${rpath}" $exe
done
# Fix paths
substituteInPlace $out/share/applications/{brave-browser,com.brave.Browser}.desktop \
--replace-fail /usr/bin/brave-browser-stable $out/bin/brave
substituteInPlace $out/share/gnome-control-center/default-apps/brave-browser.xml \
substituteInPlace $out/share/applications/{${fileBase},${appId}}.desktop \
--replace-fail /usr/bin/${upstreamBin} $out/bin/${pname}
substituteInPlace $out/share/gnome-control-center/default-apps/${fileBase}.xml \
--replace-fail /opt/brave.com $out/opt/brave.com
substituteInPlace $out/opt/brave.com/brave/default-app-block \
substituteInPlace $out/opt/brave.com/${optName}/default-app-block \
--replace-fail /opt/brave.com $out/opt/brave.com
# Correct icons location
@@ -229,13 +256,13 @@ stdenv.mkDerivation {
for icon in ''${icon_sizes[*]}
do
mkdir -p $out/share/icons/hicolor/$icon\x$icon/apps
ln -s $out/opt/brave.com/brave/product_logo_$icon.png $out/share/icons/hicolor/$icon\x$icon/apps/brave-browser.png
mkdir -p $out/share/icons/hicolor/''${icon}x''${icon}/apps
ln -s $out/opt/brave.com/${optName}/product_logo_''${icon}.png $out/share/icons/hicolor/''${icon}x''${icon}/apps/${fileBase}.png
done
# Replace xdg-settings and xdg-mime
ln -sf ${xdg-utils}/bin/xdg-settings $out/opt/brave.com/brave/xdg-settings
ln -sf ${xdg-utils}/bin/xdg-mime $out/opt/brave.com/brave/xdg-mime
ln -sf ${xdg-utils}/bin/xdg-settings $out/opt/brave.com/${optName}/xdg-settings
ln -sf ${xdg-utils}/bin/xdg-mime $out/opt/brave.com/${optName}/xdg-mime
runHook postInstall
''
@@ -244,9 +271,9 @@ stdenv.mkDerivation {
mkdir -p $out/{Applications,bin}
cp -r . "$out/Applications/Brave Browser.app"
cp -r . "$out/Applications/${darwinApp}.app"
makeWrapper "$out/Applications/Brave Browser.app/Contents/MacOS/Brave Browser" $out/bin/brave
makeWrapper "$out/Applications/${darwinApp}.app/Contents/MacOS/${darwinApp}" $out/bin/${pname}
runHook postInstall
'';
@@ -279,22 +306,33 @@ stdenv.mkDerivation {
installCheckPhase = ''
# Bypass upstream wrapper which suppresses errors
$out/opt/brave.com/brave/brave --version
$out/opt/brave.com/${optName}/brave --version
'';
passthru.updateScript = ./update.sh;
meta = {
homepage = "https://brave.com/";
description = "Privacy-oriented browser for Desktop and Laptop computers";
homepage = homepage;
description =
"Privacy-oriented browser for Desktop and Laptop computers"
+ lib.optionalString (flavor == "origin") " (Origin variant)";
changelog =
"https://github.com/brave/brave-browser/blob/master/CHANGELOG_DESKTOP.md#"
"https://github.com/brave/brave-browser/blob/master/${changelogFile}#"
+ lib.replaceStrings [ "." ] [ "" ] version;
longDescription = ''
Brave browser blocks the ads and trackers that slow you down,
chew up your bandwidth, and invade your privacy. Brave lets you
contribute to your favorite creators automatically.
'';
longDescription =
if flavor == "origin" then
''
Brave Origin is a stripped-down variant of the Brave browser that
removes most non-privacy features (rewards, wallet, AI, etc.) while
keeping the core privacy, adblock and Chromium-based browsing
experience.
''
else
''
Brave browser blocks the ads and trackers that slow you down,
chew up your bandwidth, and invade your privacy. Brave lets you
contribute to your favorite creators automatically.
'';
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.mpl20;
maintainers = with lib.maintainers; [
@@ -302,12 +340,9 @@ stdenv.mkDerivation {
jefflabonte
nasirhm
buckley310
rachalaraj
];
platforms = [
"aarch64-linux"
"x86_64-linux"
"aarch64-darwin"
];
mainProgram = "brave";
platforms = builtins.attrNames archives;
mainProgram = if flavor == "origin" then "brave-origin" else "brave";
};
}
@@ -0,0 +1,21 @@
# Expression generated by update.sh; do not edit it by hand!
rec {
pname = "brave-origin";
version = "1.92.144";
flavor = "origin";
archives = {
aarch64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin_${version}_arm64.deb";
hash = "sha256-zqjpiBMogYhtuEhIlPlK8J2j9hzfd1M8RYlT/c74Na8=";
};
x86_64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin_${version}_amd64.deb";
hash = "sha256-KF5WXF7GJPLCcEQyASEVfNrYyFJRXBSyWVPPAZPCa/E=";
};
aarch64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-origin-v${version}-darwin-arm64.zip";
hash = "sha256-kkP8cBRnC34+SjC9EvkpKcDYP3cxW7sdJgni0+zXwbk=";
};
};
}
@@ -0,0 +1,20 @@
# Expression generated by update.sh; do not edit it by hand!
rec {
pname = "brave";
version = "1.92.144";
archives = {
aarch64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb";
hash = "sha256-Z9uUJRaMx+P35oXtvAnjHyOQOXt8mW5oyyEtnD754x8=";
};
x86_64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
hash = "sha256-no/KD+3EB6CqvVWEmDB/8k2rv1wau469FBXMNWN7z6k=";
};
aarch64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip";
hash = "sha256-YidWCVGP36wn1goAulSbVrKFoHI1NA/pLtfPjIXBO48=";
};
};
}
+100
View File
@@ -0,0 +1,100 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl nix jq
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
VERSIONS_URL="https://versions.brave.com/latest/brave-versions.json"
sri_hash() {
nix-hash --to-sri --type sha256 "$(nix-prefetch-url --type sha256 "$1")"
}
find_release_with_asset() {
local versionsJson="$1" channel="$2" template="$3"
local match
match="$(
jq -c --arg channel "$channel" --arg tmpl "$template" '
[.[]
| select(.channel == $channel)
| . as $r
| select(
$r.github.assets
| map(.name)
| any(. == ($tmpl | gsub("\\$\\{version\\}"; $r.name)))
)
]
| sort_by(.published)
| last
' <<<"$versionsJson"
)"
if [[ "$match" != "null" ]]; then
printf '%s' "$match"
return 0
fi
echo "update.sh: no ${channel} release with asset matching '${template}' found" >&2
return 1
}
emit_archive_entry() {
local releaseJson="$1" version="$2" template="$3" platform="$4"
local name="${template//\$\{version\}/$version}"
local url
url="$(
jq -r --arg n "$name" '
.github.assets[]
| select(.name == $n)
| .download_url
' <<<"$releaseJson"
)"
if [[ -z "$url" ]]; then
return 0
fi
local hash
hash="$(sri_hash "$url")"
local nixUrl="${url//${version}/\$\{version\}}"
cat <<EOF
${platform} = {
url = "${nixUrl}";
hash = "${hash}";
};
EOF
}
write_package_nix() {
local pname="$1" releaseJson="$2" debStem="$3" darwinStem="$4"
local version
version="$(jq -r '.name' <<<"$releaseJson")"
echo "=> ${pname}: ${version}" >&2
local flavorLine=""
if [[ "$pname" == brave-origin || "$pname" == brave-origin-* ]]; then
flavorLine=' flavor = "origin";'
fi
local outFile="${SCRIPT_DIR}/packages/${pname}.nix"
{
echo '# Expression generated by update.sh; do not edit it by hand!'
echo 'rec {'
echo " pname = \"${pname}\";"
echo " version = \"${version}\";"
[[ -n "$flavorLine" ]] && echo "$flavorLine"
echo ''
echo ' archives = {'
emit_archive_entry "$releaseJson" "$version" "${debStem}_\${version}_arm64.deb" "aarch64-linux"
emit_archive_entry "$releaseJson" "$version" "${debStem}_\${version}_amd64.deb" "x86_64-linux"
emit_archive_entry "$releaseJson" "$version" "${darwinStem}-v\${version}-darwin-arm64.zip" "aarch64-darwin"
echo ' };'
echo '}'
} > "$outFile"
}
versionsJson="$(curl --fail -s "$VERSIONS_URL")"
entries=(
"brave brave-browser brave"
"brave-origin brave-origin brave-origin"
)
for entry in "${entries[@]}"; do
read -r pname debStem darwinStem <<<"$entry"
releaseJson="$(find_release_with_asset "$versionsJson" "release" "${debStem}_\${version}_amd64.deb")"
write_package_nix "$pname" "$releaseJson" "$debStem" "$darwinStem"
done
-35
View File
@@ -1,35 +0,0 @@
# Expression generated by update.sh; do not edit it by hand!
{ stdenv, callPackage, ... }@args:
let
pname = "brave";
version = "1.92.143";
allArchives = {
aarch64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb";
hash = "sha256-IHBJm9uow2d/X4Z9e117aGdP1Y+3R1ApWu40sPtdbr8=";
};
x86_64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
hash = "sha256-jaxNneurduBiw3jho5Fp7gXnBfSpLB5hlE06i/JK+ic=";
};
aarch64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip";
hash = "sha256-EvfZgO8FAijof1Ml6gqSOyRndL8KYFdT0MNmVmuxAnU=";
};
};
archive =
if builtins.hasAttr stdenv.system allArchives then
allArchives.${stdenv.system}
else
throw "Unsupported platform.";
in
callPackage ./make-brave.nix (removeAttrs args [ "callPackage" ]) (
archive
// {
inherit pname version;
}
)
-48
View File
@@ -1,48 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnused nix jq
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
latestVersion="$(curl --fail -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/brave/brave-browser/releases/latest" | jq -r '.tag_name' | sed 's/^v//')"
hashAarch64="$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url --type sha256 "https://github.com/brave/brave-browser/releases/download/v${latestVersion}/brave-browser_${latestVersion}_arm64.deb")")"
hashAmd64="$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url --type sha256 "https://github.com/brave/brave-browser/releases/download/v${latestVersion}/brave-browser_${latestVersion}_amd64.deb")")"
hashAarch64Darwin="$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url --type sha256 "https://github.com/brave/brave-browser/releases/download/v${latestVersion}/brave-v${latestVersion}-darwin-arm64.zip")")"
cat > $SCRIPT_DIR/package.nix << EOF
# Expression generated by update.sh; do not edit it by hand!
{ stdenv, callPackage, ... }@args:
let
pname = "brave";
version = "${latestVersion}";
allArchives = {
aarch64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v\${version}/brave-browser_\${version}_arm64.deb";
hash = "${hashAarch64}";
};
x86_64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v\${version}/brave-browser_\${version}_amd64.deb";
hash = "${hashAmd64}";
};
aarch64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v\${version}/brave-v\${version}-darwin-arm64.zip";
hash = "${hashAarch64Darwin}";
};
};
archive =
if builtins.hasAttr stdenv.system allArchives then
allArchives.\${stdenv.system}
else
throw "Unsupported platform.";
in
callPackage ./make-brave.nix (removeAttrs args [ "callPackage" ]) (
archive
// {
inherit pname version;
}
)
EOF
+3
View File
@@ -8436,6 +8436,9 @@ with pkgs;
bitwig-studio = bitwig-studio6;
brave = (callPackage ../applications/networking/browsers/brave { }).brave;
brave-origin = (callPackage ../applications/networking/browsers/brave { }).brave-origin;
breezy = with python3Packages; toPythonApplication breezy;
# calico-felix and calico-node have not been packaged due to libbpf, linking issues