aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/video/epgstation/default.nix
blob: e57f46c8c6adcc26c8a289fc1d3f376b10b911b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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;
  };
})