diff --git a/src/.config/nushell/config.nu b/src/.config/nushell/config.nu index 2962b97..f3ad571 100644 --- a/src/.config/nushell/config.nu +++ b/src/.config/nushell/config.nu @@ -713,5 +713,4 @@ $env.config = { ] } -const zoxide_conf = "~/.config/nushell/zoxide.nu" -source $zoxide_conf +source zoxide.nu diff --git a/src/.config/nushell/env.nu b/src/.config/nushell/env.nu index 1bf6750..7755b73 100644 --- a/src/.config/nushell/env.nu +++ b/src/.config/nushell/env.nu @@ -95,6 +95,9 @@ $env.NU_PLUGIN_DIRS = [ # To load from a custom file you can use: # source ($nu.default-config-dir | path join 'custom.nu') +let conf_dir = $nu.config-path | path dirname +$env.NU_LIB_DIRS | append conf_dir + if (which zoxide | length) > 0 { - zoxide init nushell | save -f ~/.config/nushell/zoxide.nu + zoxide init nushell | save -f ([$conf_dir zoxide.nu] | path join) } diff --git a/src/.config/nushell/zoxide.nu b/src/.config/nushell/zoxide.nu index ab9b439..aa338b6 100644 --- a/src/.config/nushell/zoxide.nu +++ b/src/.config/nushell/zoxide.nu @@ -1,6 +1,60 @@ -# DUMMY FILE for systems that do not have zoxide installed +# Code generated by zoxide. DO NOT EDIT. -# nu doesn't like sourcing files conditionally, so we can't just have it ignore if zoxide.nu does not exist -# watch issue: https://github.com/nushell/nushell/issues/8214 +# ============================================================================= +# +# Hook configuration for zoxide. +# -# zoxide will overwrite this if it exists +# Initialize hook to add new entries to the database. +if (not ($env | default false __zoxide_hooked | get __zoxide_hooked)) { + $env.__zoxide_hooked = true + $env.config = ($env | default {} config).config + $env.config = ($env.config | default {} hooks) + $env.config = ($env.config | update hooks ($env.config.hooks | default {} env_change)) + $env.config = ($env.config | update hooks.env_change ($env.config.hooks.env_change | default [] PWD)) + $env.config = ($env.config | update hooks.env_change.PWD ($env.config.hooks.env_change.PWD | append {|_, dir| + zoxide add -- $dir + })) +} + +# ============================================================================= +# +# When using zoxide with --no-cmd, alias these internal functions as desired. +# + +# Jump to a directory using only keywords. +def --env __zoxide_z [...rest:string] { + let arg0 = ($rest | append '~').0 + let path = if (($rest | length) <= 1) and ($arg0 == '-' or ($arg0 | path expand | path type) == dir) { + $arg0 + } else { + (zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n") + } + cd $path +} + +# Jump to a directory using interactive search. +def --env __zoxide_zi [...rest:string] { + cd $'(zoxide query --interactive -- ...$rest | str trim -r -c "\n")' +} + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +alias z = __zoxide_z +alias zi = __zoxide_zi + +# ============================================================================= +# +# Add this to your env file (find it by running `$nu.env-path` in Nushell): +# +# zoxide init nushell | save -f ~/.zoxide.nu +# +# Now, add this to the end of your config file (find it by running +# `$nu.config-path` in Nushell): +# +# source ~/.zoxide.nu +# +# Note: zoxide only supports Nushell v0.89.0+.