From 522ba9ed110e703c71a61fd0747656162f433839 Mon Sep 17 00:00:00 2001 From: rewine Date: Sat, 31 May 2025 10:59:41 +0800 Subject: [PATCH 1/2] vivaldi: re-init at 7.4.3684.43 --- pkgs/by-name/vi/vivaldi/package.nix | 251 ++++++++++++++++++++++ pkgs/by-name/vi/vivaldi/update-vivaldi.sh | 15 ++ pkgs/top-level/aliases.nix | 1 - 3 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 pkgs/by-name/vi/vivaldi/package.nix create mode 100755 pkgs/by-name/vi/vivaldi/update-vivaldi.sh diff --git a/pkgs/by-name/vi/vivaldi/package.nix b/pkgs/by-name/vi/vivaldi/package.nix new file mode 100644 index 000000000000..a81ca5c5f2f8 --- /dev/null +++ b/pkgs/by-name/vi/vivaldi/package.nix @@ -0,0 +1,251 @@ +{ + lib, + stdenv, + coreutils, + fetchurl, + zlib, + libX11, + libXext, + libSM, + libICE, + libxkbcommon, + libxshmfence, + libXfixes, + libXt, + libXi, + libXcursor, + libXScrnSaver, + libXcomposite, + libXdamage, + libXtst, + libXrandr, + alsa-lib, + dbus, + cups, + libexif, + ffmpeg, + systemd, + libva, + libGL, + freetype, + fontconfig, + libXft, + libXrender, + libxcb, + expat, + libuuid, + libxml2, + glib, + gtk3, + pango, + gdk-pixbuf, + cairo, + atk, + at-spi2-atk, + at-spi2-core, + qt5, + libdrm, + libgbm, + vulkan-loader, + nss, + nspr, + patchelf, + makeWrapper, + wayland, + pipewire, + isSnapshot ? false, + proprietaryCodecs ? false, + vivaldi-ffmpeg-codecs ? null, + enableWidevine ? false, + widevine-cdm ? null, + commandLineArgs ? "", + pulseSupport ? stdenv.hostPlatform.isLinux, + libpulseaudio, + kerberosSupport ? true, + libkrb5, +}: + +let + branch = if isSnapshot then "snapshot" else "stable"; + vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi"; +in +stdenv.mkDerivation rec { + pname = "vivaldi"; + version = "7.4.3684.43"; + + suffix = + { + aarch64-linux = "arm64"; + x86_64-linux = "amd64"; + } + .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + + src = fetchurl { + url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}-1_${suffix}.deb"; + hash = + { + aarch64-linux = "sha256-/Zmxwm65HjIL/JdWJtvcgxk4Bj4VcTXr/px6eCJHy0I="; + x86_64-linux = "sha256-tDGoew5jEOqoHIHSvoOsBcuEzq817YT0pFSO3Li48OU="; + } + .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + }; + + unpackPhase = '' + ar vx $src + tar -xvf data.tar.xz + ''; + + nativeBuildInputs = [ + patchelf + makeWrapper + qt5.wrapQtAppsHook + ]; + + dontWrapQtApps = true; + + buildInputs = + [ + stdenv.cc.cc + stdenv.cc.libc + zlib + libX11 + libXt + libXext + libSM + libICE + libxcb + libxkbcommon + libxshmfence + libXi + libXft + libXcursor + libXfixes + libXScrnSaver + libXcomposite + libXdamage + libXtst + libXrandr + atk + at-spi2-atk + at-spi2-core + alsa-lib + dbus + cups + gtk3 + gdk-pixbuf + libexif + ffmpeg + systemd + libva + qt5.qtbase + qt5.qtwayland + freetype + fontconfig + libXrender + libuuid + expat + glib + nss + nspr + libGL + libxml2 + pango + cairo + libdrm + libgbm + vulkan-loader + wayland + pipewire + ] + ++ lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs + ++ lib.optional pulseSupport libpulseaudio + ++ lib.optional kerberosSupport libkrb5; + + libPath = + lib.makeLibraryPath buildInputs + + lib.optionalString (stdenv.hostPlatform.is64bit) ( + ":" + lib.makeSearchPathOutput "lib" "lib64" buildInputs + ) + + ":$out/opt/${vivaldiName}/lib"; + + buildPhase = + '' + runHook preBuild + echo "Patching Vivaldi binaries" + for f in chrome_crashpad_handler vivaldi-bin vivaldi-sandbox ; do + patchelf \ + --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath "${libPath}" \ + opt/${vivaldiName}/$f + done + + for f in libGLESv2.so libqt5_shim.so ; do + patchelf --set-rpath "${libPath}" opt/${vivaldiName}/$f + done + '' + + lib.optionalString proprietaryCodecs '' + ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/${vivaldiName}/libffmpeg.so.''${version%\.*\.*} + '' + + '' + echo "Finished patching Vivaldi binaries" + runHook postBuild + ''; + + dontPatchELF = true; + dontStrip = true; + + installPhase = + '' + runHook preInstall + mkdir -p "$out" + cp -r opt "$out" + mkdir "$out/bin" + ln -s "$out/opt/${vivaldiName}/${vivaldiName}" "$out/bin/vivaldi" + mkdir -p "$out/share" + cp -r usr/share/{applications,xfce4} "$out"/share + substituteInPlace "$out"/share/applications/*.desktop \ + --replace /usr/bin/${vivaldiName} "$out"/bin/vivaldi + substituteInPlace "$out"/share/applications/*.desktop \ + --replace vivaldi-stable vivaldi + local d + for d in 16 22 24 32 48 64 128 256; do + mkdir -p "$out"/share/icons/hicolor/''${d}x''${d}/apps + ln -s \ + "$out"/opt/${vivaldiName}/product_logo_''${d}.png \ + "$out"/share/icons/hicolor/''${d}x''${d}/apps/vivaldi.png + done + wrapProgram "$out/bin/vivaldi" \ + --add-flags ${lib.escapeShellArg commandLineArgs} \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ + --set-default FONTCONFIG_FILE "${fontconfig.out}/etc/fonts/fonts.conf" \ + --set-default FONTCONFIG_PATH "${fontconfig.out}/etc/fonts" \ + --suffix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \ + --prefix PATH : ${coreutils}/bin \ + ''${qtWrapperArgs[@]} \ + ${lib.optionalString enableWidevine "--suffix LD_LIBRARY_PATH : ${libPath}"} + '' + + lib.optionalString enableWidevine '' + ln -sf ${widevine-cdm}/share/google/chrome/WidevineCdm $out/opt/${vivaldiName}/WidevineCdm + '' + + '' + runHook postInstall + ''; + + passthru.updateScript = ./update-vivaldi.sh; + + meta = with lib; { + description = "Browser for our Friends, powerful and personal"; + homepage = "https://vivaldi.com"; + license = licenses.unfree; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + mainProgram = "vivaldi"; + maintainers = with maintainers; [ + otwieracz + badmutex + ]; + platforms = [ + "x86_64-linux" + "aarch64-linux" + ]; + }; +} diff --git a/pkgs/by-name/vi/vivaldi/update-vivaldi.sh b/pkgs/by-name/vi/vivaldi/update-vivaldi.sh new file mode 100755 index 000000000000..994257889ee6 --- /dev/null +++ b/pkgs/by-name/vi/vivaldi/update-vivaldi.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl common-updater-scripts + +set -eu -o pipefail + +version=$(curl -sS https://vivaldi.com/download/ | sed -rne 's/.*vivaldi-stable_([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-1_amd64\.deb.*/\1/p') + +update_hash() { + url="https://downloads.vivaldi.com/stable/vivaldi-stable_$version-1_$2.deb" + hash=$(nix hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "$url")) + update-source-version vivaldi "$version" "$hash" --system=$1 --ignore-same-version +} + +update_hash aarch64-linux arm64 +update_hash x86_64-linux amd64 diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index c81c29b7a3b1..3dc1f0840540 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -2005,7 +2005,6 @@ mapAliases { vistafonts = vista-fonts; # Added 2025-02-03 vistafonts-chs = vista-fonts-chs; # Added 2025-02-03 vistafonts-cht = vista-fonts-cht; # Added 2025-02-03 - vivaldi = throw "'vivaldi' has been removed due to lack of maintenance in nixpkgs"; # Added 2025-05-29 vkBasalt = vkbasalt; # Added 2022-11-22 vkdt-wayland = vkdt; # Added 2024-04-19 vocal = throw "'vocal' has been archived upstream. Consider using 'gnome-podcasts' or 'kasts' instead."; # Added 2025-04-12 From 6dae4461e9f3260a0a958d1e350f2b3a059a384a Mon Sep 17 00:00:00 2001 From: rewine Date: Sat, 31 May 2025 12:48:35 +0800 Subject: [PATCH 2/2] vivaldi: clear up - Replaced qt5 with qt6 as dependency - Removed isSnapshot option, only stable branch is built - Updated build inputs and patching for qt6 - Adjusted wrapper setup and environment variables - Updated maintainer in meta --- pkgs/by-name/vi/vivaldi/package.nix | 57 ++++++++++++----------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/pkgs/by-name/vi/vivaldi/package.nix b/pkgs/by-name/vi/vivaldi/package.nix index a81ca5c5f2f8..f87840e7afe7 100644 --- a/pkgs/by-name/vi/vivaldi/package.nix +++ b/pkgs/by-name/vi/vivaldi/package.nix @@ -43,7 +43,7 @@ atk, at-spi2-atk, at-spi2-core, - qt5, + qt6, libdrm, libgbm, vulkan-loader, @@ -53,7 +53,6 @@ makeWrapper, wayland, pipewire, - isSnapshot ? false, proprietaryCodecs ? false, vivaldi-ffmpeg-codecs ? null, enableWidevine ? false, @@ -65,10 +64,6 @@ libkrb5, }: -let - branch = if isSnapshot then "snapshot" else "stable"; - vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi"; -in stdenv.mkDerivation rec { pname = "vivaldi"; version = "7.4.3684.43"; @@ -81,7 +76,7 @@ stdenv.mkDerivation rec { .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); src = fetchurl { - url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}-1_${suffix}.deb"; + url = "https://downloads.vivaldi.com/stable/vivaldi-stable_${version}-1_${suffix}.deb"; hash = { aarch64-linux = "sha256-/Zmxwm65HjIL/JdWJtvcgxk4Bj4VcTXr/px6eCJHy0I="; @@ -91,14 +86,16 @@ stdenv.mkDerivation rec { }; unpackPhase = '' + runHook preUnpack ar vx $src tar -xvf data.tar.xz + runHook postUnpack ''; nativeBuildInputs = [ patchelf makeWrapper - qt5.wrapQtAppsHook + qt6.wrapQtAppsHook ]; dontWrapQtApps = true; @@ -137,8 +134,8 @@ stdenv.mkDerivation rec { ffmpeg systemd libva - qt5.qtbase - qt5.qtwayland + qt6.qtbase + qt6.qtwayland freetype fontconfig libXrender @@ -166,7 +163,7 @@ stdenv.mkDerivation rec { + lib.optionalString (stdenv.hostPlatform.is64bit) ( ":" + lib.makeSearchPathOutput "lib" "lib64" buildInputs ) - + ":$out/opt/${vivaldiName}/lib"; + + ":$out/opt/vivaldi/lib"; buildPhase = '' @@ -176,15 +173,15 @@ stdenv.mkDerivation rec { patchelf \ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ --set-rpath "${libPath}" \ - opt/${vivaldiName}/$f + opt/vivaldi/$f done - for f in libGLESv2.so libqt5_shim.so ; do - patchelf --set-rpath "${libPath}" opt/${vivaldiName}/$f + for f in libGLESv2.so libqt5_shim.so libqt6_shim.so; do + patchelf --set-rpath "${libPath}" opt/vivaldi/$f done '' + lib.optionalString proprietaryCodecs '' - ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/${vivaldiName}/libffmpeg.so.''${version%\.*\.*} + ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/vivaldi/libffmpeg.so.''${version%\.*\.*} '' + '' echo "Finished patching Vivaldi binaries" @@ -200,32 +197,29 @@ stdenv.mkDerivation rec { mkdir -p "$out" cp -r opt "$out" mkdir "$out/bin" - ln -s "$out/opt/${vivaldiName}/${vivaldiName}" "$out/bin/vivaldi" + ln -s "$out/opt/vivaldi/vivaldi" "$out/bin/vivaldi" mkdir -p "$out/share" cp -r usr/share/{applications,xfce4} "$out"/share substituteInPlace "$out"/share/applications/*.desktop \ - --replace /usr/bin/${vivaldiName} "$out"/bin/vivaldi + --replace-fail /usr/bin/vivaldi "$out"/bin/vivaldi substituteInPlace "$out"/share/applications/*.desktop \ - --replace vivaldi-stable vivaldi + --replace-fail vivaldi-stable vivaldi local d for d in 16 22 24 32 48 64 128 256; do mkdir -p "$out"/share/icons/hicolor/''${d}x''${d}/apps ln -s \ - "$out"/opt/${vivaldiName}/product_logo_''${d}.png \ + "$out"/opt/vivaldi/product_logo_''${d}.png \ "$out"/share/icons/hicolor/''${d}x''${d}/apps/vivaldi.png done wrapProgram "$out/bin/vivaldi" \ --add-flags ${lib.escapeShellArg commandLineArgs} \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ - --set-default FONTCONFIG_FILE "${fontconfig.out}/etc/fonts/fonts.conf" \ - --set-default FONTCONFIG_PATH "${fontconfig.out}/etc/fonts" \ - --suffix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \ + --prefix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \ + --prefix LD_LIBRARY_PATH : ${libPath} \ --prefix PATH : ${coreutils}/bin \ - ''${qtWrapperArgs[@]} \ - ${lib.optionalString enableWidevine "--suffix LD_LIBRARY_PATH : ${libPath}"} + ''${qtWrapperArgs[@]} '' + lib.optionalString enableWidevine '' - ln -sf ${widevine-cdm}/share/google/chrome/WidevineCdm $out/opt/${vivaldiName}/WidevineCdm + ln -sf ${widevine-cdm}/share/google/chrome/WidevineCdm $out/opt/vivaldi/WidevineCdm '' + '' runHook postInstall @@ -233,16 +227,13 @@ stdenv.mkDerivation rec { passthru.updateScript = ./update-vivaldi.sh; - meta = with lib; { + meta = { description = "Browser for our Friends, powerful and personal"; homepage = "https://vivaldi.com"; - license = licenses.unfree; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + license = lib.licenses.unfree; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; mainProgram = "vivaldi"; - maintainers = with maintainers; [ - otwieracz - badmutex - ]; + maintainers = with lib.maintainers; [ rewine ]; platforms = [ "x86_64-linux" "aarch64-linux"