zoxide/templates/nushell.txt
2021-05-06 04:31:57 +05:30

116 lines
3.2 KiB
Plaintext

{%- let section = "# =============================================================================\n#" -%}
{%- let not_configured = "# -- not configured --" -%}
{%- let newline = "{{$(char newline)}}" -%}
{{ section }}
# Utility functions for zoxide.
#
# Default prompt for Nushell.
# Taken from: <https://github.com/nushell/nushell/blob/main/docs/sample_config/config.toml>
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.