diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/video/epgstation/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/video/epgstation/default.nix | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/video/epgstation/default.nix b/nixpkgs/pkgs/applications/video/epgstation/default.nix new file mode 100644 index 00000000000..e57f46c8c6a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/epgstation/default.nix @@ -0,0 +1,85 @@ +{ stdenv, fetchFromGitHub, makeWrapper, bash, nodejs, nodePackages, gzip }: + +let + workaround-opencollective-buildfailures = stdenv.mkDerivation { + # FIXME: This should be removed when a complete fix is available + # https://github.com/svanderburg/node2nix/issues/145 + name = "workaround-opencollective-buildfailures"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + touch $out/bin/opencollective-postinstall + chmod +x $out/bin/opencollective-postinstall + ''; + }; +in +nodePackages.epgstation.override (drv: { + src = fetchFromGitHub { + owner = "l3tnun"; + repo = "EPGStation"; + rev = "v${drv.version}"; # version specified in ./generate.sh + sha256 = "15z1kdbamj97frp3dfnbm0h8krihmv2xdab4id0rxin29ibrw1k2"; + }; + + buildInputs = [ bash ]; + nativeBuildInputs = [ + workaround-opencollective-buildfailures + makeWrapper + nodePackages.node-pre-gyp + ]; + + preRebuild = '' + # Fix for not being able to connect to mysql using domain sockets. + patch -p1 ${./use-mysql-over-domain-socket.patch} + ''; + + postInstall = let + runtimeDeps = [ nodejs bash ]; + in + '' + mkdir -p $out/{bin,libexec,share/doc/epgstation,share/man/man1} + + pushd $out/lib/node_modules/EPGStation + + npm run build + npm prune --production + + mv config/{enc.sh,enc.js} $out/libexec + 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 \ + --run "cd $out/lib/node_modules/EPGStation" \ + --prefix PATH : ${stdenv.lib.makeBinPath runtimeDeps} + + popd + ''; + + meta = with stdenv.lib; drv.meta // { + maintainers = with maintainers; [ midchildan ]; + + # nodePackages.epgstation is a stub package to fetch npm dependencies and + # is marked as broken 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. + broken = false; + }; +}) |