diff --git a/pkgs/development/python-modules/conda/0001-conda_exe.patch b/pkgs/development/python-modules/conda/0001-conda_exe.patch new file mode 100644 index 0000000000000..12ea4bc5ab0dc --- /dev/null +++ b/pkgs/development/python-modules/conda/0001-conda_exe.patch @@ -0,0 +1,51 @@ +--- a/conda/base/context.py ++++ b/conda/base/context.py +@@ -754,7 +754,7 @@ + + @property + def conda_prefix(self): +- return abspath(sys.prefix) ++ return expand("~/.conda") + + @property + @deprecated( +@@ -787,28 +787,17 @@ + The vars can refer to each other if necessary since the dict is ordered. + None means unset it. + """ +- if context.dev: +- return { +- "CONDA_EXE": sys.executable, +- # do not confuse with os.path.join, we are joining paths with ; or : delimiters +- "PYTHONPATH": os.pathsep.join( +- (CONDA_SOURCE_ROOT, os.environ.get("PYTHONPATH", "")) +- ), +- "_CE_M": "-m", +- "_CE_CONDA": "conda", +- "CONDA_PYTHON_EXE": sys.executable, +- } +- else: +- bin_dir = "Scripts" if on_win else "bin" +- exe = "conda.exe" if on_win else "conda" +- # I was going to use None to indicate a variable to unset, but that gets tricky with +- # error-on-undefined. +- return { +- "CONDA_EXE": os.path.join(sys.prefix, bin_dir, exe), +- "_CE_M": "", +- "_CE_CONDA": "", +- "CONDA_PYTHON_EXE": sys.executable, +- } ++ import sys ++ return { ++ "CONDA_EXE": sys.executable, ++ # do not confuse with os.path.join, we are joining paths with ; or : delimiters ++ "PYTHONPATH": os.pathsep.join( ++ [CONDA_SOURCE_ROOT, os.environ.get("PYTHONPATH", "")] + [path for path in sys.path if "site-packages" in path] ++ ), ++ "_CE_M": "-m", ++ "_CE_CONDA": "conda", ++ "CONDA_PYTHON_EXE": sys.executable, ++ } + + @memoizedproperty + def channel_alias(self): diff --git a/pkgs/development/python-modules/conda/default.nix b/pkgs/development/python-modules/conda/default.nix index e6dbe10914e7c..e2ec8bd2d46ef 100644 --- a/pkgs/development/python-modules/conda/default.nix +++ b/pkgs/development/python-modules/conda/default.nix @@ -1,38 +1,83 @@ -{ lib -, buildPythonPackage -, pythonAtLeast -, fetchPypi -, pycosat -, requests -, ruamel-yaml -, isPy3k -, enum34 +{ + lib, + buildPythonPackage, + pythonRelaxDepsHook, + hostPlatform, + fetchFromGitHub, + # build dependencies + hatchling, + hatch-vcs, + # runtime dependencies + archspec, + conda-libmamba-solver, + conda-package-handling, + distro, + jsonpatch, + packaging, + platformdirs, + pluggy, + pycosat, + requests, + ruamel-yaml, + tqdm, + truststore, + # runtime options + defaultEnvPath ? "~/.conda/envs", # default path to store conda environments + defaultPkgPath ? "~/.conda/pkgs", # default path to store download conda packages }: - -# Note: this installs conda as a library. The application cannot be used. -# This is likely therefore NOT what you're looking for. - buildPythonPackage rec { pname = "conda"; - version = "4.3.16"; - format = "setuptools"; + version = "24.1.2"; + pyproject = true; - # this is a very outdated version of conda that isn't compatible with python 3.10+ - disabled = pythonAtLeast "3.10"; - - src = fetchPypi { + src = fetchFromGitHub { inherit pname version; - sha256 = "a91ef821343dea3ba9670f3d10b36c1ace4f4c36d70c175d8fc8886e94285953"; + owner = "conda"; + repo = "conda"; + rev = version; + hash = "sha256-L/Y7Bb3R5YqXbjTN4CRPFnkgymVLrxuFmjVzpvt28dE="; }; - propagatedBuildInputs = [ pycosat requests ruamel-yaml ] ++ lib.optional (!isPy3k) enum34; + nativeBuildInputs = [ pythonRelaxDepsHook ]; + + build-system = [ + hatchling + hatch-vcs + ]; + + dependencies = [ + archspec + conda-libmamba-solver + conda-package-handling + distro + jsonpatch + packaging + platformdirs + pluggy + pycosat + requests + ruamel-yaml + tqdm + truststore + ]; + + patches = [ ./0001-conda_exe.patch ]; + + makeWrapperArgs = [ + "--set CONDA_EXE ${placeholder "out"}/bin/conda" + ''--set-default CONDA_ENVS_PATH "${defaultEnvPath}"'' + ''--set-default CONDA_PKGS_DIRS "${defaultPkgPath}"'' + ]; + + pythonImportsCheck = [ "conda" ]; - # No tests - doCheck = false; + # menuinst is currently not packaged + pythonRemoveDeps = lib.optionals (!hostPlatform.isWindows) [ "menuinst" ]; meta = { description = "OS-agnostic, system-level binary package manager"; homepage = "https://github.com/conda/conda"; license = lib.licenses.bsd3; + maintainers = [ lib.maintainers.ericthemagician ]; }; }