{%- let section = "# =============================================================================" -%} {%- let not_configured = "# -- not configured --" -%} # Code generated by zoxide. DO NOT EDIT. module zoxide_integration { # From version 0.110.0, $nu.home-path has been renamed to $nu.home-dir const homedir = if $nu.home-dir? != null { $nu.home-dir } else { $nu.home-path } {{ section }} # # Hook configuration for zoxide. # {% if hook == InitHook::None -%} {{ not_configured }} {%- else -%} # Initialize hook to add new entries to the database. export-env { {%- if hook == InitHook::Prompt %} let __zoxide_hooked = $env.config.hooks.pre_prompt | any { get __zoxide_hook? } if not $__zoxide_hooked { $env.config.hooks.pre_prompt = ($env.config.hooks.pre_prompt | append { __zoxide_hook: true, code: {|| ^zoxide add -- $env.PWD} }) } {%- else if hook == InitHook::Pwd %} let __zoxide_hooked = $env.config.hooks.env_change.PWD? | default [] | any { get __zoxide_hook? } if not $__zoxide_hooked { $env.config.hooks.env_change.PWD = ($env.config.hooks.env_change.PWD? | append { __zoxide_hook: true, code: {|_, dir| ^zoxide add -- $dir} }) } {%- endif %} } {%- endif %} {{ section }} # # Completion for __zoxide_z # def "nu-complete __zoxide_z" [context: string] { let ast = ast --flatten $context | skip 1 # If the user has typed a space after the first argument, use the custom # completer. If not, use the built-in directory completion. if ($ast | is-empty) { return null } if $ast.0.span.end >= ($context | str length) { return null } let completions = ^zoxide query --exclude $env.PWD --list -- ...$ast.content | lines | each { if $in starts-with $"($homedir)(char psep)" { str replace $homedir "~" } else {} | debug --raw-value } | wrap value | insert span { start: ($ast | first).span.start, end: ($ast | last).span.end } { options: { sort: false, case_sensitive: false, completion_algorithm: "substring", } completions: $completions, } } {{ section }} # # When using zoxide with --no-cmd, alias these internal functions as desired. # # Jump to a directory using only keywords. export def --env --wrapped __zoxide_z [...rest: directory@"nu-complete __zoxide_z"] { let path = match $rest { [] => {'~'}, [ '-' ] => {'-'}, [ $arg ] if ($arg | path expand | path type) == 'dir' => {$arg} _ => { ^zoxide query --exclude $env.PWD -- ...$rest | str trim -r -c "\n" } } cd $path {%- if echo %} echo $env.PWD {%- endif %} } # Jump to a directory using interactive search. export def --env --wrapped __zoxide_zi [...rest: string] { cd $'(^zoxide query --interactive -- ...$rest | str trim -r -c "\n")' {%- if echo %} echo $env.PWD {%- endif %} } {{ section }} # # Commands for zoxide. Disable these using --no-cmd. # {%- match cmd %} {%- when Some with (cmd) %} export alias {{cmd}} = __zoxide_z export alias {{cmd}}i = __zoxide_zi {%- when None %} {{ not_configured }} {%- endmatch %} } export use zoxide_integration * {{ section }} # # 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.106.0+.