From 964766c3151605ecdc7199d08e57152c0a449297 Mon Sep 17 00:00:00 2001 From: Rafael Ieda Date: Mon, 21 Sep 2026 18:52:14 -0300 Subject: [PATCH 1/2] msedgedriver: refactor, add darwin support (cherry picked from commit 670ddeed256bb41757d5d670e84891c95076c36d) --- pkgs/by-name/ms/msedgedriver/package.nix | 53 +++++++++++++----------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/pkgs/by-name/ms/msedgedriver/package.nix b/pkgs/by-name/ms/msedgedriver/package.nix index 43de4807a9a0..376901f228c5 100644 --- a/pkgs/by-name/ms/msedgedriver/package.nix +++ b/pkgs/by-name/ms/msedgedriver/package.nix @@ -14,39 +14,44 @@ stdenvNoCC.mkDerivation (finalAttrs: { pname = "msedgedriver"; version = "154.0.4258.37"; - src = fetchzip { - url = "https://msedgedriver.microsoft.com/${finalAttrs.version}/edgedriver_linux64.zip"; - hash = "sha256-XbOQl9FyckF3Qybb+40474ImJDKahBkekPoydf/TxV0="; - stripRoot = false; - }; + src = + let + driverArch = + { + aarch64-darwin = "mac64_m1"; + x86_64-linux = "linux64"; + } + .${stdenvNoCC.hostPlatform.system}; + in + fetchzip { + url = "https://msedgedriver.microsoft.com/${finalAttrs.version}/edgedriver_${driverArch}.zip"; + hash = + { + mac64_m1 = "sha256-6nwe/vRPh5MkQLTiZNXepfFsLtILwoK925mgLCUUVNg="; + linux64 = "sha256-XbOQl9FyckF3Qybb+40474ImJDKahBkekPoydf/TxV0="; + } + .${driverArch}; + stripRoot = false; + }; - buildInputs = [ + buildInputs = lib.optionals stdenvNoCC.hostPlatform.isLinux [ glib libxcb nspr nss ]; - nativeBuildInputs = [ autoPatchelfHook ]; + nativeBuildInputs = lib.optionals stdenvNoCC.hostPlatform.isLinux [ + autoPatchelfHook + ]; - installPhase = - if stdenvNoCC.hostPlatform.isDarwin then - '' - runHook preInstall + installPhase = '' + runHook preInstall - mkdir -p $out/{Applications/msedgedriver,bin} - cp -R . $out/Applications/msedgedriver + install -D msedgedriver $out/bin/msedgedriver - runHook postInstall - '' - else - '' - runHook preInstall - - install -m777 -D "msedgedriver" $out/bin/msedgedriver - - runHook postInstall - ''; + runHook postInstall + ''; meta = { homepage = "https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver"; @@ -54,7 +59,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; license = lib.licenses.unfree; maintainers = microsoft-edge.meta.maintainers; - platforms = [ + platforms = lib.platforms.darwin ++ [ "x86_64-linux" ]; mainProgram = "msedgedriver"; From 9f09524e2c964ae1aadc35eb1685aa02d51cd681 Mon Sep 17 00:00:00 2001 From: Rafael Ieda Date: Mon, 21 Sep 2026 18:53:51 -0300 Subject: [PATCH 2/2] microsoft-edge: refactor, add darwin support (cherry picked from commit 143592c313044d9a1fa97828982aa573b4849579) --- pkgs/by-name/mi/microsoft-edge/package.nix | 294 +++++++++++++-------- pkgs/by-name/mi/microsoft-edge/update.py | 46 ---- pkgs/by-name/mi/microsoft-edge/update.sh | 258 ++++++++++++++++++ pkgs/by-name/ms/msedgedriver/package.nix | 2 + 4 files changed, 450 insertions(+), 150 deletions(-) delete mode 100755 pkgs/by-name/mi/microsoft-edge/update.py create mode 100755 pkgs/by-name/mi/microsoft-edge/update.sh diff --git a/pkgs/by-name/mi/microsoft-edge/package.nix b/pkgs/by-name/mi/microsoft-edge/package.nix index 13cdd8b602e7..b9023e0be7b7 100644 --- a/pkgs/by-name/mi/microsoft-edge/package.nix +++ b/pkgs/by-name/mi/microsoft-edge/package.nix @@ -1,11 +1,13 @@ { - lib, - stdenvNoCC, + bintools, fetchurl, + lib, makeWrapper, patchelf, - bintools, + stdenvNoCC, + testers, dpkg, + # Linked dynamic libraries alsa-lib, at-spi2-atk, @@ -46,15 +48,20 @@ 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, @@ -73,27 +80,38 @@ ## 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, - # For QT support + undmg, + + # Enables Edge's "Use QT" appearance to introspect the user's Plasma theme + plasmaSupport ? false, qt6, - # Edge AAD sync + kdePackages, + + # Edge Specific and AAD sync cacert, libsecret, - # Edge Specific libuuid, + # Create a symlink at $out/bin/microsoft-edge-stable withSymlink ? true, }: + let + pname = "microsoft-edge"; opusWithCustomModes = libopus.override { withCustomModes = true; }; deps = [ @@ -115,15 +133,20 @@ let gcc-unwrapped.lib gdk-pixbuf glib + gtk3 + gtk4 harfbuzz icu libcap libdrm liberation_ttf libexif + libgbm libglvnd libkrb5 libpng + libsecret + libuuid libx11 libxcb libxcomposite @@ -138,7 +161,6 @@ let libxscrnsaver libxshmfence libxtst - libgbm nspr nss opusWithCustomModes @@ -152,124 +174,178 @@ let vulkan-loader wayland wget - libsecret - libuuid - gtk3 - gtk4 + ] + ++ lib.optional pulseSupport libpulseaudio + ++ lib.optional libvaSupport libva + ++ lib.optionals plasmaSupport [ qt6.qtbase qt6.qtwayland - ] - ++ lib.optionals pulseSupport [ libpulseaudio ] - ++ lib.optionals libvaSupport [ libva ]; -in -stdenvNoCC.mkDerivation (finalAttrs: { - pname = "microsoft-edge"; - version = "154.0.4258.37"; - - 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-xvopdHM5kTIbRsQGS3hc3sWhTYzd0YK8X9oFfjfnYD0="; - }; - - # With strictDeps on, some shebangs were not being patched correctly - # ie, $out/share/microsoft/msedge/microsoft-edge - strictDeps = false; - - nativeBuildInputs = [ - makeWrapper - patchelf - dpkg + kdePackages.plasma-integration + kdePackages.breeze ]; - buildInputs = [ - # needed for XDG_ICON_DIRS - adwaita-icon-theme - glib - gtk3 - gtk4 - # needed for GSETTINGS_SCHEMAS_PATH - gsettings-desktop-schemas - ]; + linux = stdenvNoCC.mkDerivation (finalAttrs: { + inherit pname meta; + version = "154.0.4258.37"; - rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps; - binpath = lib.makeBinPath deps; + 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-xvopdHM5kTIbRsQGS3hc3sWhTYzd0YK8X9oFfjfnYD0="; + }; - installPhase = '' - runHook preInstall + # With strictDeps on, some shebangs were not being patched correctly + # ie, $out/share/microsoft/msedge/microsoft-edge + strictDeps = false; - appname=msedge - dist=stable + nativeBuildInputs = [ + makeWrapper + patchelf + dpkg + ]; - exe=$out/bin/microsoft-edge + buildInputs = [ + # needed for XDG_ICON_DIRS + adwaita-icon-theme + glib + gtk3 + gtk4 + # needed for GSETTINGS_SCHEMAS_PATH + gsettings-desktop-schemas + ]; - mkdir -p $out/bin - cp -v -a usr/share $out/share - cp -v -a opt/microsoft $out/share/microsoft + rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps; + binpath = lib.makeBinPath deps; - # 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" + installPhase = '' + runHook preInstall - 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/applications/com.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 + appname=msedge + dist=stable - 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 + exe=$out/bin/microsoft-edge-$dist - # "--simulate-outdated-no-au" disables auto updates and browser outdated popup - makeWrapper "$out/share/microsoft/$appname/microsoft-edge" "$exe" \ - --prefix QT_PLUGIN_PATH : "${qt6.qtbase}/lib/qt-6/plugins" \ - --prefix QT_PLUGIN_PATH : "${qt6.qtwayland}/lib/qt-6/plugins" \ - --prefix NIXPKGS_QT6_QML_IMPORT_PATH : "${qt6.qtwayland}/lib/qt-6/qml" \ - --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 SSL_CERT_FILE "${cacert}/etc/ssl/certs/ca-bundle.crt" \ - --set CHROME_WRAPPER "microsoft-edge-$dist" \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \ - --add-flags "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" \ - --add-flags ${lib.escapeShellArg commandLineArgs} + mkdir -p $out/bin $out/share + cp -v -a opt/* $out/share + cp -v -a usr/share/* $out/share - # Edge specific set liboneauth - patchelf --set-rpath $rpath $out/share/microsoft/$appname/liboneauth.so + # 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" - for elf in $out/share/microsoft/$appname/{msedge,msedge-sandbox,msedge_crashpad_handler}; do - patchelf --set-rpath $rpath $elf - patchelf --set-interpreter ${bintools.dynamicLinker} $elf - done + 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/applications/com.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/$appname $exe - ${lib.optionalString withSymlink '' - ln -s $out/bin/microsoft-edge $out/bin/microsoft-edge-stable - ''} + 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 - runHook postInstall - ''; + # "--simulate-outdated-no-au" disables auto updates and browser outdated popup + makeWrapper "$out/share/microsoft/$appname/microsoft-edge" "$exe" \ + ${lib.optionalString plasmaSupport '' + --prefix QT_PLUGIN_PATH : "${qt6.qtbase}/lib/qt-6/plugins" \ + --prefix QT_PLUGIN_PATH : "${qt6.qtwayland}/lib/qt-6/plugins" \ + --prefix QT_PLUGIN_PATH : "${kdePackages.plasma-integration}/lib/qt-6/plugins" \ + --prefix QT_PLUGIN_PATH : "${kdePackages.breeze}/lib/qt-6/plugins" \ + --prefix NIXPKGS_QT6_QML_IMPORT_PATH : "${qt6.qtwayland}/lib/qt-6/qml" \ + ''} \ + --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 SSL_CERT_FILE "${cacert}/etc/ssl/certs/ca-bundle.crt" \ + --set CHROME_WRAPPER "microsoft-edge-$dist" \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \ + --add-flags "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" \ + --add-flags ${lib.escapeShellArg commandLineArgs} - passthru.updateScript = ./update.py; + # 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 ${bintools.dynamicLinker} $elf + done + + runHook postInstall + ''; + + postInstall = lib.optionalString withSymlink '' + ln -s $out/bin/microsoft-edge-stable $out/bin/microsoft-edge + ''; + + passthru = { + updateScript = ./update.sh; + tests.version = testers.testVersion { package = finalAttrs.finalPackage; }; + }; + }); + + darwin = stdenvNoCC.mkDerivation (finalAttrs: { + inherit pname meta; + version = "154.0.4258.37"; + uuid = "f7dec597-801d-4c4b-ae51-c8a53c78925c"; + + src = fetchurl { + url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/${finalAttrs.uuid}/MicrosoftEdge-${finalAttrs.version}.dmg"; + hash = "sha256-R385aGFby0WK64wxHGCbKnDymsUIG+lzTpQfVO2NBgA="; + }; + + dontPatch = true; + dontConfigure = true; + dontBuild = true; + dontFixup = true; + + nativeBuildInputs = [ + makeWrapper + undmg + ]; + + sourceRoot = "."; + + installPhase = '' + runHook preInstall + + mkdir -p $out/Applications + cp -r *.app $out/Applications + + mkdir -p $out/bin + + # "--simulate-outdated-no-au" disables auto updates and browser outdated popup + makeWrapper $out/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge $out/bin/microsoft-edge-stable \ + --add-flags "--simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT'" \ + --add-flags ${lib.escapeShellArg commandLineArgs} + runHook postInstall + ''; + + postInstall = lib.optionalString withSymlink '' + ln -s $out/bin/microsoft-edge-stable $out/bin/microsoft-edge + ''; + + passthru = { + updateScript = ./update.sh; + tests.version = testers.testVersion { package = finalAttrs.finalPackage; }; + }; + }); 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"; + changelog = "https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel"; license = lib.licenses.unfree; - mainProgram = "microsoft-edge"; maintainers = with lib.maintainers; [ cholli ulrikstrid @@ -278,7 +354,17 @@ stdenvNoCC.mkDerivation (finalAttrs: { jonhermansen iedame ]; - platforms = [ "x86_64-linux" ]; + platforms = lib.platforms.darwin ++ [ + "x86_64-linux" + ]; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + mainProgram = "microsoft-edge-stable"; }; -}) + +in +if stdenvNoCC.hostPlatform.isDarwin then + darwin +else if stdenvNoCC.hostPlatform.isLinux then + linux +else + throw "Unsupported platform ${stdenvNoCC.hostPlatform.system}" diff --git a/pkgs/by-name/mi/microsoft-edge/update.py b/pkgs/by-name/mi/microsoft-edge/update.py deleted file mode 100755 index d2298c382e6f..000000000000 --- a/pkgs/by-name/mi/microsoft-edge/update.py +++ /dev/null @@ -1,46 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i python3 -p python3Packages.packaging python3Packages.python-debian common-updater-scripts - -import os -from collections import OrderedDict -from os.path import abspath, dirname -from urllib import request - -from debian.deb822 import Packages -from debian.debian_support import Version - -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}"') - os.system(f'update-source-version msedgedriver "{version}"') - - -write_expression() diff --git a/pkgs/by-name/mi/microsoft-edge/update.sh b/pkgs/by-name/mi/microsoft-edge/update.sh new file mode 100755 index 000000000000..78c9b7ab348b --- /dev/null +++ b/pkgs/by-name/mi/microsoft-edge/update.sh @@ -0,0 +1,258 @@ +#!/usr/bin/env nix-shell +#!nix-shell -I nixpkgs=./. -i bash -p curl gawk nix common-updater-scripts python3Packages.python-debian +# shellcheck shell=bash + +set -euo pipefail + +DEFAULT_NIX="$(realpath "./pkgs/by-name/mi/microsoft-edge/package.nix")" +DRIVER_NIX="$(realpath "./pkgs/by-name/ms/msedgedriver/package.nix")" + +get_linux_version_info() { + local packages_url + local response + local version + local current_version + local download_url + + packages_url="https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages" + + response="$(curl --silent --fail "$packages_url")" + read -r version download_url <<< "$( + python3 -c ' +import sys +from debian.deb822 import Packages +from debian.debian_support import Version + +latest = None + +for package in Packages.iter_paragraphs(sys.stdin, use_apt_pkg=False): + if package["Package"] != "microsoft-edge-stable": + continue + + if latest is None or latest.get_version() < package.get_version(): + latest = package + +if latest is None: + raise SystemExit("microsoft-edge-stable not found") + +version = Version.re_valid_version.match( + latest["Version"] +).group("upstream_version") + +url = ( + "https://packages.microsoft.com/repos/edge/" + + latest["Filename"] +) + +print(version, url) +' <<< "$response" + )" + + current_version="$( + awk ' + /^ linux = stdenvNoCC.mkDerivation/ { in_block=1 } + in_block && /version = "/ { + match($0, /version = "([^"]+)"/, arr) + print arr[1] + exit + } + in_block && /^ \};/ { exit } + ' "$DEFAULT_NIX" + )" + + echo "$version" "$current_version" "$download_url" +} + +get_darwin_version_info() { + local redirect_url + local final_url + local version + local current_version + local uuid + + redirect_url="https://go.microsoft.com/fwlink/?linkid=2192091" + + final_url="$( + curl \ + --silent \ + --show-error \ + --fail \ + --location \ + --output /dev/null \ + --write-out '%{url_effective}' \ + "$redirect_url" + )" + + if [[ "$final_url" =~ /files/([^/]+)/MicrosoftEdge-([0-9.]+)\.dmg$ ]]; then + uuid="${BASH_REMATCH[1]}" + version="${BASH_REMATCH[2]}" + else + echo "Could not parse Darwin URL: $final_url" >&2 + exit 1 + fi + + current_version="$( + awk ' + /^ darwin = stdenvNoCC.mkDerivation/ { in_block=1 } + in_block && /version = "/ { + match($0, /version = "([^"]+)"/, arr) + print arr[1] + exit + } + in_block && /^ \};/ { exit } + ' "$DEFAULT_NIX" + )" + + echo "$version" "$current_version" "$uuid" "$final_url" +} + +update_linux() { + local version_info + local version + local current_version + local download_url + local new_hash + + read -ra version_info <<< "$(get_linux_version_info)" + + version="${version_info[0]}" + current_version="${version_info[1]}" + download_url="${version_info[2]}" + + if [[ "$current_version" = "$version" ]]; then + echo "[Nix] Linux microsoft-edge: same version" + return 0 + fi + + new_hash="$( + nix --extra-experimental-features nix-command \ + hash convert \ + --hash-algo sha256 \ + --to sri \ + "$(nix-prefetch-url "$download_url" 2>/dev/null)" + )" + + sed -i \ + "/^ linux = stdenvNoCC.mkDerivation/,/^ });/s/version = \".*\"/version = \"$version\"/" \ + "$DEFAULT_NIX" + + sed -i \ + "/^ linux = stdenvNoCC.mkDerivation/,/^ });/s|hash = \".*\"|hash = \"$new_hash\"|" \ + "$DEFAULT_NIX" + + echo "[Nix] Linux microsoft-edge: $current_version -> $version with hash $new_hash" + +} + +update_darwin() { + local version_info + local version + local current_version + local uuid + local url + local new_hash + + read -ra version_info <<< "$(get_darwin_version_info)" + + version="${version_info[0]}" + current_version="${version_info[1]}" + uuid="${version_info[2]}" + url="${version_info[3]}" + + if [[ "$current_version" = "$version" ]]; then + echo "[Nix] Darwin microsoft-edge: same version" + return 0 + fi + + new_hash="$( + nix --extra-experimental-features nix-command \ + hash convert \ + --hash-algo sha256 \ + --to sri \ + "$(nix-prefetch-url "$url" 2>/dev/null)" + )" + + sed -i \ + "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s/version = \".*\"/version = \"$version\"/" \ + "$DEFAULT_NIX" + + sed -i \ + "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s|uuid = \".*\"|uuid = \"$uuid\"|" \ + "$DEFAULT_NIX" + + sed -i \ + "/^ darwin = stdenvNoCC.mkDerivation/,/^ });/s|hash = \".*\"|hash = \"$new_hash\"|" \ + "$DEFAULT_NIX" + + echo "[Nix] Darwin microsoft-edge: $current_version -> $version with hash $new_hash" +} + +update_msedgedriver() { + local version="$1" + local current_version + local new_hash + local driver_arch + local url + + current_version="$( + awk ' + /pname = "msedgedriver";/ { in_block=1 } + in_block && /version = "/ { + match($0, /version = "([^"]+)"/, arr) + print arr[1] + exit + } + ' "$DRIVER_NIX" + )" + + if [[ "$current_version" = "$version" ]]; then + echo "[Nix] msedgedriver: same version" + return 0 + fi + + # All supported driver archives use the Linux Edge version. + # The archive names correspond to the driverArch mapping in + # msedgedriver/package.nix + declare -A hashes=( + [mac64_m1]="" + [mac64]="" + [linux64]="" + ) + + for driver_arch in mac64_m1 mac64 linux64; do + url="https://msedgedriver.microsoft.com/${version}/edgedriver_${driver_arch}.zip" + + new_hash="$( + nix --extra-experimental-features nix-command \ + hash convert \ + --hash-algo sha256 \ + --to sri \ + "$(nix-prefetch-url --unpack "$url" 2>/dev/null)" + )" + + hashes["$driver_arch"]="$new_hash" + + echo "[Nix] msedgedriver ${driver_arch}: $new_hash" + done + + sed -i \ + "/pname = \"msedgedriver\";/,/^ meta = {/s/version = \".*\"/version = \"$version\"/" \ + "$DRIVER_NIX" + + for driver_arch in mac64_m1 mac64 linux64; do + sed -i \ + "/pname = \"msedgedriver\";/,/^ meta = {/s|${driver_arch} = \".*\"|${driver_arch} = \"${hashes[$driver_arch]}\"|" \ + "$DRIVER_NIX" + done + + echo "[Nix] msedgedriver: $current_version -> $version" +} + +update_linux +update_darwin + +# Linux is the canonical platform for the shared msedgedriver version +linux_version_info="$(get_linux_version_info)" +read -r linux_version _ _ <<< "$linux_version_info" + +update_msedgedriver "$linux_version" diff --git a/pkgs/by-name/ms/msedgedriver/package.nix b/pkgs/by-name/ms/msedgedriver/package.nix index 376901f228c5..cd1fadbe6dd9 100644 --- a/pkgs/by-name/ms/msedgedriver/package.nix +++ b/pkgs/by-name/ms/msedgedriver/package.nix @@ -19,6 +19,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { driverArch = { aarch64-darwin = "mac64_m1"; + x86_64-darwin = "mac64"; x86_64-linux = "linux64"; } .${stdenvNoCC.hostPlatform.system}; @@ -28,6 +29,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { hash = { mac64_m1 = "sha256-6nwe/vRPh5MkQLTiZNXepfFsLtILwoK925mgLCUUVNg="; + mac64 = "sha256-p/cnNKQub6sSEWPz2fJ+FoU7rgzeoZQMkv3PphvvHLw="; linux64 = "sha256-XbOQl9FyckF3Qybb+40474ImJDKahBkekPoydf/TxV0="; } .${driverArch};