uv2nix
This commit is contained in:
Generated
+115
-1
@@ -34,10 +34,78 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-build-systems": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": [
|
||||
"pyproject-nix"
|
||||
],
|
||||
"uv2nix": "uv2nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776659114,
|
||||
"narHash": "sha256-qapCOQmR++yZSY43dzrp3wCrkOTLpod+ONtJWBk6iKU=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "build-system-pkgs",
|
||||
"rev": "ffaa2161dd5d63e0e94591f86b54fc239660fb2e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "build-system-pkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776715674,
|
||||
"narHash": "sha256-Gs1VnEkCkkRZxJQAC/Dhz0Jbfi22mFXChbtNg9w/Ybg=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"rev": "69f57f27e52a87c54e28138a75ec741cd46663c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pyproject-nix_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"uv2nix",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776715674,
|
||||
"narHash": "sha256-Gs1VnEkCkkRZxJQAC/Dhz0Jbfi22mFXChbtNg9w/Ybg=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"rev": "69f57f27e52a87c54e28138a75ec741cd46663c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "pyproject.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nixpkgs": "nixpkgs",
|
||||
"pyproject-build-systems": "pyproject-build-systems",
|
||||
"pyproject-nix": "pyproject-nix",
|
||||
"uv2nix": "uv2nix_2"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
@@ -54,6 +122,52 @@
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"uv2nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"pyproject-build-systems",
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": [
|
||||
"pyproject-build-systems",
|
||||
"pyproject-nix"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776317509,
|
||||
"narHash": "sha256-nSriomT9IJvyVY/mzyFz4Un6DHSjCfrVitcIfV+VHnY=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"rev": "56cfeb9813150e1f900f13e4d6fe46e2845f82d5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"uv2nix_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pyproject-nix": "pyproject-nix_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777895960,
|
||||
"narHash": "sha256-KebDsQd+A7pm++Tp0744EjULttHvz1wbKqNKkMA/088=",
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"rev": "5ad90d48b80ecc920ca2247d53f46beba302e186",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "pyproject-nix",
|
||||
"repo": "uv2nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
||||
@@ -1,65 +1,67 @@
|
||||
{
|
||||
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;
|
||||
|
||||
pythonEnv = python.withPackages (ps:
|
||||
with ps; [
|
||||
numpy
|
||||
pandas
|
||||
matplotlib
|
||||
yfinance
|
||||
# dev
|
||||
ruff
|
||||
streamlit
|
||||
plotly
|
||||
]);
|
||||
in {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [
|
||||
pythonEnv
|
||||
pkgs.uv
|
||||
pkgs.just
|
||||
pkgs.ruff
|
||||
];
|
||||
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 = ./.;
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/lib
|
||||
cp -r . $out/lib/
|
||||
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
|
||||
'';
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [pkgs.uv pkgs.just pkgs.ruff venv];
|
||||
shellHook = ''
|
||||
echo "backtest dev shell — python $(python --version)"
|
||||
echo "backtest dev shell"
|
||||
'';
|
||||
};
|
||||
packages.default = pkgs.stdenv.mkDerivation {
|
||||
pname = "backtest";
|
||||
version = "0.1.0";
|
||||
src = ./.;
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
buildInputs = [ pythonEnv ];
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/lib
|
||||
cp -r . $out/lib/
|
||||
cat > $out/bin/backtest << EOF
|
||||
#!/bin/sh
|
||||
export PATH="${pythonEnv}/bin:\$PATH"
|
||||
cd $out/lib
|
||||
exec ${pythonEnv}/bin/streamlit run $out/lib/app.py \
|
||||
--browser.gatherUsageStats=false \
|
||||
--server.fileWatcherType=none \
|
||||
"\$@"
|
||||
EOF
|
||||
chmod +x $out/bin/backtest
|
||||
'';
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -12,3 +12,9 @@ dependencies = [
|
||||
"streamlit>=1.56.0",
|
||||
"yfinance>=1.2.1",
|
||||
]
|
||||
|
||||
[tool.uv.extra-build-dependencies]
|
||||
multitasking = ["setuptools"]
|
||||
|
||||
[tool.setuptools]
|
||||
packages = []
|
||||
|
||||
Reference in New Issue
Block a user