1{ alsa-lib
2, at-spi2-core
3, atk
4, autoPatchelfHook
5, buildEnv
6, cairo
7, cups
8, dbus
9, expat
10, fetchurl
11, ffmpeg
12, fontconfig
13, freetype
14, gdk-pixbuf
15, glib
16, gtk3
17, lib
18, libcap
19, libdrm
20, libGL
21, libnotify
22, libuuid
23, libxcb
24, libxkbcommon
25, makeWrapper
26, mesa
27, nspr
28, nss
29, pango
30, sdk ? false
31, sqlite
32, stdenv
33, systemd
34, udev
35, wrapGAppsHook3
36, xorg
37}:
38
39let
40 bits = if stdenv.hostPlatform.system == "x86_64-linux" then "x64" else "ia32";
41
42 nwEnv = buildEnv {
43 name = "nwjs-env";
44 paths = [
45 alsa-lib
46 at-spi2-core
47 atk
48 cairo
49 cups
50 dbus
51 expat
52 fontconfig
53 freetype
54 gdk-pixbuf
55 glib
56 gtk3
57 libcap
58 libdrm
59 libGL
60 libnotify
61 libxkbcommon
62 mesa
63 nspr
64 nss
65 pango
66 xorg.libX11
67 xorg.libXScrnSaver
68 xorg.libXcomposite
69 xorg.libXcursor
70 xorg.libXdamage
71 xorg.libXext
72 xorg.libXfixes
73 xorg.libXi
74 xorg.libXrandr
75 xorg.libXrender
76 xorg.libXtst
77 xorg.libxshmfence
78 # libnw-specific (not chromium dependencies)
79 ffmpeg
80 libxcb
81 # chromium runtime deps (dlopen’d)
82 libuuid
83 sqlite
84 udev
85 ];
86
87 extraOutputsToInstall = [ "lib" "out" ];
88 };
89
90 version = "0.89.0";
91in
92stdenv.mkDerivation {
93 pname = "nwjs";
94 inherit version;
95
96 src =
97 let flavor = if sdk then "sdk-" else "";
98 in fetchurl {
99 url = "https://dl.nwjs.io/v${version}/nwjs-${flavor}v${version}-linux-${bits}.tar.gz";
100 hash = {
101 "sdk-ia32" = "sha256-gHZLxZRborfbwmblKQrgr6tf+Rwt1YqxrGELAHPM0so=";
102 "sdk-x64" = "sha256-NOQGS3jEdZumTwCmi0DUtnGlOaSAZi2rGYSLVioJDdg=";
103 "ia32" = "sha256-L3PGK2YZCUo+KfkakL9AjkPcnUWPFOn4S2GePi+rph0=";
104 "x64" = "sha256-epsbDjrpq4K7NnNDAcKoEJMcjfdehU2JjFcmA5exug8=";
105 }."${flavor + bits}";
106 };
107
108 nativeBuildInputs = [
109 autoPatchelfHook
110 (wrapGAppsHook3.override { inherit makeWrapper; })
111 ];
112
113 buildInputs = [ nwEnv ];
114 appendRunpaths = map (pkg: (lib.getLib pkg) + "/lib") [ nwEnv stdenv.cc.libc stdenv.cc.cc ];
115
116 preFixup = ''
117 gappsWrapperArgs+=(
118 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
119 )
120 '';
121
122 installPhase = ''
123 runHook preInstall
124
125 mkdir -p $out/share/nwjs
126 cp -R * $out/share/nwjs
127 find $out/share/nwjs
128
129 ln -s ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0
130
131 mkdir -p $out/bin
132 ln -s $out/share/nwjs/nw $out/bin
133
134 mkdir $out/lib
135 ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so
136
137 runHook postInstall
138 '';
139
140 meta = with lib; {
141 description = "App runtime based on Chromium and node.js";
142 homepage = "https://nwjs.io/";
143 platforms = [ "i686-linux" "x86_64-linux" ];
144 sourceProvenance = with sourceTypes; [ binaryNativeCode ];
145 maintainers = [ maintainers.mikaelfangel ];
146 mainProgram = "nw";
147 license = licenses.bsd3;
148 };
149}