Files
rags/flake.nix
T
tomatocream 17fbeffac1 init: LightRAG + Graphiti as submodules with Nix flake
Impure devShells using uv + Python 3.12 for each project.
LD_LIBRARY_PATH set for NixOS native wheel compatibility.
Neo4j managed via nix run .#neo4j-start / neo4j-stop.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 12:18:32 +08:00

115 lines
3.8 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 ];
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"
cd "$RAGS_ROOT/lightrag"
if [ ! -d .venv ]; then
echo "Setting up lightrag venv (first time, ~2min)..."
uv sync --extra api --quiet
fi
source .venv/bin/activate
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 qwen2.5:7b + nomic-embed-text"
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"
if [ ! -d .venv ]; then
echo "Setting up graphiti venv (first time, ~1min)..."
uv sync --quiet
fi
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 qwen2.5:7b + nomic-embed-text"
echo ""
'';
};
};
apps.${system} = {
neo4j-start = { type = "app"; program = "${startNeo4j}"; };
neo4j-stop = { type = "app"; program = "${stopNeo4j}"; };
};
};
}