nixpkgs/pkgs/applications/video/epgstation/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

132 lines
4.1 KiB
Nix
Raw Normal View History

2021-01-15 05:42:41 +00:00
{ lib
, stdenv
2020-10-04 11:38:11 +00:00
, fetchFromGitHub
, makeWrapper
, bash
, nodejs
, gzip
, callPackage
2020-10-04 11:38:11 +00:00
}:
2018-10-20 18:14:34 +00:00
let
2020-10-04 11:38:11 +00:00
# NOTE: use updateScript to bump the package version
pname = "EPGStation";
2022-01-29 12:21:54 +00:00
version = "2.6.20";
2020-10-04 11:38:11 +00:00
src = fetchFromGitHub {
owner = "l3tnun";
repo = "EPGStation";
rev = "v${version}";
2022-01-29 12:21:54 +00:00
sha256 = "K1cAvmqWEfS6EY4MKAtjXb388XLYHtouxNM70PWgFig=";
2020-10-04 11:38:11 +00:00
};
client = nodejs.pkgs.epgstation-client.override (drv: {
# This is set to false to keep devDependencies at build time. Build time
# dependencies are pruned afterwards.
production = false;
2022-01-29 12:21:54 +00:00
meta = drv.meta // {
inherit (nodejs.meta) platforms;
};
});
server = nodejs.pkgs.epgstation.override (drv: {
# NOTE: updateScript relies on version matching the src.
inherit version src;
2020-10-04 11:38:11 +00:00
2022-01-29 12:21:54 +00:00
# This is set to false to keep devDependencies at build time. Build time
# dependencies are pruned afterwards.
production = false;
buildInputs = (drv.buildInputs or [ ]) ++ [ bash ];
nativeBuildInputs = (drv.nativeBuildInputs or [ ]) ++ [
2020-10-04 11:38:11 +00:00
makeWrapper
2022-05-13 01:39:02 +00:00
];
2020-10-04 11:38:11 +00:00
preRebuild = ''
# Fix for OpenSSL compat with newer Node.js
export NODE_OPTIONS=--openssl-legacy-provider
2020-10-04 11:38:11 +00:00
# Fix for not being able to connect to mysql using domain sockets.
2022-01-29 12:21:54 +00:00
patch -p1 < ${./use-mysql-over-domain-socket.patch}
# Workaround for https://github.com/svanderburg/node2nix/issues/275
sed -i -e "s|#!/usr/bin/env node|#! ${nodejs}/bin/node|" node_modules/node-gyp-build/bin.js
# Optional typeorm dependency that does not build on aarch64-linux
rm -r node_modules/oracledb
2022-01-29 12:21:54 +00:00
find . -name package-lock.json -delete
2020-10-04 11:38:11 +00:00
'';
postInstall = let
runtimeDeps = [ nodejs bash ];
in
''
mkdir -p $out/{bin,libexec,share/doc/epgstation,share/man/man1}
2022-01-29 12:21:54 +00:00
pushd $out/lib/node_modules/epgstation
cp -r ${client}/lib/node_modules/epgstation-client/{package-lock.json,node_modules} client/
chmod -R u+w client/{package-lock.json,node_modules}
2020-10-04 11:38:11 +00:00
npm run build
2022-01-29 12:21:54 +00:00
2020-10-04 11:38:11 +00:00
npm prune --production
2022-01-29 12:21:54 +00:00
pushd client
npm prune --production
popd
2020-10-04 11:38:11 +00:00
2022-01-29 12:21:54 +00:00
mv config/enc.js.template $out/libexec/enc.js
2020-10-04 11:38:11 +00:00
mv LICENSE Readme.md $out/share/doc/epgstation
mv doc/* $out/share/doc/epgstation
sed 's/@DESCRIPTION@/${drv.meta.description}/g' ${./epgstation.1} \
| ${gzip}/bin/gzip > $out/share/man/man1/epgstation.1.gz
rm -rf doc
# just log to stdout and let journald do its job
rm -rf logs
# Replace the existing configuration and runtime state directories with
# symlinks. Without this, they would all be non-writable because they
# reside in the Nix store. Note that the source path won't be accessible
# at build time.
rm -r config data recorded thumbnail
ln -sfT /etc/epgstation config
ln -sfT /var/lib/epgstation data
ln -sfT /var/lib/epgstation/recorded recorded
ln -sfT /var/lib/epgstation/thumbnail thumbnail
makeWrapper ${nodejs}/bin/npm $out/bin/epgstation \
--chdir "$out/lib/node_modules/epgstation" \
2022-01-29 12:21:54 +00:00
--prefix PATH : ${lib.makeBinPath runtimeDeps} \
--set APP_ROOT_PATH "$out/lib/node_modules/epgstation"
2020-10-04 11:38:11 +00:00
popd
'';
# NOTE: this may take a while since it has to update all packages in
# nixpkgs.nodePackages
passthru.updateScript = callPackage ./update.nix { };
2018-10-20 18:14:34 +00:00
# nodePackages.epgstation is a stub package to fetch npm dependencies and
2022-01-29 12:21:54 +00:00
# its meta.platforms is made empty to prevent users from installing it
# directly. This technique ensures epgstation can share npm packages with
# the rest of nixpkgs while still allowing us to heavily customize the
# build. It also allows us to provide devDependencies for the epgstation
# build process without doing the same for all the other node packages.
meta = drv.meta // {
inherit (nodejs.meta) platforms;
};
2020-10-04 11:38:11 +00:00
});
in
2022-01-29 12:21:54 +00:00
server // {
2020-10-04 11:38:11 +00:00
name = "${pname}-${version}";
2022-01-29 12:21:54 +00:00
meta = with lib; server.meta // {
2020-10-04 11:38:11 +00:00
maintainers = with maintainers; [ midchildan ];
# NOTE: updateScript relies on this being correct
position = toString ./default.nix + ":1";
2018-10-20 18:14:34 +00:00
};
2020-10-04 11:38:11 +00:00
}