biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / applications / video / epgstation / default.nix
blob63c1e050e7de16d1c9127c30d1e7416d57874ab0
1 { lib
2 , fetchpatch
3 , fetchFromGitHub
4 , buildNpmPackage
5 , installShellFiles
6 , makeWrapper
7 , bash
8 , nodejs
9 , python3
12 buildNpmPackage rec {
13   pname = "epgstation";
14   version = "2.6.20";
16   src = fetchFromGitHub {
17     owner = "l3tnun";
18     repo = "EPGStation";
19     rev = "v${version}";
20     sha256 = "K1cAvmqWEfS6EY4MKAtjXb388XLYHtouxNM70PWgFig=";
21   };
23   patches = [
24     ./use-mysql-over-domain-socket.patch
26     # upgrade dependencies to make it compatible with node 18
27     (fetchpatch {
28       url = "https://github.com/midchildan/EPGStation/commit/5d6cad746b7d9b6d246adcdecf9c991b77c9d89e.patch";
29       sha256 = "sha256-9a8VUjczlyQHVO7w9MYorPIZunAuBuif1HNmtp1yMk8=";
30     })
31     (fetchpatch {
32       url = "https://github.com/midchildan/EPGStation/commit/c948e833e485c2b7cb7fb33b953cca1e20de3a70.patch";
33       sha256 = "sha256-nM6KkVRURuQFZLXZ2etLU1a1+BoaJnfjngo07TFbe58=";
34     })
35   ];
37   npmDepsHash = "sha256-dohencRGuvc+vSoclLVn5iles4GOuTq26BrEVeJ4GC4=";
38   npmBuildScript = "build-server";
39   npmRootPath = "/lib/node_modules/epgstation";
41   buildInputs = [ bash ];
42   nativeBuildInputs = [ installShellFiles makeWrapper python3 ];
44   clientDir = buildNpmPackage {
45     pname = "${pname}-client";
46     inherit version src installPhase meta;
48     npmDepsHash = "sha256-a/cDPABWI4lPxvSOI4D90O71A9lm8icPMak/g6DPYQY=";
49     npmRootPath = "";
51     sourceRoot = "${src.name}/client";
52     NODE_OPTIONS = "--openssl-legacy-provider";
53   };
55   postBuild = ''
56     rm -rf client
57     cp -r ${clientDir} client
58   '';
60   # installPhase is shared with clientDir
61   installPhase = ''
62     runHook preInstall
64     npm prune --omit dev --no-save \
65       $npmInstallFlags \
66       "''${npmInstallFlagsArray[@]}" \
67       $npmFlags \
68       "''${npmFlagsArray[@]}"
70     mkdir -p $out$npmRootPath
71     cp -r . $out$npmRootPath
73     runHook postInstall
74   '';
76   postInstall =
77     let
78       runtimeDeps = [ nodejs bash ];
79     in
80     ''
81       mkdir -p $out/{bin,libexec,share/doc/epgstation}
83       pushd $out$npmRootPath
85       mv config/enc.js.template $out/libexec/enc.js
86       mv LICENSE Readme.md $out/share/doc/epgstation
87       mv doc/* $out/share/doc/epgstation
88       sed 's/@DESCRIPTION@/${meta.description}/g' ${./epgstation.1} > doc/epgstation.1
89       installManPage doc/epgstation.1
90       rm -rf doc
92       # just log to stdout and let journald do its job
93       rm -rf logs
95       # Replace the existing configuration and runtime state directories with
96       # symlinks. Without this, they would all be non-writable because they
97       # reside in the Nix store. Note that the source path won't be accessible
98       # at build time.
99       rm -r config data drop recorded thumbnail src/db/subscribers src/db/migrations
100       ln -sfT /etc/epgstation config
101       ln -sfT /var/lib/epgstation data
102       ln -sfT /var/lib/epgstation/drop drop
103       ln -sfT /var/lib/epgstation/recorded recorded
104       ln -sfT /var/lib/epgstation/thumbnail thumbnail
105       ln -sfT /var/lib/epgstation/db/subscribers src/db/subscribers
106       ln -sfT /var/lib/epgstation/db/migrations src/db/migrations
108       makeWrapper ${nodejs}/bin/npm $out/bin/epgstation \
109        --chdir $out$npmRootPath \
110        --prefix PATH : ${lib.makeBinPath runtimeDeps} \
111        --set APP_ROOT_PATH $out$npmRootPath
113       popd
114     '';
116   meta = with lib; {
117     description = "DVR software compatible with Mirakurun.";
118     homepage = "https://github.com/l3tnun/EPGStation";
119     license = licenses.mit;
120     maintainers = with maintainers; [ midchildan ];
121     mainProgram = "epgstation";
122   };