# Source this in your ~/.config/nushell/config.nu
# minimum supported version = 0.93.0
module compat {
export def --wrapped "random uuid -v 7" [...rest] { atuin uuid }
}
use (if not (
(version).major > 0 or
(version).minor >= 103
) { "compat" }) *
if 'ATUIN_SESSION' not-in $env or ('ATUIN_SHLVL' not-in $env) or ($env.ATUIN_SHLVL != ($env.SHLVL? | default "")) {
$env.ATUIN_SESSION = (random uuid -v 7 | str replace -a "-" "")
$env.ATUIN_SHLVL = ($env.SHLVL? | default "")
}
hide-env -i ATUIN_HISTORY_ID
# Magic token to make sure we don't record commands run by keybindings
let ATUIN_KEYBINDING_TOKEN = $"# (random uuid)"
let _atuin_pre_execution = {||
if ($nu | get history-enabled?) == false {
return
}
let cmd = (commandline)
if ($cmd | is-empty) {
return
}
if not ($cmd | str starts-with $ATUIN_KEYBINDING_TOKEN) {
$env.ATUIN_HISTORY_ID = (atuin history start -- $cmd | complete | get stdout | str trim)
}
}
let _atuin_pre_prompt = {||
let last_exit = $env.LAST_EXIT_CODE
if 'ATUIN_HISTORY_ID' not-in $env {
return
}
with-env { ATUIN_LOG: error } {
if (version).minor >= 104 or (version).major > 0 {
job spawn {
^atuin history end $'--exit=($env.LAST_EXIT_CODE)' -- $env.ATUIN_HISTORY_ID | complete
} | ignore
} else {
do { atuin history end $'--exit=($last_exit)' -- $env.ATUIN_HISTORY_ID } | complete
}
}
hide-env ATUIN_HISTORY_ID
}
def _atuin_search_cmd [...flags: string] {
if (version).minor >= 106 or (version).major > 0 {
[
$ATUIN_KEYBINDING_TOKEN,
([
`with-env { ATUIN_LOG: error, ATUIN_QUERY: (commandline), ATUIN_SHELL: nu } {`,
([
'let output = (run-external atuin search',
($flags | append [--interactive] | each {|e| $'"($e)"'}),
'e>| str trim)',
] | flatten | str join ' '),
'if ($output | str starts-with "__atuin_accept__:") {',
'commandline edit --accept ($output | str replace "__atuin_accept__:" "")',
'} else {',
'commandline edit $output',
'}',
`}`,
] | flatten | str join "\n"),
]
} else {
[
$ATUIN_KEYBINDING_TOKEN,
([
`with-env { ATUIN_LOG: error, ATUIN_QUERY: (commandline) } {`,
'commandline edit',
'(run-external atuin search',
($flags | append [--interactive] | each {|e| $'"($e)"'}),
' e>| str trim)',
`}`,
] | flatten | str join ' '),
]
} | str join "\n"
}
$env.config = ($env | default {} config).config
$env.config = ($env.config | default {} hooks)
$env.config = (
$env.config | upsert hooks (
$env.config.hooks
| upsert pre_execution (
$env.config.hooks | get pre_execution? | default [] | append $_atuin_pre_execution)
| upsert pre_prompt (
$env.config.hooks | get pre_prompt? | default [] | append $_atuin_pre_prompt)
)
)
$env.config = ($env.config | default [] keybindings)