feat(config): add $env.nupm.config#124
Conversation
|
NOTE: this PR is based off of #122 and the diff will be noisy until that one is merged as I cannot submit a PR against a remote feature branch. Here's the actual patch: diff --git a/README.md b/README.md
index 5dd056b..48382fc 100644
--- a/README.md
+++ b/README.md
@@ -39,22 +39,17 @@ One can change the location of the Nupm directory with `$env.nupm.home`, e.g.
$env.nupm.home = ($env.XDG_DATA_HOME | path join "nupm")
```
-Because Nupm will install modules and scripts in `{{nupm-home}}/modules/` and `{{nupm-home}}/scripts/` respectively, it is a good idea to add these paths to `$env.NU_LIB_DIRS` and `$env.PATH` respectively, e.g. if you have `$env.nupm.home` defined:
+If you would like installed modules, scripts, and plugins to show up in [nushell search
+paths](https://www.nushell.sh/book/configuration.html#launch-stages), set the
+`nu_search_path` to `true` before calling `use nupm`:
```nushell
# env.nu
-
-$env.NU_LIB_DIRS = [
- ...
- ($env.nupm.home | path join "modules")
-]
-
-$env.PATH = (
- $env.PATH
- | split row (char esep)
- | ....
- | prepend ($env.nupm.home | path join "scripts")
- | uniq
-)
+$env.nupm = {
+ home: "path/to/my_home"
+ config: { nu_search_path: true }
+}
+# ...
+use path/to/nupm
```
## :rocket: usage [[toc](#table-of-content)]
diff --git a/nupm/mod.nu b/nupm/mod.nu
index 38551bd..98bc43d 100644
--- a/nupm/mod.nu
+++ b/nupm/mod.nu
@@ -13,18 +13,23 @@ export module test.nu
export-env {
# Ensure that $env.nupm is always set when running nupm. Any missing variaables are set by `$BASE_NUPM_CONFIG`
- $env.nupm = ($env.nupm? | default {}
- | merge $BASE_NUPM_CONFIG
- # set missing values to default while retaining
- # $env.nupm.default
- | merge $BASE_NUPM_CONFIG.default
- )
+ $env.nupm = $BASE_NUPM_CONFIG | merge deep ($env.nupm? | default {})
+ # set missing values to default while
+ # retaining defaults in $env.nupm.default
+ $env.nupm.default = $BASE_NUPM_CONFIG
# read from registry index but don't overwrite registires already present in $env.nupm.registries
$env.nupm.registries = $env.nupm.index-path | open-index | merge $env.nupm.registries
$env.ENV_CONVERSIONS.nupm = {
from_string: { |s| $s | from nuon }
to_string: { |v| $v | to nuon }
}
+ if $env.nupm.config.nu_search_path {
+ let nupm_lib_dirs = [modules, scripts] | each {|s| $env.nupm.home | path join $s }
+ $env.NU_LIB_DIRS = $env.NU_LIB_DIRS | prepend $nupm_lib_dirs | uniq
+
+ let nupm_plugin_dir = $env.nupm.home| path join "plugins"
+ $env.NU_PLUGIN_DIRS = $env.NU_PLUGIN_DIRS | prepend $nupm_plugin_dir | uniq
+ }
use std/log []
}
diff --git a/nupm/utils/dirs.nu b/nupm/utils/dirs.nu
index cb3942b..835d779 100644
--- a/nupm/utils/dirs.nu
+++ b/nupm/utils/dirs.nu
@@ -1,14 +1,18 @@
-# Base values for nupm that are used as defaults if not present in `$env.nupm`
export const REGISTRY_IDX_FILENAME = "registry_index.nuon"
+# Base values for nupm that are used as defaults if not present in `$env.nupm`
export const BASE_NUPM_CONFIG = {
- default: {
- home: ($nu.default-config-dir | path join nupm)
- cache: ($nu.default-config-dir | path join nupm cache)
- index-path: ($nu.default-config-dir | path join nupm $REGISTRY_IDX_FILENAME)
- temp: ($nu.temp-path | path join nupm)
- registries: {
- nupm: 'https://raw.githubusercontent.com/nushell/nupm/main/registry/registry.nuon'
- }
+ home: ($nu.default-config-dir | path join nupm)
+ cache: ($nu.default-config-dir | path join nupm cache)
+ index-path: ($nu.default-config-dir | path join nupm $REGISTRY_IDX_FILENAME)
+ temp: ($nu.temp-path | path join nupm)
+ registries: {
+ nupm: 'https://raw.githubusercontent.com/nushell/nupm/main/registry/registry.nuon'
+ }
+ config: {
+ # TODO
+ # sync_list: { ... }
+ # sync_on_launch: false
+ nu_search_path: false
}
}
@@ -93,7 +97,7 @@ export def cache-dir [--ensure]: nothing -> path {
}
export def tmp-dir [subdir: string, --ensure]: nothing -> path {
- let d = $BASE_NUPM_CONFIG.default.temp
+ let d = $BASE_NUPM_CONFIG.temp
| path join $subdir
| path join (random chars -l 8)
diff --git a/tests/mod.nu b/tests/mod.nu
index 9760fa3..f9f3cec 100644
--- a/tests/mod.nu
+++ b/tests/mod.nu
@@ -140,10 +140,10 @@ export def env-vars-are-set [] {
use ../nupm
- assert equal $env.nupm.home $BASE_NUPM_CONFIG.default.home
- assert equal $env.nupm.temp $BASE_NUPM_CONFIG.default.temp
- assert equal $env.nupm.cache $BASE_NUPM_CONFIG.default.cache
- assert equal $env.nupm.registries $BASE_NUPM_CONFIG.default.registries
+ assert equal $env.nupm.home $BASE_NUPM_CONFIG.home
+ assert equal $env.nupm.temp $BASE_NUPM_CONFIG.temp
+ assert equal $env.nupm.cache $BASE_NUPM_CONFIG.cache
+ assert equal $env.nupm.registries $BASE_NUPM_CONFIG.registries
}
export def generate-local-registry [] {
@@ -377,3 +377,31 @@ export def registry-fetch [] {
assert ("Registry 'invalid-registry' not found" in $invalid_registry_result)
}
}
+
+export def config-nu-search-path [] {
+ with-test-env {
+ use ../nupm
+ # By default, nu_search_path should be false
+ assert equal $env.nupm.config.nu_search_path false
+
+ # Verify nupm directories are NOT added to NU_LIB_DIRS when disabled
+ let modules_dir = $env.nupm.home | path join modules
+ let scripts_dir = $env.nupm.home | path join scripts
+ let plugins_dir = $env.nupm.home | path join plugins
+
+ # Check that nupm dirs are not in the search paths
+ assert (not ($modules_dir in $env.NU_LIB_DIRS))
+ assert (not ($scripts_dir in $env.NU_LIB_DIRS))
+ assert (not ($plugins_dir in $env.NU_PLUGIN_DIRS))
+
+ # Manually set the config to true to test the functionality
+ $env.nupm.config.nu_search_path = true
+
+ use ../nupm
+ assert equal $env.nupm.config.nu_search_path true
+
+ assert ($modules_dir in $env.NU_LIB_DIRS)
+ assert ($scripts_dir in $env.NU_LIB_DIRS)
+ assert ($plugins_dir in $env.NU_PLUGIN_DIRS)
+ }
+} |
|
We don't need Otherwise, grouping all |
|
#122 (review) given the comments here, I will put this PR into draft rather than close and, given time, start the overlay work here. I still think internally a nested Line 15 in 996c984 $env.NUPM_(HOME|TEMP|CACHE) fill in their respective fields.
This approach should play well with the intent overlays, lmk what you think @kubouch. |
|
This should be revisited with overlays |
Description
This PR introduces a config key for
$env.nupmas well as a way to automatically add nupm plugin, script, and module directories to the relevant nushell search pathsallowing for this configuration:
defaultkey inBASE_NUPM_CONFIG