65 lines
2.2 KiB
Nix
65 lines
2.2 KiB
Nix
{
|
|
description = "Event-driven backtesting engine";
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
uv2nix.url = "github:pyproject-nix/uv2nix";
|
|
uv2nix.inputs.nixpkgs.follows = "nixpkgs";
|
|
pyproject-nix.url = "github:pyproject-nix/pyproject.nix";
|
|
pyproject-nix.inputs.nixpkgs.follows = "nixpkgs";
|
|
pyproject-build-systems.url = "github:pyproject-nix/build-system-pkgs";
|
|
pyproject-build-systems.inputs.pyproject-nix.follows = "pyproject-nix";
|
|
pyproject-build-systems.inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
flake-utils,
|
|
uv2nix,
|
|
pyproject-nix,
|
|
pyproject-build-systems,
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (system: let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
lib = nixpkgs.lib;
|
|
python = pkgs.python312;
|
|
workspace = uv2nix.lib.workspace.loadWorkspace {workspaceRoot = ./.;};
|
|
overlay = workspace.mkPyprojectOverlay {sourcePreference = "wheel";};
|
|
pythonSet = (pkgs.callPackage pyproject-nix.build.packages {inherit python;}).overrideScope (
|
|
lib.composeManyExtensions [
|
|
pyproject-build-systems.overlays.default
|
|
overlay
|
|
]
|
|
);
|
|
venv = pythonSet.mkVirtualEnv "backtest-env" workspace.deps.default;
|
|
in {
|
|
packages.default = pkgs.stdenv.mkDerivation {
|
|
pname = "backtest";
|
|
version = "0.1.0";
|
|
src = ./.;
|
|
dontConfigure = true;
|
|
nativeBuildInputs = [pkgs.cmake pkgs.gcc];
|
|
buildInputs = [venv pkgs.yaml-cpp];
|
|
buildPhase = ''
|
|
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
|
|
cmake --build build -j4
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out/bin $out/lib
|
|
cp -r . $out/lib/
|
|
cp build/backtest $out/bin/backtest-cpp
|
|
cat > $out/bin/backtest << EOF
|
|
#!/bin/sh
|
|
export PATH="${venv}/bin:\$PATH"
|
|
cd $out/lib
|
|
exec ${venv}/bin/streamlit run $out/lib/app.py \
|
|
--browser.gatherUsageStats=false \
|
|
--server.fileWatcherType=none \
|
|
"\$@"
|
|
EOF
|
|
chmod +x $out/bin/backtest
|
|
'';
|
|
};
|
|
});
|
|
}
|