summaryrefslogtreecommitdiff
path: root/pkgs/by-name/li/librechat/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/li/librechat/package.nix')
-rw-r--r--pkgs/by-name/li/librechat/package.nix73
1 files changed, 73 insertions, 0 deletions
diff --git a/pkgs/by-name/li/librechat/package.nix b/pkgs/by-name/li/librechat/package.nix
new file mode 100644
index 000000000000..05fec51cc6d8
--- /dev/null
+++ b/pkgs/by-name/li/librechat/package.nix
@@ -0,0 +1,73 @@
+{
+ lib,
+ buildNpmPackage,
+ fetchFromGitHub,
+ pkg-config,
+ node-gyp,
+ vips,
+ nix-update-script,
+}:
+
+buildNpmPackage rec {
+ pname = "librechat";
+ version = "0.7.7";
+
+ src = fetchFromGitHub {
+ owner = "danny-avila";
+ repo = "LibreChat";
+ tag = "v${version}";
+ hash = "sha256-U0yIoJt7wE4a7WbryN7hheLRFTRVol5qawIrmKte41M=";
+ };
+
+ patches = [
+ # `buildNpmPackage` relies on `npm pack`, which only includes files explicitly
+ # listed in the project's package.json `files` array if this property is set.
+ # LibreChat does not set this property, but we can avoid packaging the whole
+ # workspace by simply adding the relevant paths here ourselves.
+ # Also, we set the `bin` property to the server script to benefit from the
+ # auto-generated wrapper.
+ ./0001-npm-pack.patch
+ # LibreChat tries writing logs to the package directory, which is immutable
+ # in our case. We patch the log directory to target the current working directory
+ # instead, which in case of NixOS will be the service's data directory.
+ ./0002-logs.patch
+ # Similarly to the logs, user uploads are by default written to the package
+ # directory as well. Again, we patch this to be relative to the current working
+ # directory instead.
+ ./0003-upload-paths.patch
+ ];
+
+ npmDepsHash = "sha256-r06Hcdxa7pYMqIvNWP4VclJ4woiPd9kJxEmQO88i8J8=";
+
+ nativeBuildInputs = [
+ pkg-config
+ node-gyp
+ ];
+
+ buildInputs = [
+ vips
+ ];
+
+ # required for sharp
+ makeCacheWritable = true;
+
+ npmBuildScript = "frontend";
+ npmPruneFlags = [ "--omit=dev" ];
+
+ passthru = {
+ updateScript = nix-update-script {
+ extraArgs = [
+ "--version-regex"
+ "^v(\\d+\\.\\d+\\.\\d+)$"
+ ];
+ };
+ };
+
+ meta = {
+ description = "Open-source app for all your AI conversations, fully customizable and compatible with any AI provider";
+ homepage = "https://github.com/danny-avila/LibreChat";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ niklaskorz ];
+ mainProgram = "librechat-server";
+ };
+}