microsoft-edge: Mirror google-chrome derivation (#347836)

Changed files
+331 -291
pkgs
applications
networking
browsers
by-name
mi
microsoft-edge
top-level
-197
pkgs/applications/networking/browsers/microsoft-edge/browser.nix
···
-
{ channel, version, revision, hash }:
-
-
{ stdenv
-
, fetchurl
-
, lib
-
, makeWrapper
-
-
, binutils-unwrapped
-
, xz
-
, gnutar
-
, file
-
-
, glibc
-
, glib
-
, nss
-
, nspr
-
, atk
-
, at-spi2-atk
-
, xorg
-
, cups
-
, dbus
-
, expat
-
, libdrm
-
, libxkbcommon
-
, pipewire
-
, gtk3
-
, pango
-
, cairo
-
, gdk-pixbuf
-
, mesa
-
, alsa-lib
-
, at-spi2-core
-
, libuuid
-
, systemd
-
, wayland
-
, libGL
-
-
# command line arguments which are always set e.g "--disable-gpu"
-
, commandLineArgs ? ""
-
}:
-
-
let
-
-
baseName = "microsoft-edge";
-
-
shortName = if channel == "stable"
-
then "msedge"
-
else "msedge-" + channel;
-
-
longName = if channel == "stable"
-
then baseName
-
else baseName + "-" + channel;
-
-
iconSuffix = lib.optionalString (channel != "stable") "_${channel}";
-
-
desktopSuffix = lib.optionalString (channel != "stable") "-${channel}";
-
in
-
-
stdenv.mkDerivation rec {
-
pname="${baseName}-${channel}";
-
inherit version;
-
-
src = fetchurl {
-
url = "https://packages.microsoft.com/repos/edge/pool/main/m/${baseName}-${channel}/${baseName}-${channel}_${version}-${revision}_amd64.deb";
-
inherit hash;
-
};
-
-
nativeBuildInputs = [
-
makeWrapper
-
];
-
-
unpackCmd = "${binutils-unwrapped}/bin/ar p $src data.tar.xz | ${xz}/bin/xz -dc | ${gnutar}/bin/tar -xf -";
-
sourceRoot = ".";
-
-
dontPatch = true;
-
dontConfigure = true;
-
dontPatchELF = true;
-
-
buildPhase = let
-
libPath = {
-
msedge = lib.makeLibraryPath [
-
glibc glib nss nspr atk at-spi2-atk xorg.libX11
-
xorg.libxcb cups.lib dbus.lib expat libdrm
-
xorg.libXcomposite xorg.libXdamage xorg.libXext
-
xorg.libXfixes xorg.libXrandr libxkbcommon
-
pipewire gtk3 pango cairo gdk-pixbuf mesa
-
alsa-lib at-spi2-core xorg.libxshmfence systemd wayland
-
];
-
naclHelper = lib.makeLibraryPath [
-
glib nspr atk libdrm xorg.libxcb mesa xorg.libX11
-
xorg.libXext dbus.lib libxkbcommon
-
];
-
libwidevinecdm = lib.makeLibraryPath [
-
glib nss nspr
-
];
-
libGLESv2 = lib.makeLibraryPath [
-
xorg.libX11 xorg.libXext xorg.libxcb wayland libGL
-
];
-
liboneauth = lib.makeLibraryPath [
-
libuuid xorg.libX11
-
];
-
};
-
in ''
-
patchelf \
-
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-
--set-rpath "${libPath.msedge}" \
-
opt/microsoft/${shortName}/msedge
-
-
patchelf \
-
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-
opt/microsoft/${shortName}/msedge-sandbox
-
-
patchelf \
-
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-
opt/microsoft/${shortName}/msedge_crashpad_handler
-
-
patchelf \
-
--set-rpath "${libPath.libwidevinecdm}" \
-
opt/microsoft/${shortName}/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so
-
-
patchelf \
-
--set-rpath "${libPath.libGLESv2}" \
-
opt/microsoft/${shortName}/libGLESv2.so
-
-
patchelf \
-
--set-rpath "${libPath.liboneauth}" \
-
opt/microsoft/${shortName}/liboneauth.so
-
'' + lib.optionalString (lib.versionOlder version "121") ''
-
patchelf \
-
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
-
--set-rpath "${libPath.naclHelper}" \
-
opt/microsoft/${shortName}/nacl_helper
-
'';
-
-
installPhase = ''
-
mkdir -p $out
-
cp -R opt usr/bin usr/share $out
-
-
${if channel == "stable"
-
then "ln -sf $out/bin/${longName} $out/bin/${baseName}-${channel}"
-
else "ln -sf $out/opt/microsoft/${shortName}/${baseName}-${channel} $out/opt/microsoft/${shortName}/${baseName}"}
-
-
ln -sf $out/opt/microsoft/${shortName}/${longName} $out/bin/${longName}
-
-
rm -rf $out/share/doc
-
rm -rf $out/opt/microsoft/${shortName}/cron
-
-
for icon in '16' '24' '32' '48' '64' '128' '256'
-
do
-
${ "icon_source=$out/opt/microsoft/${shortName}/product_logo_\${icon}${iconSuffix}.png" }
-
${ "icon_target=$out/share/icons/hicolor/\${icon}x\${icon}/apps" }
-
mkdir -p $icon_target
-
cp $icon_source $icon_target/microsoft-edge${desktopSuffix}.png
-
done
-
-
substituteInPlace $out/share/applications/${longName}.desktop \
-
--replace /usr/bin/${baseName}-${channel} $out/bin/${longName}
-
-
substituteInPlace $out/share/gnome-control-center/default-apps/${longName}.xml \
-
--replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
-
-
substituteInPlace $out/share/menu/${longName}.menu \
-
--replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
-
-
substituteInPlace $out/opt/microsoft/${shortName}/xdg-mime \
-
--replace "\''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" "\''${XDG_DATA_DIRS:-/run/current-system/sw/share}" \
-
--replace "xdg_system_dirs=/usr/local/share/:/usr/share/" "xdg_system_dirs=/run/current-system/sw/share/" \
-
--replace /usr/bin/file ${file}/bin/file
-
-
substituteInPlace $out/opt/microsoft/${shortName}/default-app-block \
-
--replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
-
-
substituteInPlace $out/opt/microsoft/${shortName}/xdg-settings \
-
--replace "\''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" "\''${XDG_DATA_DIRS:-/run/current-system/sw/share}" \
-
--replace "\''${XDG_CONFIG_DIRS:-/etc/xdg}" "\''${XDG_CONFIG_DIRS:-/run/current-system/sw/etc/xdg}"
-
'';
-
-
postFixup = ''
-
wrapProgram "$out/bin/${longName}" \
-
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.pname}-${gtk3.version}" \
-
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
-
--add-flags ${lib.escapeShellArg commandLineArgs}
-
'';
-
-
# We only want automatic updates for stable, beta and dev will get updated by the same script
-
# and are only used for testing.
-
passthru = lib.optionalAttrs (channel == "stable") { updateScript = ./update.py; };
-
-
meta = with lib; {
-
homepage = "https://www.microsoft.com/en-us/edge";
-
description = "Web browser from Microsoft";
-
license = licenses.unfree;
-
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
-
platforms = [ "x86_64-linux" ];
-
maintainers = with maintainers; [ zanculmarktum kuwii rhysmdnz ];
-
};
-
}
-20
pkgs/applications/networking/browsers/microsoft-edge/default.nix
···
-
{
-
beta = import ./browser.nix {
-
channel = "beta";
-
version = "130.0.2849.5";
-
revision = "1";
-
hash = "sha256-chvB84+zu6/xgRHyUk33aicc44QJLxxdOOu0ngqmsFM=";
-
};
-
dev = import ./browser.nix {
-
channel = "dev";
-
version = "130.0.2849.1";
-
revision = "1";
-
hash = "sha256-JObqtaaUR6J4rZ90WWw7Ku5Ntl/QBWHo23T7Ohu5p1s=";
-
};
-
stable = import ./browser.nix {
-
channel = "stable";
-
version = "129.0.2792.65";
-
revision = "1";
-
hash = "sha256-xuCtHptE2CG4aiY7gu2sWW3Km4qfB0E/L/PBACIaKOc=";
-
};
-
}
-70
pkgs/applications/networking/browsers/microsoft-edge/update.py
···
-
#! /usr/bin/env nix-shell
-
#! nix-shell -i python3 -p python3Packages.packaging python3Packages.debian
-
-
import base64
-
import textwrap
-
from urllib import request
-
-
from collections import OrderedDict
-
from debian.deb822 import Packages
-
from debian.debian_support import Version
-
from os.path import abspath, dirname
-
-
PIN_PATH = dirname(abspath(__file__)) + '/default.nix'
-
-
def packages():
-
packages_url = 'https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages'
-
handle = request.urlopen(packages_url)
-
return handle
-
-
-
def latest_packages(packages: bytes):
-
latest_packages: OrderedDict[str, Packages] = {}
-
for package in Packages.iter_paragraphs(packages, use_apt_pkg=False):
-
name: str = package['Package']
-
if not name.startswith('microsoft-edge-'):
-
continue
-
channel = name.replace('microsoft-edge-', '')
-
if channel not in latest_packages:
-
latest_packages[channel] = package
-
else:
-
old_package = latest_packages[channel]
-
if old_package.get_version() < package.get_version(): # type: ignore
-
latest_packages[channel] = package
-
return OrderedDict(sorted(latest_packages.items(), key=lambda x:x[0]))
-
-
-
def nix_expressions(latest: dict[str, Packages]):
-
channel_strs: list[str] = []
-
for channel, package in latest.items():
-
print(f"Processing {channel} {package['Version']}")
-
match = Version.re_valid_version.match(package['Version'])
-
assert match is not None
-
-
version = match.group('upstream_version')
-
revision = match.group('debian_revision')
-
sri = 'sha256-' + \
-
base64.b64encode(bytes.fromhex(package['SHA256'])).decode('ascii')
-
-
channel_str = textwrap.dedent(
-
f'''\
-
{channel} = import ./browser.nix {{
-
channel = "{channel}";
-
version = "{version}";
-
revision = "{revision}";
-
hash = "{sri}";
-
}};'''
-
)
-
channel_strs.append(channel_str)
-
return channel_strs
-
-
-
def write_expression():
-
latest = latest_packages(packages())
-
channel_strs = nix_expressions(latest)
-
nix_expr = '{\n' + textwrap.indent('\n'.join(channel_strs), ' ') + '\n}\n'
-
with open(PIN_PATH, 'w') as f:
-
f.write(nix_expr)
-
-
-
write_expression()
+287
pkgs/by-name/mi/microsoft-edge/package.nix
···
+
{
+
fetchurl,
+
lib,
+
makeWrapper,
+
patchelf,
+
stdenv,
+
+
# Linked dynamic libraries.
+
alsa-lib,
+
at-spi2-atk,
+
at-spi2-core,
+
atk,
+
cairo,
+
cups,
+
dbus,
+
expat,
+
fontconfig,
+
freetype,
+
gcc-unwrapped,
+
gdk-pixbuf,
+
glib,
+
gtk3,
+
gtk4,
+
libdrm,
+
libglvnd,
+
libkrb5,
+
libX11,
+
libxcb,
+
libXcomposite,
+
libXcursor,
+
libXdamage,
+
libXext,
+
libXfixes,
+
libXi,
+
libxkbcommon,
+
libXrandr,
+
libXrender,
+
libXScrnSaver,
+
libxshmfence,
+
libXtst,
+
mesa,
+
nspr,
+
nss,
+
pango,
+
pipewire,
+
vulkan-loader,
+
wayland, # ozone/wayland
+
+
# Command line programs
+
coreutils,
+
+
# command line arguments which are always set e.g "--disable-gpu"
+
commandLineArgs ? "",
+
+
# Will crash without.
+
systemd,
+
+
# Loaded at runtime.
+
libexif,
+
pciutils,
+
+
# Additional dependencies according to other distros.
+
## Ubuntu
+
curl,
+
liberation_ttf,
+
util-linux,
+
wget,
+
xdg-utils,
+
## Arch Linux.
+
flac,
+
harfbuzz,
+
icu,
+
libopus,
+
libpng,
+
snappy,
+
speechd-minimal,
+
## Gentoo
+
bzip2,
+
libcap,
+
+
# Necessary for USB audio devices.
+
libpulseaudio,
+
pulseSupport ? true,
+
+
adwaita-icon-theme,
+
gsettings-desktop-schemas,
+
+
# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder)
+
libva,
+
libvaSupport ? true,
+
+
# For Vulkan support (--enable-features=Vulkan)
+
addDriverRunpath,
+
+
# Edge Specific
+
libuuid,
+
}:
+
+
let
+
+
opusWithCustomModes = libopus.override { withCustomModes = true; };
+
+
deps =
+
[
+
alsa-lib
+
at-spi2-atk
+
at-spi2-core
+
atk
+
bzip2
+
cairo
+
coreutils
+
cups
+
curl
+
dbus
+
expat
+
flac
+
fontconfig
+
freetype
+
gcc-unwrapped.lib
+
gdk-pixbuf
+
glib
+
harfbuzz
+
icu
+
libcap
+
libdrm
+
liberation_ttf
+
libexif
+
libglvnd
+
libkrb5
+
libpng
+
libX11
+
libxcb
+
libXcomposite
+
libXcursor
+
libXdamage
+
libXext
+
libXfixes
+
libXi
+
libxkbcommon
+
libXrandr
+
libXrender
+
libXScrnSaver
+
libxshmfence
+
libXtst
+
mesa
+
nspr
+
nss
+
opusWithCustomModes
+
pango
+
pciutils
+
pipewire
+
snappy
+
speechd-minimal
+
systemd
+
util-linux
+
vulkan-loader
+
wayland
+
wget
+
libuuid
+
]
+
++ lib.optional pulseSupport libpulseaudio
+
++ lib.optional libvaSupport libva
+
++ [
+
gtk3
+
gtk4
+
];
+
in
+
+
stdenv.mkDerivation (finalAttrs: {
+
pname = "microsoft-edge";
+
version = "130.0.2849.46";
+
+
src = fetchurl {
+
url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_${finalAttrs.version}-1_amd64.deb";
+
hash = "sha256-QschcHSDoYakjf4oYXIc40SyniCufNmjHJPuvRazdSw=";
+
};
+
+
# With strictDeps on, some shebangs were not being patched correctly
+
# ie, $out/share/microsoft/msedge/microsoft-edge
+
strictDeps = false;
+
+
nativeBuildInputs = [
+
makeWrapper
+
patchelf
+
];
+
+
buildInputs = [
+
# needed for XDG_ICON_DIRS
+
adwaita-icon-theme
+
glib
+
gtk3
+
gtk4
+
# needed for GSETTINGS_SCHEMAS_PATH
+
gsettings-desktop-schemas
+
];
+
+
unpackPhase = ''
+
runHook preUnpack
+
ar x $src
+
tar xf data.tar.xz
+
runHook postUnpack
+
'';
+
+
rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps;
+
binpath = lib.makeBinPath deps;
+
+
installPhase = ''
+
runHook preInstall
+
+
appname=msedge
+
dist=stable
+
+
exe=$out/bin/microsoft-edge
+
+
mkdir -p $out/bin $out/share
+
cp -v -a opt/* $out/share
+
cp -v -a usr/share/* $out/share
+
+
# replace bundled vulkan-loader
+
rm -v $out/share/microsoft/$appname/libvulkan.so.1
+
ln -v -s -t "$out/share/microsoft/$appname" "${lib.getLib vulkan-loader}/lib/libvulkan.so.1"
+
+
substituteInPlace $out/share/microsoft/$appname/microsoft-edge \
+
--replace-fail 'CHROME_WRAPPER' 'WRAPPER'
+
substituteInPlace $out/share/applications/microsoft-edge.desktop \
+
--replace-fail /usr/bin/microsoft-edge-$dist $exe
+
substituteInPlace $out/share/gnome-control-center/default-apps/microsoft-edge.xml \
+
--replace-fail /opt/microsoft/msedge $exe
+
substituteInPlace $out/share/menu/microsoft-edge.menu \
+
--replace-fail /opt $out/share \
+
--replace-fail $out/share/microsoft/$appname/microsoft-edge $exe
+
+
for icon_file in $out/share/microsoft/msedge/product_logo_[0-9]*.png; do
+
num_and_suffix="''${icon_file##*logo_}"
+
if [ $dist = "stable" ]; then
+
icon_size="''${num_and_suffix%.*}"
+
else
+
icon_size="''${num_and_suffix%_*}"
+
fi
+
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/microsoft-edge.png"
+
done
+
+
# "--simulate-outdated-no-au" disables auto updates and browser outdated popup
+
makeWrapper "$out/share/microsoft/$appname/microsoft-edge" "$exe" \
+
--prefix LD_LIBRARY_PATH : "$rpath" \
+
--prefix PATH : "$binpath" \
+
--suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \
+
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH:${addDriverRunpath.driverLink}/share" \
+
--set CHROME_WRAPPER "microsoft-edge-$dist" \
+
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+
--add-flags "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" \
+
--add-flags ${lib.escapeShellArg commandLineArgs}
+
+
# Make sure that libGL and libvulkan are found by ANGLE libGLESv2.so
+
patchelf --set-rpath $rpath $out/share/microsoft/$appname/lib*GL*
+
+
# Edge specific set liboneauth
+
patchelf --set-rpath $rpath $out/share/microsoft/$appname/liboneauth.so
+
+
for elf in $out/share/microsoft/$appname/{msedge,msedge-sandbox,msedge_crashpad_handler}; do
+
patchelf --set-rpath $rpath $elf
+
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $elf
+
done
+
+
runHook postInstall
+
'';
+
+
passthru.updateScript = ./update.py;
+
+
meta = {
+
changelog = "https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel";
+
description = "Web browser from Microsoft";
+
homepage = "https://www.microsoft.com/en-us/edge";
+
license = lib.licenses.unfree;
+
mainProgram = "microsoft-edge";
+
maintainers = with lib.maintainers; [
+
zanculmarktum
+
kuwii
+
rhysmdnz
+
];
+
platforms = [ "x86_64-linux" ];
+
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+
};
+
})
+44
pkgs/by-name/mi/microsoft-edge/update.py
···
+
#! /usr/bin/env nix-shell
+
#! nix-shell -i python3 -p python3Packages.packaging python3Packages.debian common-updater-scripts
+
+
import base64
+
import textwrap
+
import os
+
from urllib import request
+
+
from collections import OrderedDict
+
from debian.deb822 import Packages
+
from debian.debian_support import Version
+
from os.path import abspath, dirname
+
+
PIN_PATH = dirname(abspath(__file__)) + '/default.nix'
+
+
def packages():
+
packages_url = 'https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages'
+
handle = request.urlopen(packages_url)
+
return handle
+
+
+
def latest_packages(packages: bytes):
+
latest_packages: OrderedDict[str, Packages] = {}
+
for package in Packages.iter_paragraphs(packages, use_apt_pkg=False):
+
name: str = package['Package']
+
if not name.startswith('microsoft-edge-stable'):
+
continue
+
channel = name.replace('microsoft-edge-', '')
+
if channel not in latest_packages:
+
latest_packages[channel] = package
+
else:
+
old_package = latest_packages[channel]
+
if old_package.get_version() < package.get_version(): # type: ignore
+
latest_packages[channel] = package
+
return OrderedDict(sorted(latest_packages.items(), key=lambda x:x[0]))
+
+
+
def write_expression():
+
latest = latest_packages(packages())
+
version = Version.re_valid_version.match(latest['stable']['Version']).group('upstream_version')
+
os.system(f'update-source-version microsoft-edge "{version}"')
+
+
+
write_expression()
-4
pkgs/top-level/all-packages.nix
···
microsoft-gsl = callPackage ../development/libraries/microsoft-gsl { };
-
microsoft-edge = callPackage (import ../applications/networking/browsers/microsoft-edge).stable { };
-
microsoft-edge-beta = callPackage (import ../applications/networking/browsers/microsoft-edge).beta { };
-
microsoft-edge-dev = callPackage (import ../applications/networking/browsers/microsoft-edge).dev { };
-
micronucleus = callPackage ../development/tools/misc/micronucleus { };
markdown-anki-decks = callPackage ../tools/misc/markdown-anki-decks { };