opentabletdriver: 0.6.5.0 -> 0.6.5.1 (#379384)
[NixPkgs.git] / pkgs / by-name / ch / chatd / package.nix
blobfa8b090c740c276b133b2dcd68996ec00bbdf200
2   buildNpmPackage,
3   lib,
4   autoPatchelfHook,
5   electron,
6   fetchFromGitHub,
7   gitUpdater,
8   makeWrapper,
9   ollama,
10   pkg-config,
11   stdenv,
12   vips,
15 buildNpmPackage rec {
16   pname = "chatd";
17   version = "1.1.2";
19   src = fetchFromGitHub {
20     owner = "BruceMacD";
21     repo = "chatd";
22     rev = "v${version}";
23     hash = "sha256-6z5QoJk81NEP115uW+2ah7vxpDz8XQUmMLESPsZT9uU=";
24   };
26   makeCacheWritable = true; # sharp tries to build stuff in node_modules
27   ELECTRON_SKIP_BINARY_DOWNLOAD = true;
29   npmDepsHash = "sha256-jvGvhgNhY+wz/DFS7NDtmzKXbhHbNF3i0qVQoFFeB0M=";
31   dontNpmBuild = true; # missing script: build
33   nativeBuildInputs = [
34     makeWrapper
35     electron
36     pkg-config
37   ] ++ lib.optional stdenv.hostPlatform.isLinux autoPatchelfHook; # for onnx libs
39   buildInputs = [
40     (lib.getLib stdenv.cc.cc) # for libstdc++.so, required by onnxruntime
41     vips # or it will try to download from the Internet
42   ];
44   installPhase = ''
45     runHook preInstall
46     mkdir -p $out/{bin,share}
47     cp -r . $out/share/chatd
49     for bin in ollama-darwin ollama-linux; do
50       makeWrapper ${lib.getExe ollama} $out/share/chatd/src/service/ollama/runners/$bin
51     done
53     makeWrapper ${lib.getExe electron} $out/bin/chatd \
54       --add-flags $out/share/chatd/src/index.js \
55       --chdir $out/share/chatd \
56       --set-default ELECTRON_FORCE_IS_PACKAGED 1
57     runHook postInstall
58   '';
60   postInstall = ''
61     substituteInPlace $out/share/chatd/node_modules/@xenova/transformers/src/env.js \
62       --replace-fail "import fs from 'fs';" "import fs from 'fs';import os from 'os';" \
63       --replace-fail 'path.dirname(path.dirname(url.fileURLToPath(import.meta.url)))' 'path.join(os.homedir(), ".cache", "chatd")'
65     rm -rf $out/share/electron{,-winstaller} $(find $out -name 'win32')
66     find $out/share/chatd/node_modules -name '*.exe' -or -name '*.dll' -or -name '*.pdb' -delete
67     rm -rf ${
68       lib.concatStringsSep " " (
69         (lib.optional (
70           !stdenv.hostPlatform.isx86_64
71         ) "$out/share/chatd/node_modules/onnxruntime-node/bin/napi-v3/*/x64")
72         ++ (lib.optional (
73           !stdenv.hostPlatform.isAarch64
74         ) "$out/share/chatd/node_modules/onnxruntime-node/bin/napi-v3/*/arm64")
75         ++ (lib.optional (
76           !stdenv.hostPlatform.isDarwin
77         ) "$out/share/chatd/node_modules/onnxruntime-node/bin/napi-v3/darwin")
78         ++ (lib.optional (
79           !stdenv.hostPlatform.isLinux
80         ) "$out/share/chatd/node_modules/onnxruntime-node/bin/napi-v3/linux")
81       )
82     }
83   '';
85   passthru.updateScript = gitUpdater { rev-prefix = "v"; };
87   meta = {
88     description = "Chat with your documents using local AI";
89     homepage = "https://github.com/BruceMacD/chatd";
90     changelog = "https://github.com/BruceMacD/chatd/releases/tag/v${version}";
91     license = lib.licenses.mit;
92     maintainers = [ lib.maintainers.lucasew ];
93     mainProgram = "chatd";
94     platforms = electron.meta.platforms;
95   };