mirror of
https://github.com/nushell/nushell.git
synced 2025-08-16 00:48:12 +02:00
add $nu.data-dir
for completions and $nu.cache-dir
for other uses (#13122)
# Description This PR is an attempt to add a standard location for people to put completions in. I saw this topic come up again recently and IIRC we decided to create a standard location. I used the dirs-next crate to dictate where these locations are. I know some people won't like that but at least this gets the ball rolling in a direction that has a standard directory. This is what the default NU_LIB_DIRS looks like now in the default_env.nu. It should also be like this when starting nushell with `nu -n` ```nushell $env.NU_LIB_DIRS = [ ($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts ($nu.data-dir | path join 'completions') # default home for nushell completions ] ``` I also added these default folders to the `$nu` variable so now there is `$nu.data-path` and `$nu.cache-path`. ## Data Dir Default  While I was in there, I also decided to add a cache dir ## Cache Dir Default  ### This is what the default looks like in Ubuntu.  ### This is what it looks like with XDG_CACHE_HOME and XDG_DATA_HOME overridden ```nushell XDG_DATA_HOME=/tmp/data_home XDG_CACHE_HOME=/tmp/cache_home cargo r ```  ### This is what the defaults look like in Windows (username scrubbed to protect the innocent)  How my NU_LIB_DIRS is set in the images above ```nushell $env.NU_LIB_DIRS = [ ($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts '/Users/fdncred/src/nu_scripts' ($nu.config-path | path dirname) ($nu.data-dir | path join 'completions') # default home for nushell completions ] ``` Let the debate begin. # User-Facing Changes <!-- List of all changes that impact the user experience here. This helps us keep track of breaking changes. --> # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass (on Windows make sure to [enable developer mode](https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging)) - `cargo run -- -c "use toolkit.nu; toolkit test stdlib"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
This commit is contained in:
19
src/main.rs
19
src/main.rs
@ -104,7 +104,9 @@ fn main() -> Result<()> {
|
||||
default: nushell_config_path.display().to_string(),
|
||||
},
|
||||
);
|
||||
} else if let Some(old_config) = nu_path::config_dir_old().map(|p| p.join("nushell")) {
|
||||
} else if let Some(old_config) =
|
||||
nu_path::get_canonicalized_path(dirs_next::config_dir()).map(|p| p.join("nushell"))
|
||||
{
|
||||
let xdg_config_empty = nushell_config_path
|
||||
.read_dir()
|
||||
.map_or(true, |mut dir| dir.next().is_none());
|
||||
@ -125,13 +127,22 @@ fn main() -> Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
let default_nushell_completions_path = if let Some(mut path) = nu_path::data_dir() {
|
||||
path.push("nushell");
|
||||
path.push("completions");
|
||||
path
|
||||
} else {
|
||||
std::path::PathBuf::new()
|
||||
};
|
||||
|
||||
let mut default_nu_lib_dirs_path = nushell_config_path.clone();
|
||||
default_nu_lib_dirs_path.push("scripts");
|
||||
engine_state.add_env_var(
|
||||
"NU_LIB_DIRS".to_string(),
|
||||
Value::test_list(vec![Value::test_string(
|
||||
default_nu_lib_dirs_path.to_string_lossy(),
|
||||
)]),
|
||||
Value::test_list(vec![
|
||||
Value::test_string(default_nu_lib_dirs_path.to_string_lossy()),
|
||||
Value::test_string(default_nushell_completions_path.to_string_lossy()),
|
||||
]),
|
||||
);
|
||||
|
||||
let mut default_nu_plugin_dirs_path = nushell_config_path;
|
||||
|
Reference in New Issue
Block a user