nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 243 lines 5.1 kB view raw
1{ 2 lib, 3 stdenv, 4 coreutils, 5 fetchurl, 6 zlib, 7 libX11, 8 libXext, 9 libSM, 10 libICE, 11 libxkbcommon, 12 libxshmfence, 13 libXfixes, 14 libXt, 15 libXi, 16 libXcursor, 17 libXScrnSaver, 18 libXcomposite, 19 libXdamage, 20 libXtst, 21 libXrandr, 22 alsa-lib, 23 dbus, 24 cups, 25 libexif, 26 ffmpeg, 27 systemd, 28 libva, 29 libGL, 30 freetype, 31 fontconfig, 32 libXft, 33 libXrender, 34 libxcb, 35 expat, 36 libuuid, 37 libxml2, 38 glib, 39 gtk3, 40 pango, 41 gdk-pixbuf, 42 cairo, 43 atk, 44 at-spi2-atk, 45 at-spi2-core, 46 qt6, 47 libdrm, 48 libgbm, 49 vulkan-loader, 50 nss, 51 nspr, 52 patchelf, 53 makeWrapper, 54 wayland, 55 pipewire, 56 proprietaryCodecs ? false, 57 vivaldi-ffmpeg-codecs ? null, 58 enableWidevine ? false, 59 widevine-cdm ? null, 60 commandLineArgs ? "", 61 pulseSupport ? stdenv.hostPlatform.isLinux, 62 libpulseaudio, 63 kerberosSupport ? true, 64 libkrb5, 65}: 66 67stdenv.mkDerivation rec { 68 pname = "vivaldi"; 69 version = "7.5.3735.56"; 70 71 suffix = 72 { 73 aarch64-linux = "arm64"; 74 x86_64-linux = "amd64"; 75 } 76 .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); 77 78 src = fetchurl { 79 url = "https://downloads.vivaldi.com/stable/vivaldi-stable_${version}-1_${suffix}.deb"; 80 hash = 81 { 82 aarch64-linux = "sha256-bHOmd5+YtSd8ZupIPOlPtTIJ5OrDcDMQSk6xq2Y811M="; 83 x86_64-linux = "sha256-yFaHtPTYAK/dOOTyWN8tDs7XJX93mg4OCt8dPd3ScJ8="; 84 } 85 .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); 86 }; 87 88 unpackPhase = '' 89 runHook preUnpack 90 ar vx $src 91 tar -xvf data.tar.xz 92 runHook postUnpack 93 ''; 94 95 nativeBuildInputs = [ 96 patchelf 97 makeWrapper 98 qt6.wrapQtAppsHook 99 ]; 100 101 dontWrapQtApps = true; 102 103 buildInputs = [ 104 stdenv.cc.cc 105 stdenv.cc.libc 106 zlib 107 libX11 108 libXt 109 libXext 110 libSM 111 libICE 112 libxcb 113 libxkbcommon 114 libxshmfence 115 libXi 116 libXft 117 libXcursor 118 libXfixes 119 libXScrnSaver 120 libXcomposite 121 libXdamage 122 libXtst 123 libXrandr 124 atk 125 at-spi2-atk 126 at-spi2-core 127 alsa-lib 128 dbus 129 cups 130 gtk3 131 gdk-pixbuf 132 libexif 133 ffmpeg 134 systemd 135 libva 136 qt6.qtbase 137 qt6.qtwayland 138 freetype 139 fontconfig 140 libXrender 141 libuuid 142 expat 143 glib 144 nss 145 nspr 146 libGL 147 libxml2 148 pango 149 cairo 150 libdrm 151 libgbm 152 vulkan-loader 153 wayland 154 pipewire 155 ] 156 ++ lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs 157 ++ lib.optional pulseSupport libpulseaudio 158 ++ lib.optional kerberosSupport libkrb5; 159 160 libPath = 161 lib.makeLibraryPath buildInputs 162 + lib.optionalString (stdenv.hostPlatform.is64bit) ( 163 ":" + lib.makeSearchPathOutput "lib" "lib64" buildInputs 164 ) 165 + ":$out/opt/vivaldi/lib"; 166 167 buildPhase = '' 168 runHook preBuild 169 echo "Patching Vivaldi binaries" 170 for f in chrome_crashpad_handler vivaldi-bin vivaldi-sandbox ; do 171 patchelf \ 172 --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ 173 --set-rpath "${libPath}" \ 174 opt/vivaldi/$f 175 done 176 177 for f in libGLESv2.so libqt5_shim.so libqt6_shim.so; do 178 patchelf --set-rpath "${libPath}" opt/vivaldi/$f 179 done 180 '' 181 + lib.optionalString proprietaryCodecs '' 182 ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/vivaldi/libffmpeg.so.''${version%\.*\.*} 183 '' 184 + '' 185 echo "Finished patching Vivaldi binaries" 186 runHook postBuild 187 ''; 188 189 dontPatchELF = true; 190 dontStrip = true; 191 192 installPhase = '' 193 runHook preInstall 194 mkdir -p "$out" 195 cp -r opt "$out" 196 mkdir "$out/bin" 197 ln -s "$out/opt/vivaldi/vivaldi" "$out/bin/vivaldi" 198 mkdir -p "$out/share" 199 cp -r usr/share/{applications,xfce4} "$out"/share 200 substituteInPlace "$out"/share/applications/*.desktop \ 201 --replace-fail /usr/bin/vivaldi "$out"/bin/vivaldi 202 substituteInPlace "$out"/share/applications/*.desktop \ 203 --replace-fail vivaldi-stable vivaldi 204 local d 205 for d in 16 22 24 32 48 64 128 256; do 206 mkdir -p "$out"/share/icons/hicolor/''${d}x''${d}/apps 207 ln -s \ 208 "$out"/opt/vivaldi/product_logo_''${d}.png \ 209 "$out"/share/icons/hicolor/''${d}x''${d}/apps/vivaldi.png 210 done 211 wrapProgram "$out/bin/vivaldi" \ 212 --add-flags ${lib.escapeShellArg commandLineArgs} \ 213 --prefix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \ 214 --prefix LD_LIBRARY_PATH : ${libPath} \ 215 --prefix PATH : ${coreutils}/bin \ 216 ''${qtWrapperArgs[@]} 217 '' 218 + lib.optionalString enableWidevine '' 219 ln -sf ${widevine-cdm}/share/google/chrome/WidevineCdm $out/opt/vivaldi/WidevineCdm 220 '' 221 + '' 222 runHook postInstall 223 ''; 224 225 passthru.updateScript = ./update-vivaldi.sh; 226 227 meta = { 228 description = "Browser for our Friends, powerful and personal"; 229 homepage = "https://vivaldi.com"; 230 license = lib.licenses.unfree; 231 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 232 mainProgram = "vivaldi"; 233 maintainers = with lib.maintainers; [ 234 marcusramberg 235 max06 236 rewine 237 ]; 238 platforms = [ 239 "x86_64-linux" 240 "aarch64-linux" 241 ]; 242 }; 243}