From ee546cfe11c6909f4c92753be336f692f26c83e5 Mon Sep 17 00:00:00 2001 From: Rhys Davies Date: Mon, 21 Oct 2024 21:31:32 +1300 Subject: [PATCH 1/4] microsoft-edge: Remove beta and dev versions --- .../browsers/microsoft-edge/browser.nix | 197 ---------------- .../browsers/microsoft-edge/default.nix | 211 ++++++++++++++++-- .../browsers/microsoft-edge/update.py | 36 +-- pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 200 insertions(+), 248 deletions(-) delete mode 100644 pkgs/applications/networking/browsers/microsoft-edge/browser.nix diff --git a/pkgs/applications/networking/browsers/microsoft-edge/browser.nix b/pkgs/applications/networking/browsers/microsoft-edge/browser.nix deleted file mode 100644 index 71791ac71180..000000000000 --- a/pkgs/applications/networking/browsers/microsoft-edge/browser.nix +++ /dev/null @@ -1,197 +0,0 @@ -{ 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 ]; - }; -} diff --git a/pkgs/applications/networking/browsers/microsoft-edge/default.nix b/pkgs/applications/networking/browsers/microsoft-edge/default.nix index 5721c6e616b9..a4ed52e16cff 100644 --- a/pkgs/applications/networking/browsers/microsoft-edge/default.nix +++ b/pkgs/applications/networking/browsers/microsoft-edge/default.nix @@ -1,20 +1,197 @@ -{ - 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"; +{ 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"; + + channel = "stable"; + + 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}"; + version = "129.0.2792.65"; + + src = fetchurl { + url = "https://packages.microsoft.com/repos/edge/pool/main/m/${baseName}-${channel}/${baseName}-${channel}_${version}-1_amd64.deb"; hash = "sha256-xuCtHptE2CG4aiY7gu2sWW3Km4qfB0E/L/PBACIaKOc="; }; + + 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 ]; + }; } diff --git a/pkgs/applications/networking/browsers/microsoft-edge/update.py b/pkgs/applications/networking/browsers/microsoft-edge/update.py index 724a83d09d54..c9a048d504c8 100755 --- a/pkgs/applications/networking/browsers/microsoft-edge/update.py +++ b/pkgs/applications/networking/browsers/microsoft-edge/update.py @@ -1,8 +1,9 @@ #! /usr/bin/env nix-shell -#! nix-shell -i python3 -p python3Packages.packaging python3Packages.debian +#! 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 @@ -22,7 +23,7 @@ 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-'): + if not name.startswith('microsoft-edge-stable'): continue channel = name.replace('microsoft-edge-', '') if channel not in latest_packages: @@ -34,37 +35,10 @@ def latest_packages(packages: bytes): 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) + version = Version.re_valid_version.match(latest['stable']['Version']).group('upstream_version') + os.system(f'update-source-version microsoft-edge "{version}"') write_expression() diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5e0f332c6b79..0fb368cc55cf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21993,9 +21993,7 @@ with pkgs; 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 { }; + microsoft-edge = callPackage ../applications/networking/browsers/microsoft-edge { }; micronucleus = callPackage ../development/tools/misc/micronucleus { }; From 5954aeeacaf77714487d412470748f7edb638024 Mon Sep 17 00:00:00 2001 From: Rhys Davies Date: Mon, 21 Oct 2024 21:34:45 +1300 Subject: [PATCH 2/4] microsoft-edge: move to by-name --- .../default.nix => by-name/mi/microsoft-edge/package.nix} | 0 .../networking/browsers => by-name/mi}/microsoft-edge/update.py | 0 pkgs/top-level/all-packages.nix | 2 -- 3 files changed, 2 deletions(-) rename pkgs/{applications/networking/browsers/microsoft-edge/default.nix => by-name/mi/microsoft-edge/package.nix} (100%) rename pkgs/{applications/networking/browsers => by-name/mi}/microsoft-edge/update.py (100%) diff --git a/pkgs/applications/networking/browsers/microsoft-edge/default.nix b/pkgs/by-name/mi/microsoft-edge/package.nix similarity index 100% rename from pkgs/applications/networking/browsers/microsoft-edge/default.nix rename to pkgs/by-name/mi/microsoft-edge/package.nix diff --git a/pkgs/applications/networking/browsers/microsoft-edge/update.py b/pkgs/by-name/mi/microsoft-edge/update.py similarity index 100% rename from pkgs/applications/networking/browsers/microsoft-edge/update.py rename to pkgs/by-name/mi/microsoft-edge/update.py diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0fb368cc55cf..a533b203d0f4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21993,8 +21993,6 @@ with pkgs; microsoft-gsl = callPackage ../development/libraries/microsoft-gsl { }; - microsoft-edge = callPackage ../applications/networking/browsers/microsoft-edge { }; - micronucleus = callPackage ../development/tools/misc/micronucleus { }; markdown-anki-decks = callPackage ../tools/misc/markdown-anki-decks { }; From a84b92950926874954e6026b22927d23a4d59a80 Mon Sep 17 00:00:00 2001 From: Rhys Davies Date: Fri, 11 Oct 2024 16:31:21 +1300 Subject: [PATCH 3/4] microsoft-edge: Mirror google-chrome derivation --- pkgs/by-name/mi/microsoft-edge/package.nix | 408 +++++++++++++-------- 1 file changed, 249 insertions(+), 159 deletions(-) diff --git a/pkgs/by-name/mi/microsoft-edge/package.nix b/pkgs/by-name/mi/microsoft-edge/package.nix index a4ed52e16cff..ba4d26c18b8c 100644 --- a/pkgs/by-name/mi/microsoft-edge/package.nix +++ b/pkgs/by-name/mi/microsoft-edge/package.nix @@ -1,197 +1,287 @@ -{ stdenv -, fetchurl -, lib -, makeWrapper +{ + fetchurl, + lib, + makeWrapper, + patchelf, + stdenv, -, binutils-unwrapped -, xz -, gnutar -, file + # 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 -, 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 programs + coreutils, -# command line arguments which are always set e.g "--disable-gpu" -, commandLineArgs ? "" + # 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 - baseName = "microsoft-edge"; + opusWithCustomModes = libopus.override { withCustomModes = true; }; - channel = "stable"; - - 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}"; + 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 rec { - pname="${baseName}-${channel}"; +stdenv.mkDerivation (finalAttrs: { + pname = "microsoft-edge"; version = "129.0.2792.65"; src = fetchurl { - url = "https://packages.microsoft.com/repos/edge/pool/main/m/${baseName}-${channel}/${baseName}-${channel}_${version}-1_amd64.deb"; + url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_${finalAttrs.version}-1_amd64.deb"; hash = "sha256-xuCtHptE2CG4aiY7gu2sWW3Km4qfB0E/L/PBACIaKOc="; }; + # With strictDeps on, some shebangs were not being patched correctly + # ie, $out/share/microsoft/msedge/microsoft-edge + strictDeps = false; + nativeBuildInputs = [ makeWrapper + patchelf ]; - unpackCmd = "${binutils-unwrapped}/bin/ar p $src data.tar.xz | ${xz}/bin/xz -dc | ${gnutar}/bin/tar -xf -"; - sourceRoot = "."; + buildInputs = [ + # needed for XDG_ICON_DIRS + adwaita-icon-theme + glib + gtk3 + gtk4 + # needed for GSETTINGS_SCHEMAS_PATH + gsettings-desktop-schemas + ]; - 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 + 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 = '' - mkdir -p $out - cp -R opt usr/bin usr/share $out + runHook preInstall - ${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}"} + appname=msedge + dist=stable - ln -sf $out/opt/microsoft/${shortName}/${longName} $out/bin/${longName} + exe=$out/bin/microsoft-edge - rm -rf $out/share/doc - rm -rf $out/opt/microsoft/${shortName}/cron + mkdir -p $out/bin $out/share + cp -v -a opt/* $out/share + cp -v -a usr/share/* $out/share - 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 + # 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 - 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}" \ + # "--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 ''; - # 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; }; + passthru.updateScript = ./update.py; - meta = with lib; { - homepage = "https://www.microsoft.com/en-us/edge"; + meta = { + changelog = "https://learn.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel"; description = "Web browser from Microsoft"; - license = licenses.unfree; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + 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" ]; - maintainers = with maintainers; [ zanculmarktum kuwii rhysmdnz ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; }; -} +}) From a0dfcc7f116747665ee8529c3c352473cb5956a6 Mon Sep 17 00:00:00 2001 From: Rhys Davies Date: Mon, 21 Oct 2024 21:24:07 +1300 Subject: [PATCH 4/4] microsoft-edge: 129.0.2792.65 -> 130.0.2849.46 --- pkgs/by-name/mi/microsoft-edge/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/mi/microsoft-edge/package.nix b/pkgs/by-name/mi/microsoft-edge/package.nix index ba4d26c18b8c..dff0183db0ab 100644 --- a/pkgs/by-name/mi/microsoft-edge/package.nix +++ b/pkgs/by-name/mi/microsoft-edge/package.nix @@ -168,11 +168,11 @@ in stdenv.mkDerivation (finalAttrs: { pname = "microsoft-edge"; - version = "129.0.2792.65"; + 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-xuCtHptE2CG4aiY7gu2sWW3Km4qfB0E/L/PBACIaKOc="; + hash = "sha256-QschcHSDoYakjf4oYXIc40SyniCufNmjHJPuvRazdSw="; }; # With strictDeps on, some shebangs were not being patched correctly