75 lines
2.4 KiB
Nix
75 lines
2.4 KiB
Nix
{
|
|
description = "Reusable Python development environment";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
# Python version configuration - easy to change in one place
|
|
pythonVersion = pkgs.python311;
|
|
|
|
# Define Python packages in a separate variable for clarity
|
|
pythonPackages = ps: with ps; [
|
|
# Data science
|
|
numpy
|
|
pandas
|
|
matplotlib
|
|
scipy
|
|
|
|
# Web and networking
|
|
requests
|
|
httpx
|
|
beautifulsoup4
|
|
|
|
# Development tools
|
|
black
|
|
pylint
|
|
pytest
|
|
ipython
|
|
|
|
# Add more packages as needed
|
|
];
|
|
|
|
# Create the Python environment with the specified packages
|
|
pythonEnv = pythonVersion.withPackages pythonPackages;
|
|
in
|
|
{
|
|
# Development shell for interactive use
|
|
devShells.default = pkgs.mkShell {
|
|
buildInputs = [
|
|
pythonEnv
|
|
pkgs.poetry
|
|
pkgs.git
|
|
];
|
|
|
|
shellHook = ''
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🐍 Python $(${pythonVersion}/bin/python --version)"
|
|
echo "📦 Poetry $(${pkgs.poetry}/bin/poetry --version)"
|
|
echo "📂 Working directory: $(pwd)"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
'';
|
|
};
|
|
|
|
# Make the Python environment available as a package
|
|
packages.default = pythonEnv;
|
|
|
|
# Add an app that runs Python directly
|
|
apps.default = flake-utils.lib.mkApp {
|
|
drv = pythonEnv;
|
|
name = "python";
|
|
exePath = "/bin/python";
|
|
};
|
|
|
|
# Add formatter for consistent Nix code formatting
|
|
formatter = pkgs.nixpkgs-fmt;
|
|
}
|
|
);
|
|
}
|