diff --git a/before_v0.60/virtual_environments/README.md b/before_v0.60/virtual_environments/README.md deleted file mode 100644 index c578d4c4..00000000 --- a/before_v0.60/virtual_environments/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Virtual environment scripts - -The scripts in this directory activate virtual environments like Python venvs -and Conda environments. They follow the pattern described in the [Nushell 0.32 -changelog](https://www.nushell.sh/blog/2021-06-01-nushell_0_32.html#environment-loading-lily-mara): - -``` -$ load-env (activate some-env) -``` - -A custom command (`activate`) creates a table with environment variables and -`load-env` is used to load it into the shell's scope. - -In most cases, deactivation is a matter of restoring the PATH variable to the -state before activating the env and removing any additional variables. There are -no environment-specific elements to this, which is why the same deactivation -script can be used for deactivating any environment of a specific type. For -example, `source conda_deactivate.nu` will deactivate any Conda env, there are -no input parameters. - -## Expected Usage - -1. Source an activation script in your `config.toml`. For example, `conda.nu`. - You'll then have the `conda-env` command available. -2. Create an alias for sourcing the appropriate deactivation script: - `alias conda-deactivate = source /path/to/conda_deactivate.nu` -3. Activate with `load-env (conda-env env-name)`. You might want to define some - shorter aliases for both commands, if typing that every time seems like a - hassle. -4. If you're using [Starship](https://starship.rs/), your prompt should reflect the activated env. -5. When done, deactivate with your alias: `conda-deactivate`. - -Look at the script files to find the exact command name for creating an environment table. - -## `conda.nu` - -Limitations: - -- The "root_prefix" might not actually correspond to the correct path to the Conda envs. You can fix - this for your setup by changing how the root prefix is found in the `conda-env` command. -- Nested envs are not well supported. If you activate a Conda env while another one is - activated, new elements will be appended to the PATH, but the other environment - variables will be overwritten. There's no way to then restore the PATH to the state - it was in before activating the *first* env (at least not with this script directly). -- The prompt is not updated by the script. Consider using [Starship](https://starship.rs/) - with the Python prompt element. - -## `venv.nu` - -Limitations: - -- The prompt is not updated by the script. Consider using [Starship](https://starship.rs/) - with the Python prompt element. \ No newline at end of file diff --git a/before_v0.60/virtual_environments/conda.nu b/before_v0.60/virtual_environments/conda.nu deleted file mode 100644 index 7e874023..00000000 --- a/before_v0.60/virtual_environments/conda.nu +++ /dev/null @@ -1,45 +0,0 @@ -def conda-env [env-name] { - let conda-info = (conda info --envs --json | from json) - let suffix = (if $env-name == "base" {""} {(["envs" $env-name] | path join)}) - let env-dir = ([$conda-info.root_prefix $suffix] | path join) - let old-path = ($nu.path | str collect (path-sep)) - let new-path = (if (windows?) { (conda-create-path-windows $env-dir) } { (conda-create-path-unix $env-dir) }) - let new-env = [[name, value]; - [CONDA_DEFAULT_ENV $env-name] - [CONDA_PREFIX $env-dir] - [CONDA_PROMPT_MODIFIER $"[($env-name)]"] - [CONDA_SHLVL "1"] - [CONDA_OLD_PATH $old-path]] - - $new-env | append $new-path -} - -def conda-create-path-windows [env-dir] { - # 1. Conda on Windows needs a few additional Path elements - # 2. The path env var on Windows is called Path (not PATH) - let env-path = [ - $env-dir - ([$env-dir "Scripts"] | path join) - ([$env-dir "Library" "mingw-w64"] | path join) - ([$env-dir "Library" "bin"] | path join) - ([$env-dir "Library" "usr" "bin"] | path join) - ] - let new-path = ([$env-path $nu.path] | flatten | str collect (path-sep)) - [[name, value]; [Path $new-path]] -} - -def conda-create-path-unix [env-dir] { - let env-path = [ - ([$env-dir "bin"] | path join) - ] - let new-path = ([$env-path $nu.path] | flatten | str collect (path-sep)) - [[name, value]; [PATH $new-path]] -} - -def windows? [] { - (sys).host.name == "Windows" -} - -def path-sep [] { - if (windows?) { ";" } { ":" } -} diff --git a/before_v0.60/virtual_environments/conda_deactivate.nu b/before_v0.60/virtual_environments/conda_deactivate.nu deleted file mode 100644 index 69f3daeb..00000000 --- a/before_v0.60/virtual_environments/conda_deactivate.nu +++ /dev/null @@ -1,7 +0,0 @@ -let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" }) -let-env $path-name = $nu.env.CONDA_OLD_PATH -unlet-env CONDA_PROMPT_MODIFIER -unlet-env CONDA_PREFIX -unlet-env CONDA_SHLVL -unlet-env CONDA_DEFAULT_ENV -unlet-env CONDA_OLD_PATH diff --git a/before_v0.60/virtual_environments/venv.nu b/before_v0.60/virtual_environments/venv.nu deleted file mode 100644 index ba1ab81f..00000000 --- a/before_v0.60/virtual_environments/venv.nu +++ /dev/null @@ -1,33 +0,0 @@ -def venv [venv-dir] { - let venv-abs-dir = ($venv-dir | path expand) - let venv-name = ($venv-abs-dir | path basename) - let old-path = ($nu.path | str collect (path-sep)) - let new-path = (if (windows?) { (venv-path-windows $venv-abs-dir) } { (venv-path-unix $venv-abs-dir) }) - let new-env = [[name, value]; - [VENV_OLD_PATH $old-path] - [VIRTUAL_ENV $venv-name]] - - $new-env | append $new-path -} - -def venv-path-unix [venv-dir] { - let venv-path = ([$venv-dir "bin"] | path join) - let new-path = ($nu.path | prepend $venv-path | str collect (path-sep)) - [[name, value]; [PATH $new-path]] -} - -def venv-path-windows [venv-dir] { - # 1. Conda on Windows needs a few additional Path elements - # 2. The path env var on Windows is called Path (not PATH) - let venv-path = ([$venv-dir "Scripts"] | path join) - let new-path = ($nu.path | prepend $venv-path | str collect (path-sep)) - [[name, value]; [Path $new-path]] -} - -def windows? [] { - (sys).host.name == "Windows" -} - -def path-sep [] { - if (windows?) { ";" } { ":" } -} diff --git a/before_v0.60/virtual_environments/venv_deactivate.nu b/before_v0.60/virtual_environments/venv_deactivate.nu deleted file mode 100644 index 95cdd115..00000000 --- a/before_v0.60/virtual_environments/venv_deactivate.nu +++ /dev/null @@ -1,4 +0,0 @@ -let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" }) -let-env $path-name = $nu.env.VENV_OLD_PATH -unlet-env VIRTUAL_ENV -unlet-env VENV_OLD_PATH diff --git a/modules/virtual_environments/venv.nu b/modules/virtual_environments/venv.nu new file mode 100644 index 00000000..f70a4971 --- /dev/null +++ b/modules/virtual_environments/venv.nu @@ -0,0 +1,25 @@ +export def --env activate [venv_dir] { + let venv_abs_dir = ($venv_dir | path expand) + let venv_name = ($venv_abs_dir | path basename) + let old_path = $env.PATH + let new_path = (venv-path $venv_abs_dir) + let new_env = ({VENV_OLD_PATH: $old_path, VIRTUAL_ENV: $venv_name} | merge $new_path) + load-env $new_env +} + +def "venv-path" [venv_dir] { + let env_path = [ + $venv_dir, + ([$venv_dir, "bin"] | path join) + ] + return { + PATH: ($env.PATH | prepend $env_path) + } +} + +export def --env deactivate [] { + $env.PATH = $env.VENV_OLD_PATH + hide-env VIRTUAL_ENV + hide-env VENV_OLD_PATH + +}