c5dc2cf637
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
115 lines
3.9 KiB
Nix
115 lines
3.9 KiB
Nix
{
|
|
description = "LightRAG + Graphiti dev environments";
|
|
|
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
outputs = { self, nixpkgs }:
|
|
let
|
|
system = "x86_64-linux";
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
startNeo4j = pkgs.writeShellScript "start-neo4j" ''
|
|
set -e
|
|
: "''${RAGS_ROOT:=$PWD}"
|
|
NEO4J_DATA="$RAGS_ROOT/data/neo4j"
|
|
mkdir -p "$NEO4J_DATA"/{data,logs,run,plugins,import,conf}
|
|
|
|
cat > "$NEO4J_DATA/conf/neo4j.conf" <<CONF
|
|
server.directories.data=$NEO4J_DATA/data
|
|
server.directories.logs=$NEO4J_DATA/logs
|
|
server.directories.run=$NEO4J_DATA/run
|
|
server.directories.plugins=$NEO4J_DATA/plugins
|
|
server.directories.import=$NEO4J_DATA/import
|
|
server.bolt.listen_address=:7687
|
|
server.http.listen_address=:7474
|
|
dbms.security.auth_enabled=false
|
|
CONF
|
|
|
|
export NEO4J_CONF="$NEO4J_DATA/conf"
|
|
${pkgs.neo4j}/bin/neo4j start
|
|
echo ""
|
|
echo "Neo4j running:"
|
|
echo " bolt: bolt://localhost:7687"
|
|
echo " http: http://localhost:7474"
|
|
echo " stop: RAGS_ROOT=$RAGS_ROOT nix run .#neo4j-stop"
|
|
echo ""
|
|
'';
|
|
|
|
stopNeo4j = pkgs.writeShellScript "stop-neo4j" ''
|
|
: "''${RAGS_ROOT:=$PWD}"
|
|
export NEO4J_CONF="$RAGS_ROOT/data/neo4j/conf"
|
|
${pkgs.neo4j}/bin/neo4j stop
|
|
'';
|
|
|
|
in {
|
|
devShells.${system} = {
|
|
|
|
lightrag = pkgs.mkShell {
|
|
packages = [ pkgs.uv pkgs.python312 pkgs.curl pkgs.bun ];
|
|
|
|
shellHook = ''
|
|
RAGS_ROOT="$PWD"
|
|
export VIRTUAL_ENV="$RAGS_ROOT/lightrag/.venv"
|
|
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
|
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
|
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
|
|
|
echo "Syncing lightrag venv..."
|
|
(cd "$RAGS_ROOT/lightrag" && uv sync --extra api --extra offline-llm --quiet)
|
|
source "$RAGS_ROOT/lightrag/.venv/bin/activate"
|
|
|
|
if [ ! -d "$RAGS_ROOT/lightrag/lightrag/api/webui" ]; then
|
|
echo "Building frontend (first time, ~1min)..."
|
|
(cd "$RAGS_ROOT/lightrag/lightrag_webui" && bun install --frozen-lockfile --silent && bun run build:bun)
|
|
fi
|
|
|
|
if [ -f "$RAGS_ROOT/.env.lightrag" ]; then
|
|
set -a; source "$RAGS_ROOT/.env.lightrag"; set +a
|
|
fi
|
|
|
|
echo ""
|
|
echo "LightRAG shell ready."
|
|
echo " start: lightrag-server"
|
|
echo " config: $RAGS_ROOT/.env.lightrag"
|
|
echo " needs: ollama with qwen3:0.6b + qwen3-embedding:0.6b"
|
|
echo ""
|
|
'';
|
|
};
|
|
|
|
graphiti = pkgs.mkShell {
|
|
packages = [ pkgs.uv pkgs.python312 pkgs.neo4j pkgs.curl ];
|
|
|
|
shellHook = ''
|
|
RAGS_ROOT="$PWD"
|
|
export VIRTUAL_ENV="$RAGS_ROOT/graphiti/.venv"
|
|
export UV_PROJECT_ENVIRONMENT="$VIRTUAL_ENV"
|
|
export UV_PYTHON="${pkgs.python312}/bin/python3.12"
|
|
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.zlib ]}:$LD_LIBRARY_PATH"
|
|
cd "$RAGS_ROOT/graphiti"
|
|
|
|
echo "Syncing graphiti venv..."
|
|
uv sync --quiet
|
|
source .venv/bin/activate
|
|
|
|
if [ -f "$RAGS_ROOT/.env.graphiti" ]; then
|
|
set -a; source "$RAGS_ROOT/.env.graphiti"; set +a
|
|
fi
|
|
|
|
echo ""
|
|
echo "Graphiti shell ready."
|
|
echo " neo4j: nix run .#neo4j-start (in another terminal, run first)"
|
|
echo " config: $RAGS_ROOT/.env.graphiti"
|
|
echo " needs: ollama with qwen3:0.6b + qwen3-embedding:0.6b"
|
|
echo ""
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
apps.${system} = {
|
|
neo4j-start = { type = "app"; program = "${startNeo4j}"; };
|
|
neo4j-stop = { type = "app"; program = "${stopNeo4j}"; };
|
|
};
|
|
};
|
|
}
|