{%- let section = "# =============================================================================\n#" -%} {%- let not_configured = "# -- not configured --" -%} {%- let newline = "{{$(char newline)}}" -%} {{ section }} # Utility functions for zoxide. # # Default prompt for Nushell. # Taken from: def __zoxide_prompt [] { build-string $(ansi gb) $(pwd) $(ansi reset) '(' $(ansi cb) $(do -i { git rev-parse --abbrev-ref HEAD } | str trim) $(ansi reset) ')' $(ansi yb) $(date format '%m/%d/%Y %I:%M:%S%.3f %p') $(ansi reset) '> ' } {{ section }} # Hook configuration for zoxide. # # Hook to add new entries to the database. {%- match hook %} {%- when InitHook::None %} def __zoxide_hook [] {} {%- when InitHook::Prompt %} def __zoxide_hook [] { shells | where active == $true && name == filesystem | get path | each { zoxide add -- $it } } {%- when InitHook::Pwd %} def __zoxide_hook [] {} echo `zoxide: PWD hooks are not supported on Nushell.{{ newline }} Use 'zoxide init nushell --hook prompt' instead.{{ newline }}` {%- endmatch %} {{ section }} # When using zoxide with --no-aliases, alias these internal functions as # desired. # # Jump to a directory using only keywords. def __zoxide_z [...rest:string] { let args = $(echo $rest | skip 1); if $(shells | where active == $true | get name) != filesystem { if $(echo $args | length) > 1 { echo `zoxide: can only jump directories on filesystem{{ newline }}` } { cd $(echo $args) {%- if echo %} pwd {%- endif %} } } { if $(echo $args | length) == 0 { cd ~ } { if $(echo $args | length) == 1 { let arg0 = $(echo $args | first 1); if $arg0 == '-' { cd - } { if $(echo $arg0 | path exists) { cd $arg0 } { cd $(zoxide query --exclude $(pwd) -- $args | str trim) } } } { cd $(zoxide query --exclude $(pwd) -- $args | str trim) } } {%- if echo %} pwd {%- endif %} } } # Jump to a directory using interactive search. def __zoxide_zi [...rest:string] { if $(shells | where active == $true | get name) != filesystem { echo `zoxide: can only jump directories on filesystem{{ newline }}` } { let args = $(echo $rest | skip 1) cd $(zoxide query -i -- $args | str trim) {%- if echo %} pwd {%- endif %} } } {{ section }} # Convenient aliases for zoxide. Disable these using --no-aliases. # {%- match cmd %} {%- when Some with (cmd) %} alias {{cmd}} = __zoxide_z '' alias {{cmd}}i = __zoxide_zi '' {%- when None %} {{ not_configured }} {%- endmatch %} {{ section }} # To initialize zoxide, first create a Nushell script: # # zoxide init nushell --hook prompt | save ~/.zoxide.nu # # Add this to your configuration (usually ~/.config/nu/config.toml): # # prompt = "__zoxide_hook;__zoxide_prompt" # startup = ["zoxide init nushell --hook prompt | save ~/.zoxide.nu", "source ~/.zoxide.nu"] # # You can replace __zoxide_prompt with a custom prompt.