2022-01-02 23:53:03 +00:00
|
|
|
{ stdenv
|
|
|
|
, mkYarnPackage
|
|
|
|
, mkYarnModules
|
|
|
|
, fetchFromGitHub
|
|
|
|
, libsass
|
|
|
|
, python
|
|
|
|
, python3
|
|
|
|
, pkg-config
|
|
|
|
, libusb
|
|
|
|
, fetchurl
|
|
|
|
, nodejs
|
|
|
|
, electron
|
|
|
|
, writeText
|
|
|
|
, makeWrapper
|
|
|
|
, udev
|
|
|
|
, nodePackages
|
|
|
|
, libvips
|
|
|
|
}:
|
|
|
|
|
|
|
|
# some weird javascript thingy that runs our tally lights on conferences.
|
|
|
|
#
|
|
|
|
# in case it breaks or you want to update it:
|
|
|
|
# 1. update companion sources below (also update the hash)
|
|
|
|
# 2. re-generate the yarn.nix / yarn-webui.nix files (see comments below)
|
|
|
|
# 3. try re-generating yarn.lock itself (`yarn install --mode update-lockfile`)
|
|
|
|
#
|
|
|
|
# if things break, try taking a look at yarn2nix's documentation. In
|
|
|
|
# nix-typical fashion, it was deleted when yarn2nix got integrated into
|
|
|
|
# nixpkgs; a shorter version is now in the nixpkgs manual:
|
|
|
|
# - https://nixos.org/manual/nixpkgs/stable/#javascript-tool-specific
|
|
|
|
# sometimes the archived original documentation can still be helpful:
|
|
|
|
# - https://github.com/nix-community/yarn2nix
|
2021-08-28 14:30:02 +00:00
|
|
|
|
|
|
|
let
|
|
|
|
version = "2.1.3";
|
2022-01-02 23:53:03 +00:00
|
|
|
|
2021-08-28 14:30:02 +00:00
|
|
|
source = fetchFromGitHub {
|
|
|
|
owner = "bitfocus";
|
|
|
|
repo = "companion";
|
2022-01-02 23:53:03 +00:00
|
|
|
rev = "b653211f5507a090a120fa3e819ab3044405e461";
|
|
|
|
sha256 = "0gvibbhfqa9gk8cf3m07gd5dbik3kbpr03hx2pppqnh9pfrx35qh";
|
2021-08-28 14:30:02 +00:00
|
|
|
};
|
2022-01-02 23:53:03 +00:00
|
|
|
|
2021-08-28 14:30:02 +00:00
|
|
|
nodeHeaders = fetchurl {
|
|
|
|
url = "https://nodejs.org/download/release/v${nodejs.version}/node-v${nodejs.version}-headers.tar.gz";
|
2021-10-31 20:25:48 +00:00
|
|
|
sha256 = "19b0dg8292cjx758wlrvpb3jf520bpyvjal2n7r4fyvk38x9flik";
|
2021-08-28 14:30:02 +00:00
|
|
|
};
|
2022-01-02 23:53:03 +00:00
|
|
|
|
|
|
|
# the companion's web ui. In a seperate derivation, but is symlinked into
|
|
|
|
# the companion itself.
|
2021-08-28 14:30:02 +00:00
|
|
|
webui = mkYarnPackage rec {
|
|
|
|
inherit version;
|
|
|
|
pname = "bitfocus-companion-webui";
|
|
|
|
|
|
|
|
src = "${source}/webui";
|
|
|
|
|
2022-01-02 23:53:03 +00:00
|
|
|
# nixified dependencies generated using `yarn2nix`. Must be re-generated
|
|
|
|
# when updating the companion using yarn2nix on the yarn.lock file of the
|
|
|
|
# webui.
|
|
|
|
yarnNix = ./yarn-webui.nix;
|
|
|
|
|
2021-08-28 14:30:02 +00:00
|
|
|
configurePhase = "
|
|
|
|
cp -r $node_modules node_modules
|
|
|
|
chmod -R u+w node_modules
|
|
|
|
";
|
|
|
|
buildPhase = "PUBLIC_URL=. yarn build";
|
|
|
|
installPhase = "mv build $out";
|
|
|
|
distPhase = "true";
|
|
|
|
|
|
|
|
|
|
|
|
pkgConfig = {
|
|
|
|
node-sass = {
|
|
|
|
buildInputs = [ libsass python ];
|
|
|
|
postInstall = "node scripts/build.js --tarball=${nodeHeaders}";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
yarnModulesNoWorkspace = args: (mkYarnModules args).overrideAttrs(old: {
|
2022-01-02 23:53:03 +00:00
|
|
|
# this replaces exactly one occurance of that string in
|
|
|
|
# <nixpkgs>/pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix
|
|
|
|
buildPhase = builtins.replaceStrings
|
|
|
|
[" ./package.json"]
|
|
|
|
[" /dev/null; cp deps/*/package.json ."]
|
|
|
|
old.buildPhase;
|
2021-08-28 14:30:02 +00:00
|
|
|
});
|
|
|
|
|
2022-01-02 23:53:03 +00:00
|
|
|
in stdenv.mkDerivation rec {
|
|
|
|
inherit version;
|
|
|
|
pname = "bitfocus-companion";
|
|
|
|
|
|
|
|
src = source;
|
|
|
|
|
|
|
|
# yarn modules needed for the build; these would usually be fetched by yarn
|
|
|
|
# when running `yarn build`.
|
2021-08-28 14:30:02 +00:00
|
|
|
modules = yarnModulesNoWorkspace rec {
|
|
|
|
inherit version;
|
|
|
|
pname = "companion-modules";
|
|
|
|
name = "${pname}-${version}";
|
2022-01-02 23:53:03 +00:00
|
|
|
|
|
|
|
# A nixified version of yarn's yarn.lock file. If anything in here breaks,
|
|
|
|
# try regenerating it using `yarn2nix` (found in nixpkgs.yarn2nix) on the
|
|
|
|
# yarn.lock file found in the companion's source tree (also try a newer
|
|
|
|
# version while you're at it).
|
2021-08-28 14:30:02 +00:00
|
|
|
yarnNix = ./yarn.nix;
|
2022-01-02 23:53:03 +00:00
|
|
|
|
|
|
|
# no idea what these two do tbh
|
2021-08-28 14:30:02 +00:00
|
|
|
packageJSON = "${source}/package.json";
|
|
|
|
yarnLock = "${source}/yarn.lock";
|
|
|
|
|
2022-01-02 23:53:03 +00:00
|
|
|
# ???
|
2021-08-28 14:30:02 +00:00
|
|
|
pkgConfig = {
|
|
|
|
node-hid = {
|
|
|
|
buildInputs = [ udev libusb python3 pkg-config ];
|
|
|
|
postInstall = "${nodePackages.node-gyp}/bin/node-gyp rebuild --tarball=${nodeHeaders}";
|
|
|
|
};
|
|
|
|
sharp = {
|
|
|
|
buildInputs = [ libvips pkg-config ];
|
|
|
|
postInstall = ''
|
|
|
|
sed -i "s|<!(node -p \"require(\\\\'./lib/libvips\\\\').minimumLibvipsVersion\")|${libvips.version}|" binding.gyp
|
|
|
|
sed -i "s|<!(node -p \"require(\\\\'./lib/libvips\\\\').pkgConfigPath()\")||" binding.gyp
|
|
|
|
sed -i "s|<!(node -p \"Boolean(require(\\\\'./lib/libvips\\\\').useGlobalLibvips()).toString()\")|true|" binding.gyp
|
|
|
|
sed -i "s|PKG_CONFIG_PATH=\"<(pkg_config_path)\" ||" binding.gyp
|
|
|
|
${nodePackages.node-gyp}/bin/node-gyp rebuild --tarball=${nodeHeaders}
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
|
|
|
|
|
|
configurePhase = "";
|
|
|
|
buildPhase = "";
|
|
|
|
installPhase = ''
|
|
|
|
mkdir -p $out/share
|
|
|
|
cp --no-preserve=mode -r $src "$out/share/companion"
|
|
|
|
echo "nixos-f00baa-0" > $out/share/companion/BUILD
|
|
|
|
ln -s '${webui}' "$out/share/companion/static"
|
|
|
|
cp -r '${modules}/node_modules' "$out/share/companion/node_modules"
|
|
|
|
|
|
|
|
sed -i "s|process.resourcesPath|\"$out/share/companion\"|" $out/share/companion/lib/server_http.js
|
|
|
|
sed -i "s|require('app-root-path')|\"$out/share/companion\"|" $out/share/companion/{app,lib/{schedule,help,instance}}.js
|
|
|
|
|
|
|
|
makeWrapper '${electron}/bin/electron' "$out/bin/companion" \
|
|
|
|
--add-flags "$out/share/companion"
|
|
|
|
'';
|
|
|
|
}
|