Spaces:
Running
Running
# virtualenv activation module | |
# Activate with `overlay use activate.nu` | |
# Deactivate with `deactivate`, as usual | |
# | |
# To customize the overlay name, you can call `overlay use activate.nu as foo`, | |
# but then simply `deactivate` won't work because it is just an alias to hide | |
# the "activate" overlay. You'd need to call `overlay hide foo` manually. | |
export-env { | |
def is-string [x] { | |
($x | describe) == 'string' | |
} | |
def has-env [...names] { | |
$names | each {|n| | |
$n in $env | |
} | all {|i| $i == true} | |
} | |
# Emulates a `test -z`, but btter as it handles e.g 'false' | |
def is-env-true [name: string] { | |
if (has-env $name) { | |
# Try to parse 'true', '0', '1', and fail if not convertible | |
let parsed = (do -i { $env | get $name | into bool }) | |
if ($parsed | describe) == 'bool' { | |
$parsed | |
} else { | |
not ($env | get -i $name | is-empty) | |
} | |
} else { | |
false | |
} | |
} | |
let virtual_env = 'C:\Users\Admin\roop-unleashed\mynewshinyroop' | |
let bin = 'Scripts' | |
let is_windows = ($nu.os-info.family) == 'windows' | |
let path_name = (if (has-env 'Path') { | |
'Path' | |
} else { | |
'PATH' | |
} | |
) | |
let venv_path = ([$virtual_env $bin] | path join) | |
let new_path = ($env | get $path_name | prepend $venv_path) | |
# If there is no default prompt, then use the env name instead | |
let virtual_env_prompt = (if ('' | is-empty) { | |
($virtual_env | path basename) | |
} else { | |
'' | |
}) | |
let new_env = { | |
$path_name : $new_path | |
VIRTUAL_ENV : $virtual_env | |
VIRTUAL_ENV_PROMPT : $virtual_env_prompt | |
} | |
let new_env = (if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') { | |
$new_env | |
} else { | |
# Creating the new prompt for the session | |
let virtual_prefix = $'(char lparen)($virtual_env_prompt)(char rparen) ' | |
# Back up the old prompt builder | |
let old_prompt_command = (if (has-env 'PROMPT_COMMAND') { | |
$env.PROMPT_COMMAND | |
} else { | |
'' | |
}) | |
let new_prompt = (if (has-env 'PROMPT_COMMAND') { | |
if 'closure' in ($old_prompt_command | describe) { | |
{|| $'($virtual_prefix)(do $old_prompt_command)' } | |
} else { | |
{|| $'($virtual_prefix)($old_prompt_command)' } | |
} | |
} else { | |
{|| $'($virtual_prefix)' } | |
}) | |
$new_env | merge { | |
PROMPT_COMMAND : $new_prompt | |
VIRTUAL_PREFIX : $virtual_prefix | |
} | |
}) | |
# Environment variables that will be loaded as the virtual env | |
load-env $new_env | |
} | |
export alias pydoc = python -m pydoc | |
export alias deactivate = overlay hide activate | |