167 lines
3.4 KiB
Nix
167 lines
3.4 KiB
Nix
{
|
||
alsa-lib,
|
||
at-spi2-core,
|
||
atk,
|
||
autoPatchelfHook,
|
||
buildEnv,
|
||
buildPackages,
|
||
cairo,
|
||
cups,
|
||
dbus,
|
||
expat,
|
||
fetchurl,
|
||
ffmpeg,
|
||
fontconfig,
|
||
freetype,
|
||
gdk-pixbuf,
|
||
glib,
|
||
gtk3,
|
||
lib,
|
||
libcap,
|
||
libdrm,
|
||
libGL,
|
||
libnotify,
|
||
libuuid,
|
||
libxcb,
|
||
libxkbcommon,
|
||
makeWrapper,
|
||
libgbm,
|
||
nspr,
|
||
nss,
|
||
pango,
|
||
sdk ? false,
|
||
sqlite,
|
||
stdenv,
|
||
systemd,
|
||
udev,
|
||
xorg,
|
||
}:
|
||
|
||
let
|
||
bits = if stdenv.hostPlatform.is64bit then "x64" else "ia32";
|
||
|
||
nwEnv = buildEnv {
|
||
name = "nwjs-env";
|
||
paths = [
|
||
alsa-lib
|
||
at-spi2-core
|
||
atk
|
||
cairo
|
||
cups
|
||
dbus
|
||
expat
|
||
fontconfig
|
||
freetype
|
||
gdk-pixbuf
|
||
glib
|
||
gtk3
|
||
libcap
|
||
libdrm
|
||
libGL
|
||
libnotify
|
||
libxkbcommon
|
||
libgbm
|
||
nspr
|
||
nss
|
||
pango
|
||
xorg.libX11
|
||
xorg.libXScrnSaver
|
||
xorg.libXcomposite
|
||
xorg.libXcursor
|
||
xorg.libXdamage
|
||
xorg.libXext
|
||
xorg.libXfixes
|
||
xorg.libXi
|
||
xorg.libXrandr
|
||
xorg.libXrender
|
||
xorg.libXtst
|
||
xorg.libxshmfence
|
||
# libnw-specific (not chromium dependencies)
|
||
ffmpeg
|
||
libxcb
|
||
# chromium runtime deps (dlopen’d)
|
||
libuuid
|
||
sqlite
|
||
udev
|
||
];
|
||
|
||
extraOutputsToInstall = [
|
||
"lib"
|
||
"out"
|
||
];
|
||
};
|
||
|
||
version = "0.100.1";
|
||
in
|
||
stdenv.mkDerivation {
|
||
pname = "nwjs";
|
||
inherit version;
|
||
|
||
src =
|
||
let
|
||
flavor = if sdk then "sdk-" else "";
|
||
in
|
||
fetchurl {
|
||
url = "https://dl.nwjs.io/v${version}/nwjs-${flavor}v${version}-linux-${bits}.tar.gz";
|
||
hash =
|
||
{
|
||
"sdk-ia32" = "sha256-8T3lyQi5tvXhThapng/l+wEbmXdUQBqPT7HHDBpEk5Y=";
|
||
"sdk-x64" = "sha256-nD1MYEm+4sq4MHkiOI46IgM6oDWpcyVWl3Yis0beEIg=";
|
||
"ia32" = "sha256-TfAw7+z/I3eYRn20DN0sR9moqD23UG7nvQbeXQDNDcg=";
|
||
"x64" = "sha256-EqLESL4zVdBzFvhPgXfcIwSVNNBVIMy1SdCu6eNU96Q=";
|
||
}
|
||
."${flavor + bits}";
|
||
};
|
||
|
||
nativeBuildInputs = [
|
||
autoPatchelfHook
|
||
# override doesn't preserve splicing https://github.com/NixOS/nixpkgs/issues/132651
|
||
# 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.
|
||
(buildPackages.wrapGAppsHook3.override { makeWrapper = buildPackages.makeShellWrapper; })
|
||
];
|
||
|
||
buildInputs = [ nwEnv ];
|
||
appendRunpaths = map (pkg: (lib.getLib pkg) + "/lib") [
|
||
nwEnv
|
||
stdenv.cc.libc
|
||
stdenv.cc.cc
|
||
];
|
||
|
||
preFixup = ''
|
||
gappsWrapperArgs+=(
|
||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
|
||
)
|
||
'';
|
||
|
||
installPhase = ''
|
||
runHook preInstall
|
||
|
||
mkdir -p $out/share/nwjs
|
||
cp -R * $out/share/nwjs
|
||
find $out/share/nwjs
|
||
|
||
ln -s ${lib.getLib systemd}/lib/libudev.so $out/share/nwjs/libudev.so.0
|
||
|
||
mkdir -p $out/bin
|
||
ln -s $out/share/nwjs/nw $out/bin
|
||
|
||
mkdir $out/lib
|
||
ln -s $out/share/nwjs/lib/libnw.so $out/lib/libnw.so
|
||
|
||
runHook postInstall
|
||
'';
|
||
|
||
meta = {
|
||
description = "App runtime based on Chromium and node.js";
|
||
homepage = "https://nwjs.io/";
|
||
platforms = [
|
||
"i686-linux"
|
||
"x86_64-linux"
|
||
];
|
||
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
|
||
maintainers = [ lib.maintainers.mikaelfangel ];
|
||
mainProgram = "nw";
|
||
license = lib.licenses.mit;
|
||
};
|
||
}
|