Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 alsa-lib, 3 at-spi2-core, 4 atk, 5 autoPatchelfHook, 6 buildEnv, 7 buildPackages, 8 cairo, 9 cups, 10 dbus, 11 expat, 12 fetchurl, 13 ffmpeg, 14 fontconfig, 15 freetype, 16 gdk-pixbuf, 17 glib, 18 gtk3, 19 lib, 20 libcap, 21 libdrm, 22 libGL, 23 libnotify, 24 libuuid, 25 libxcb, 26 libxkbcommon, 27 makeWrapper, 28 libgbm, 29 nspr, 30 nss, 31 pango, 32 sdk ? false, 33 sqlite, 34 stdenv, 35 systemd, 36 udev, 37 xorg, 38}: 39 40let 41 bits = if stdenv.hostPlatform.is64bit then "x64" else "ia32"; 42 43 nwEnv = buildEnv { 44 name = "nwjs-env"; 45 paths = [ 46 alsa-lib 47 at-spi2-core 48 atk 49 cairo 50 cups 51 dbus 52 expat 53 fontconfig 54 freetype 55 gdk-pixbuf 56 glib 57 gtk3 58 libcap 59 libdrm 60 libGL 61 libnotify 62 libxkbcommon 63 libgbm 64 nspr 65 nss 66 pango 67 xorg.libX11 68 xorg.libXScrnSaver 69 xorg.libXcomposite 70 xorg.libXcursor 71 xorg.libXdamage 72 xorg.libXext 73 xorg.libXfixes 74 xorg.libXi 75 xorg.libXrandr 76 xorg.libXrender 77 xorg.libXtst 78 xorg.libxshmfence 79 # libnw-specific (not chromium dependencies) 80 ffmpeg 81 libxcb 82 # chromium runtime deps (dlopen’d) 83 libuuid 84 sqlite 85 udev 86 ]; 87 88 extraOutputsToInstall = [ 89 "lib" 90 "out" 91 ]; 92 }; 93 94 version = "0.100.1"; 95in 96stdenv.mkDerivation { 97 pname = "nwjs"; 98 inherit version; 99 100 src = 101 let 102 flavor = if sdk then "sdk-" else ""; 103 in 104 fetchurl { 105 url = "https://dl.nwjs.io/v${version}/nwjs-${flavor}v${version}-linux-${bits}.tar.gz"; 106 hash = 107 { 108 "sdk-ia32" = "sha256-8T3lyQi5tvXhThapng/l+wEbmXdUQBqPT7HHDBpEk5Y="; 109 "sdk-x64" = "sha256-nD1MYEm+4sq4MHkiOI46IgM6oDWpcyVWl3Yis0beEIg="; 110 "ia32" = "sha256-TfAw7+z/I3eYRn20DN0sR9moqD23UG7nvQbeXQDNDcg="; 111 "x64" = "sha256-EqLESL4zVdBzFvhPgXfcIwSVNNBVIMy1SdCu6eNU96Q="; 112 } 113 ."${flavor + bits}"; 114 }; 115 116 nativeBuildInputs = [ 117 autoPatchelfHook 118 # override doesn't preserve splicing https://github.com/NixOS/nixpkgs/issues/132651 119 # Has to use `makeShellWrapper` from `buildPackages` even though `makeShellWrapper` from the inputs is spliced because `propagatedBuildInputs` would pick the wrong one because of a different offset. 120 (buildPackages.wrapGAppsHook3.override { makeWrapper = buildPackages.makeShellWrapper; }) 121 ]; 122 123 buildInputs = [ nwEnv ]; 124 appendRunpaths = map (pkg: (lib.getLib pkg) + "/lib") [ 125 nwEnv 126 stdenv.cc.libc 127 stdenv.cc.cc 128 ]; 129 130 preFixup = '' 131 gappsWrapperArgs+=( 132 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" 133 ) 134 ''; 135 136 installPhase = '' 137 runHook preInstall 138 139 mkdir -p $out/share/nwjs 140 cp -R * $out/share/nwjs 141 find $out/share/nwjs 142 143 ln -s ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0 144 145 mkdir -p $out/bin 146 ln -s $out/share/nwjs/nw $out/bin 147 148 mkdir $out/lib 149 ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so 150 151 runHook postInstall 152 ''; 153 154 meta = { 155 description = "App runtime based on Chromium and node.js"; 156 homepage = "https://nwjs.io/"; 157 platforms = [ 158 "i686-linux" 159 "x86_64-linux" 160 ]; 161 sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; 162 maintainers = [ lib.maintainers.mikaelfangel ]; 163 mainProgram = "nw"; 164 license = lib.licenses.mit; 165 }; 166}