{ pkgs ? import { }, python3 ? pkgs.python3Full, extraPackages ? [ ], extraLibs ? [ ], }: let inherit (pkgs) lib; ldlibs = lib.makeLibraryPath ( (with pkgs; [ stdenv.cc.cc glib glibc zlib zstd ]) ++ extraLibs ); pythonWrapped = pkgs.symlinkJoin { name = "python"; paths = [ python3 ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' for file in $out/bin/*; do wrapProgram "$file" --prefix LD_LIBRARY_PATH : "${ldlibs}"; done ''; }; in pkgs.mkShellNoCC { packages = [ pythonWrapped pkgs.uv ] ++ extraPackages; shellHook = '' if [ ! -d .venv ]; then ${pythonWrapped}/bin/python3 -m venv .venv else ${pythonWrapped}/bin/python3 -m venv --upgrade .venv fi [ -f .venv/bin/activate ] && source .venv/bin/activate ''; }