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