summary refs log tree commit diff
path: root/pkgs/applications/video/mirakurun/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/video/mirakurun/default.nix')
-rw-r--r--pkgs/applications/video/mirakurun/default.nix95
1 files changed, 95 insertions, 0 deletions
diff --git a/pkgs/applications/video/mirakurun/default.nix b/pkgs/applications/video/mirakurun/default.nix
new file mode 100644
index 00000000000..3987e125284
--- /dev/null
+++ b/pkgs/applications/video/mirakurun/default.nix
@@ -0,0 +1,95 @@
+# NOTE: Mirakurun is packaged outside of nodePackages because Node2nix can't
+# handle one of its subdependencies. See below link for details.
+#
+# https://github.com/Chinachu/node-aribts/blob/af84dbbbd81ea80b946e538083b64b5b2dc7e8f2/package.json#L26
+
+{ lib
+, stdenvNoCC
+, bash
+, common-updater-scripts
+, fetchFromGitHub
+, genericUpdater
+, jq
+, makeWrapper
+, mkYarnPackage
+, which
+, writers
+, v4l-utils
+, yarn
+, yarn2nix
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mirakurun";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "Chinachu";
+    repo = "Mirakurun";
+    rev = version;
+    sha256 = "1fmzi3jc3havvpc1kz5z16k52lnrsmc3b5yqyxc7i911gqyjsxzr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  mirakurun = mkYarnPackage rec {
+    name = "${pname}-${version}";
+    inherit version src;
+
+    yarnNix = ./yarn.nix;
+    yarnLock = ./yarn.lock;
+    packageJSON = ./package.json;
+
+    patches = [
+      # NOTE: fixes for hardcoded paths and assumptions about filesystem
+      # permissions
+      ./nix-filesystem.patch
+    ];
+
+    buildPhase = ''
+      yarn --offline build
+    '';
+
+    distPhase = "true";
+  };
+
+  installPhase =
+    let
+      runtimeDeps = [ bash which v4l-utils ];
+    in
+    ''
+      mkdir -p $out/bin
+
+      makeWrapper ${mirakurun}/bin/mirakurun-epgdump $out/bin/mirakurun-epgdump \
+        --run "cd ${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
+        --prefix PATH : ${lib.makeBinPath runtimeDeps}
+
+      # XXX: The original mirakurun command uses PM2 to manage the Mirakurun
+      # server.  However, we invoke the server directly and let systemd
+      # manage it to avoid complication. This is okay since no features
+      # unique to PM2 is currently being used.
+      makeWrapper ${yarn}/bin/yarn $out/bin/mirakurun-start \
+        --add-flags "start" \
+        --run "cd ${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
+        --prefix PATH : ${lib.makeBinPath runtimeDeps}
+    '';
+
+  passthru.updateScript = import ./update.nix {
+    inherit lib;
+    inherit (src.meta) homepage;
+    inherit
+      pname
+      version
+      common-updater-scripts
+      genericUpdater
+      writers
+      jq
+      yarn
+      yarn2nix;
+  };
+
+  meta = {
+    inherit (mirakurun.meta) description platforms;
+    maintainers = with lib.maintainers; [ midchildan ];
+  };
+}