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 deleted file mode 100644 index 5721c6e616b9..000000000000 --- a/pkgs/applications/networking/browsers/microsoft-edge/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - 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="; - }; -} diff --git a/pkgs/by-name/mi/microsoft-edge/package.nix b/pkgs/by-name/mi/microsoft-edge/package.nix new file mode 100644 index 000000000000..dff0183db0ab --- /dev/null +++ b/pkgs/by-name/mi/microsoft-edge/package.nix @@ -0,0 +1,287 @@ +{ + 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 ]; + }; +}) diff --git a/pkgs/applications/networking/browsers/microsoft-edge/update.py b/pkgs/by-name/mi/microsoft-edge/update.py similarity index 53% rename from pkgs/applications/networking/browsers/microsoft-edge/update.py rename to pkgs/by-name/mi/microsoft-edge/update.py index 724a83d09d54..c9a048d504c8 100755 --- a/pkgs/applications/networking/browsers/microsoft-edge/update.py +++ b/pkgs/by-name/mi/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 c64bfa6a756a..d66ad450ec82 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21910,10 +21910,6 @@ 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 { }; - micronucleus = callPackage ../development/tools/misc/micronucleus { }; markdown-anki-decks = callPackage ../tools/misc/markdown-anki-decks { };