mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-02 15:17:47 +00:00
auto-venv for python: update to be compatible with nu 0.80 (#513)
* auto-venv python passes syntax checks * update readme.md * everything works!
This commit is contained in:
parent
4b82839c90
commit
272b7e2b93
5 changed files with 32 additions and 26 deletions
|
@ -4,21 +4,22 @@ The scripts in this directory activate virtual environments whenever you cd into
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. set `$env.AUTO_VENV_TRIGGER` to the name of a script file
|
1. set `$env.AUTO_VENV_TRIGGER` as the preferred name of a trigger file
|
||||||
1. import `auto-venv` into your environment
|
1. import `auto-venv` into your environment
|
||||||
1. cd into a folder that contains your trigger file
|
1. Create a symlink via `ln -s` of the script file `./auto-venv/venvs/python-venv.nu` to a trigger file in project at `/path/to/project/$AUTO_VENV_TRIGGER`
|
||||||
|
1. `cd` into `/path/to/project/`
|
||||||
|
|
||||||
ex.
|
For example:
|
||||||
```nu
|
```nu
|
||||||
# config.nu
|
# config.nu
|
||||||
|
|
||||||
export-env {
|
export-env {
|
||||||
let-env AUTO_VENV_TRIGGER = '__auto-venv.nu'
|
let-env AUTO_VENV_TRIGGER = '__auto-venv.nu'
|
||||||
|
|
||||||
source-env ~/path/to/nu_scripts/virtual_environments/auto-venv/auto-venv.nu
|
source-env ~/path/to/nu_scripts/modules/virtual_environments/auto-venv/auto-venv.nu
|
||||||
}
|
}
|
||||||
|
|
||||||
use ~/path/to/nu_scripts/virtual_environments/auto-venv/auto-venv.nu *
|
use ~/path/to/nu_scripts/modules/virtual_environments/auto-venv/auto-venv.nu *
|
||||||
```
|
```
|
||||||
|
|
||||||
When `auto-venv` detects that a file of that name exists in the folder you cd'ed into (or one of it's parents), it will automatically enable an overlay (as defined by the trigger file).
|
When `auto-venv` detects that a file of that name exists in the folder you cd'ed into (or one of it's parents), it will automatically enable an overlay (as defined by the trigger file).
|
||||||
|
|
|
@ -10,7 +10,7 @@ export-env {
|
||||||
# this needs to be set somewhere
|
# this needs to be set somewhere
|
||||||
# let-env AUTO_VENV_TRIGGER = '__auto-venv.nu'
|
# let-env AUTO_VENV_TRIGGER = '__auto-venv.nu'
|
||||||
|
|
||||||
let hooks = default-hooks
|
let hooks = (default-hooks)
|
||||||
|
|
||||||
let hooks = ($hooks | append (build-hooks))
|
let hooks = ($hooks | append (build-hooks))
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ export-env {
|
||||||
|
|
||||||
def default-hooks [] {
|
def default-hooks [] {
|
||||||
(if ($env.config.hooks.env_change.PWD != $nothing) {
|
(if ($env.config.hooks.env_change.PWD != $nothing) {
|
||||||
$env.config.hooks.env_change.PWD
|
[$env.config.hooks.env_change.PWD]
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
[]
|
[]
|
||||||
|
@ -35,7 +35,7 @@ def build-hooks [] {
|
||||||
let _env = $env
|
let _env = $env
|
||||||
let pwd = $_env.PWD
|
let pwd = $_env.PWD
|
||||||
|
|
||||||
let trigger = path_extensions path find-sub . __trigger__ --type "file"
|
let trigger = (path_extensions path find-sub . __trigger__ --type ["symlink", "file"])
|
||||||
|
|
||||||
cd ($trigger | path dirname)
|
cd ($trigger | path dirname)
|
||||||
overlay use __trigger__ as __auto_venv
|
overlay use __trigger__ as __auto_venv
|
||||||
|
|
|
@ -14,7 +14,7 @@ export def "path walk" [
|
||||||
] {
|
] {
|
||||||
let list = ($path | path expand | path split);
|
let list = ($path | path expand | path split);
|
||||||
|
|
||||||
$list | each -n { |$part| (
|
$list | enumerate | each { |$part| (
|
||||||
$list | first ($part.index + 1) | path join;
|
$list | first ($part.index + 1) | path join;
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
@ -24,12 +24,12 @@ export def "path walk" [
|
||||||
export def "path check-sub" [
|
export def "path check-sub" [
|
||||||
folder: any,
|
folder: any,
|
||||||
subfolder: string,
|
subfolder: string,
|
||||||
--type: string
|
--type: list
|
||||||
] {
|
] {
|
||||||
|
|
||||||
(ls -a $folder
|
(ls -a $folder
|
||||||
| where (
|
| where (
|
||||||
($type == $nothing or $it.type == $type)
|
($type == $nothing or $it.type in $type)
|
||||||
and ($it.name | path basename) == $subfolder
|
and ($it.name | path basename) == $subfolder
|
||||||
)
|
)
|
||||||
| length
|
| length
|
||||||
|
@ -43,9 +43,9 @@ export def "path check-sub" [
|
||||||
export def "path find-sub" [
|
export def "path find-sub" [
|
||||||
folder: any,
|
folder: any,
|
||||||
subfolder: string,
|
subfolder: string,
|
||||||
--type: string
|
--type: list
|
||||||
] {
|
] {
|
||||||
let paths = path walk $folder;
|
let paths = (path walk $folder);
|
||||||
|
|
||||||
let paths = ( $paths
|
let paths = ( $paths
|
||||||
| where (
|
| where (
|
||||||
|
@ -55,5 +55,5 @@ export def "path find-sub" [
|
||||||
|
|
||||||
if ($paths != $nothing) and ($paths | length) > 0 {
|
if ($paths != $nothing) and ($paths | length) > 0 {
|
||||||
[ ($paths | first), $subfolder ] | path join
|
[ ($paths | first), $subfolder ] | path join
|
||||||
}
|
} else {[]}
|
||||||
}
|
}
|
|
@ -28,7 +28,7 @@ export def has-entered-venv [
|
||||||
after: path,
|
after: path,
|
||||||
] {
|
] {
|
||||||
|
|
||||||
let target = path find-sub $after $env.AUTO_VENV_TRIGGER
|
let target = (path find-sub $after $env.AUTO_VENV_TRIGGER)
|
||||||
|
|
||||||
(if ($target | is-empty) {
|
(if ($target | is-empty) {
|
||||||
false
|
false
|
||||||
|
@ -47,13 +47,17 @@ export def has-swapped-venv [
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
let target = path find-sub $after $env.AUTO_VENV_TRIGGER
|
let target = (path find-sub $after $env.AUTO_VENV_TRIGGER)
|
||||||
|
|
||||||
(if ($target | is-empty) {
|
(if ($target | is-empty) {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
(if ('VIRTUAL_ENV' in $env) {
|
||||||
$env.VIRTUAL_ENV != $target
|
$env.VIRTUAL_ENV != $target
|
||||||
|
} else {
|
||||||
|
false # should it default to `false`?
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -57,11 +57,12 @@ export def-env auto-venv-on-enter [
|
||||||
)
|
)
|
||||||
|
|
||||||
let venv_path = ([$virtual_env $bin] | path join)
|
let venv_path = ([$virtual_env $bin] | path join)
|
||||||
let new_path = ($old_path | prepend $venv_path | str join $path_sep)
|
# let new_path = ($old_path | prepend $venv_path | str join $path_sep)
|
||||||
|
let new_path = ($old_path | prepend $venv_path)
|
||||||
|
|
||||||
# Creating the new prompt for the session
|
# Creating the new prompt for the session
|
||||||
let virtual_prompt = if ($virtual_prompt == '') {
|
let virtual_prompt = if ($virtual_prompt == '') {
|
||||||
$'(char lparen)($virtual_env | path basename)(char rparen) '
|
$'(char lparen)($virtual_env | path split | drop 1 | path join | path basename)(char rparen) '
|
||||||
} else {
|
} else {
|
||||||
'(' + $virtual_prompt + ') '
|
'(' + $virtual_prompt + ') '
|
||||||
}
|
}
|
||||||
|
@ -74,13 +75,13 @@ export def-env auto-venv-on-enter [
|
||||||
|
|
||||||
# If there is no default prompt, then only the env is printed in the prompt
|
# If there is no default prompt, then only the env is printed in the prompt
|
||||||
let new_prompt = if (has-env 'PROMPT_COMMAND') {
|
let new_prompt = if (has-env 'PROMPT_COMMAND') {
|
||||||
if ($old_prompt_command | describe) == 'block' {
|
if (($old_prompt_command | describe) in ['block', 'closure']) {
|
||||||
{ $'($virtual_prompt)(do $old_prompt_command)' }
|
$'($virtual_prompt)(do $old_prompt_command)'
|
||||||
} else {
|
} else {
|
||||||
{ $'($virtual_prompt)($old_prompt_command)' }
|
$'($virtual_prompt)($old_prompt_command)'
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
{ $'($virtual_prompt)' }
|
$'($virtual_prompt)'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Environment variables that will be batched loaded to the virtual env
|
# Environment variables that will be batched loaded to the virtual env
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue