nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
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}