@@ -489,48 +489,63 @@ namespace mamba
489489 // TODO the following shouldn't live here but in a shell hook
490490 content << R"nu( def --env ")nu" << exe_name << R"nu( activate" [name: string] {)nu" ;
491491 content << R"###(
492- #add condabin when base env
493- if $env.MAMBA_SHLVL? == null {
494- $env.MAMBA_SHLVL = 0
495- $env.PATH = ($env.PATH | prepend $"($env.MAMBA_ROOT_PREFIX)/condabin")
496- }
497- #ask mamba how to setup the environment and set the environment
498- (^($env.MAMBA_EXE) shell activate --shell nu $name
499- | str replace --regex '\s+' '' --all
500- | split row (if $nu.os-info.name == "windows" { ";" } else { ":" })
501- | parse --regex '(.*)=(.+)'
502- | transpose --header-row
503- | into record
504- | load-env
505- )
506- $env.PATH = $env.PATH | split row (char esep)
507- # update prompt
508- if ($env.CONDA_PROMPT_MODIFIER? != null) {
509- $env.PROMPT_COMMAND = {|| $env.CONDA_PROMPT_MODIFIER + (do $env.PROMPT_COMMAND_BK)}
510- }
511- })###" << " \n " ;
492+
493+ #add condabin when base env
494+ if $env.MAMBA_SHLVL? == null {
495+ $env.MAMBA_SHLVL = 0
496+ $env.PATH = ($env.PATH | prepend $"($env.MAMBA_ROOT_PREFIX)/condabin")
497+ }
498+
499+ try {
500+ let new_env = ^($env.MAMBA_EXE) shell activate --shell nu $name
501+ # Process and load environment only if mamba command succeeded
502+ $new_env
503+ | lines
504+ | str replace --regex '\s+' '' --all
505+ | parse --regex '([^=]+)=(.+)'
506+ | reduce -f {} { |it, acc|
507+ $acc | merge {
508+ $it.capture0: (
509+ if ($it.capture0 == "PATH") or ($it.capture0 | str ends-with "_PATH") {
510+ $it.capture1 | split row (if $nu.os-info.name == "Windows" { ";" } else { ":" }) | where { |path| $path != "" }
511+ } else {
512+ $it.capture1
513+ }
514+ )
515+ }
516+ } | load-env
517+
518+ # Set up prompt
519+ $env.CONDA_PROMPT_MODIFIER = "(" + $name + ")"
520+ if ($env.PROMPT_COMMAND_BK? == null) {
521+ $env.PROMPT_COMMAND_BK = $env.PROMPT_COMMAND
522+ }
523+ $env.PROMPT_COMMAND = {|| $env.CONDA_PROMPT_MODIFIER + " " + (do $env.PROMPT_COMMAND_BK)}
524+
525+ } catch { | err |
526+ echo $"Failed to activate ($name) environment: ($err.msg)"
527+ }
528+ })###" << " \n " ;
512529
513530 content << R"nu( def --env ")nu" << exe_name << R"nu( deactivate" [] {)nu" ;
514531 content << R"###(
515532 #remove active environment except base env
516- if $env.CONDA_PROMPT_MODIFIER? != null {
517- # unset set variables
518- for x in (^$env.MAMBA_EXE shell deactivate --shell nu
519- | split row (if $nu.os-info.name == "windows" { ";" } else { ":" }) {
520- if ("hide-env" in $x) {
521- hide-env ($x | parse "hide-env {var}").var.0
522- } else if $x != "" {
523- let keyValue = ($x
524- | str replace --regex '\s+' "" --all
525- | parse '{key}={value}'
526- )
527- load-env {$keyValue.0.key: $keyValue.0.value}
528- }
533+ for x in (^$env.MAMBA_EXE shell deactivate --shell nu
534+ | split row (if $nu.os-info.name == "windows" { ";" } else { ":" })) {
535+ if ("hide-env" in $x) {
536+ hide-env ($x | parse "hide-env {var}").var.0
537+ } else if $x != "" {
538+ let keyValue = ($x
539+ | str replace --regex '\s+' "" --all
540+ | parse '{key}={value}'
541+ )
542+ load-env {$keyValue.0.key: $keyValue.0.value}
543+ }
529544 }
530545 # reset prompt
531546 $env.PROMPT_COMMAND = $env.PROMPT_COMMAND_BK
532547 }
533- } )###" << " \n " ;
548+ )###" << " \n " ;
534549 content << " # <<< mamba initialize <<<\n " ;
535550 return content.str ();
536551 }
0 commit comments