diff --git a/hosts/local-packages.nix b/hosts/local-packages.nix index 7d89de7..22b691f 100644 --- a/hosts/local-packages.nix +++ b/hosts/local-packages.nix @@ -29,6 +29,7 @@ in { ffmpeg gnused gdb + libstdcxx5 stdenv.cc.cc.lib nix-prefetch-git binutils @@ -58,6 +59,7 @@ in { bash customPkgs.fish-rust go + ollama sqls deno redis diff --git a/modules/python.nix b/modules/python.nix index d34d709..25d2c5e 100644 --- a/modules/python.nix +++ b/modules/python.nix @@ -2,48 +2,66 @@ let customPkgs = pkgs.callPackage ../pkgs { inherit pkgs lib; }; + pipConf = pkgs.writeText "pip.conf" '' + [global] + no-cache-dir = false + [install] + ignore-installed = false + [packages] + numpy = "<2.0.0" + ''; + pythonEnv = pkgs.python311.buildEnv.override { + extraLibs = [ + customPkgs.python-pymatting + customPkgs.python-opencv-headless + customPkgs.python-rembg + customPkgs.pythonPackages.numpy # This should be numpy 1.x + pkgs.python311Packages.i3ipc + pkgs.python311Packages.pandas + pkgs.python311Packages.matplotlib + pkgs.python311Packages.scipy + pkgs.python311Packages.requests + pkgs.python311Packages.pip + pkgs.python311Packages.virtualenv + pkgs.python311Packages.ipython + pkgs.python311Packages.six + pkgs.python311Packages.psutil + pkgs.python311Packages.pynvml + pkgs.python311Packages.pyqtgraph + pkgs.python311Packages.pyqt6 + pkgs.python311Packages.cppcheck + pkgs.python311Packages.click + pkgs.python311Packages.typer + pkgs.python311Packages.rich + pkgs.python311Packages.pyyaml + pkgs.python311Packages.pytz + pkgs.python311Packages.pillow + ]; + }; in { options.python = { enable = lib.mkEnableOption "System Python Environment"; }; config = lib.mkIf config.python.enable { environment.systemPackages = with pkgs; [ - (python311.withPackages (pyPkgs: with pyPkgs; [ - numpy - python-pymatting - python-opencv-headless - python-rembg - i3ipc - pandas - matplotlib - scipy - requests - pip - virtualenv - ipython - six - psutil - pynvml - pyqtgraph - pyqt6 - click - typer - rich - pyyaml - pytz - pillow - ])) + pythonEnv python3Packages.pip black ruff uv + stdenv.cc.cc.lib ]; + # Environment variables environment.variables = { PIP_PREFIX = "$HOME/.local"; + PIP_CONFIG_FILE = "${pipConf}"; # Force pip to use our config PYTHONPATH = "$HOME/.local/lib/python3.11/site-packages"; }; - environment.shellAliases = { - python = "python3.11"; - }; + system.userActivationScripts.removeNumpy2 = '' + if [ -d "$HOME/.local/lib/python3.11/site-packages/numpy" ]; then + echo "Removing NumPy from user packages to prevent conflicts..." + rm -rf "$HOME/.local/lib/python3.11/site-packages/numpy"* + fi + ''; }; } diff --git a/pkgs/default.nix b/pkgs/default.nix index aed9492..4442009 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,13 +1,32 @@ -{ - pkgs ? import {}, - lib ? pkgs.lib, -}: { +{ pkgs ? import {}, lib ? pkgs.lib }: + +let + numpy-1 = pkgs.python311Packages.numpy.overridePythonAttrs (oldAttrs: rec { + version = "1.26.4"; + src = pkgs.fetchPypi { + pname = "numpy"; + inherit version; + sha256 = "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"; + }; + meta.priority = -1; + }); + + customPackages = pkgs.python311Packages.override { + overrides = self: super: { + numpy = numpy-1; + }; + }; + +in { + fish-rust = pkgs.callPackage ./fish-rust {}; + python-pymatting = pkgs.callPackage ./python-pymatting { inherit lib; fetchPypi = pkgs.fetchPypi; - python311Packages = pkgs.python311Packages; + python311Packages = customPackages; }; + python-opencv-headless = pkgs.callPackage ./python-opencv-headless { inherit lib; fetchPypi = pkgs.fetchPypi; @@ -15,16 +34,20 @@ pkg-config = pkgs.pkg-config; stdenv = pkgs.stdenv; makeWrapper = pkgs.makeWrapper; - python311Packages = pkgs.python311Packages; + python311Packages = customPackages; }; + python-rembg = pkgs.callPackage ./python-rembg { inherit lib; fetchPypi = pkgs.fetchPypi; + python311Packages = customPackages; + python-pymatting = pkgs.callPackage ./python-pymatting { inherit lib; fetchPypi = pkgs.fetchPypi; - python311Packages = pkgs.python311Packages; + python311Packages = customPackages; }; + python-opencv-headless = pkgs.callPackage ./python-opencv-headless { inherit lib; fetchPypi = pkgs.fetchPypi; @@ -32,10 +55,11 @@ pkg-config = pkgs.pkg-config; stdenv = pkgs.stdenv; makeWrapper = pkgs.makeWrapper; - python311Packages = pkgs.python311Packages; + python311Packages = customPackages; }; - python311Packages = pkgs.python311Packages; }; + + pythonPackages = customPackages; vivid-icons = pkgs.callPackage ./vivid-icons { inherit lib; stdenv = pkgs.stdenv; diff --git a/pkgs/python-opencv-headless/default.nix b/pkgs/python-opencv-headless/default.nix index 3bc9fdf..babc7da 100644 --- a/pkgs/python-opencv-headless/default.nix +++ b/pkgs/python-opencv-headless/default.nix @@ -31,8 +31,8 @@ python311Packages.buildPythonPackage rec { ]; propagatedBuildInputs = with python311Packages; [ - numpy setuptools + numpy ]; dontUseCmakeConfigure = true; diff --git a/pkgs/python-pymatting/default.nix b/pkgs/python-pymatting/default.nix index 14f282d..fa4b814 100644 --- a/pkgs/python-pymatting/default.nix +++ b/pkgs/python-pymatting/default.nix @@ -19,7 +19,6 @@ python311Packages.buildPythonPackage rec { ]; propagatedBuildInputs = with python311Packages; [ - numpy scipy pillow numba diff --git a/pkgs/python-rembg/default.nix b/pkgs/python-rembg/default.nix index 2a51257..030a6d1 100644 --- a/pkgs/python-rembg/default.nix +++ b/pkgs/python-rembg/default.nix @@ -17,7 +17,6 @@ python311Packages.buildPythonPackage rec { setuptools ]; propagatedBuildInputs = with python311Packages; [ - numpy onnxruntime pillow pooch