terminal: Add unified history for shells
Added atuin for nice shell history. Trying it out for now but seems non-intrusive enough that I will probably keep it for a while even if I don't use it.
This commit is contained in:
parent
a5727c135b
commit
97114d74fb
5 changed files with 86 additions and 0 deletions
|
@ -16,6 +16,7 @@ asix-ax88179-dkms A kernel module for ASIX AX88178A AX88179 USB 3.0 network adap
|
||||||
aspell-de German dictionary for aspell R
|
aspell-de German dictionary for aspell R
|
||||||
aspell-en English dictionary for aspell R
|
aspell-en English dictionary for aspell R
|
||||||
atool A script for managing file archives of various types R
|
atool A script for managing file archives of various types R
|
||||||
|
atuin Magical shell history R
|
||||||
aubio A tool for extracting annotations from audio signals R
|
aubio A tool for extracting annotations from audio signals R
|
||||||
autofs A kernel-based automounter for Linux A
|
autofs A kernel-based automounter for Linux A
|
||||||
barrier Open-source KVM software based on Synergy (GUI) R
|
barrier Open-source KVM software based on Synergy (GUI) R
|
||||||
|
|
|
|
@ -32,3 +32,5 @@ eval "$(zoxide init bash)"
|
||||||
set -o vi
|
set -o vi
|
||||||
stty time 0
|
stty time 0
|
||||||
bind 'set keyseq-timeout 1'
|
bind 'set keyseq-timeout 1'
|
||||||
|
|
||||||
|
eval "$(atuin init bash)"
|
||||||
|
|
|
@ -766,3 +766,4 @@ $env.PROMPT_INDICATOR_VI_NORMAL = "⟨ "
|
||||||
$env.PROMPT_MULTILINE_INDICATOR = "::: "
|
$env.PROMPT_MULTILINE_INDICATOR = "::: "
|
||||||
|
|
||||||
use ~/.cache/starship/init.nu
|
use ~/.cache/starship/init.nu
|
||||||
|
source ~/.local/share/atuin/init.nu
|
||||||
|
|
|
@ -94,6 +94,7 @@ setopt autocd
|
||||||
|
|
||||||
eval "$(starship init zsh)"
|
eval "$(starship init zsh)"
|
||||||
eval "$(zoxide init zsh)"
|
eval "$(zoxide init zsh)"
|
||||||
|
eval "$(atuin init zsh)"
|
||||||
|
|
||||||
# Speed up autocomplete, force prefix mapping
|
# Speed up autocomplete, force prefix mapping
|
||||||
zstyle ':completion:*' accept-exact '*(N)'
|
zstyle ':completion:*' accept-exact '*(N)'
|
||||||
|
|
81
terminal/.local/share/atuin/init.nu
Normal file
81
terminal/.local/share/atuin/init.nu
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# Source this in your ~/.config/nushell/config.nu
|
||||||
|
$env.ATUIN_SESSION = (atuin uuid)
|
||||||
|
|
||||||
|
# Magic token to make sure we don't record commands run by keybindings
|
||||||
|
let ATUIN_KEYBINDING_TOKEN = $"# (random uuid)"
|
||||||
|
|
||||||
|
let _atuin_pre_execution = {||
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let _atuin_pre_prompt = {||
|
||||||
|
let last_exit = $env.LAST_EXIT_CODE
|
||||||
|
if 'ATUIN_HISTORY_ID' not-in $env {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
with-env { ATUIN_LOG: error } {
|
||||||
|
do { atuin history end $'--exit=($last_exit)' -- $env.ATUIN_HISTORY_ID | null } | null
|
||||||
|
|
||||||
|
}
|
||||||
|
hide-env ATUIN_HISTORY_ID
|
||||||
|
}
|
||||||
|
|
||||||
|
def _atuin_search_cmd [...flags: string] {
|
||||||
|
[
|
||||||
|
$ATUIN_KEYBINDING_TOKEN,
|
||||||
|
([
|
||||||
|
`commandline (ATUIN_LOG=error run-external --redirect-stderr atuin search`,
|
||||||
|
($flags | append [--interactive, --] | each {|e| $'"($e)"'}),
|
||||||
|
`(commandline) | complete | $in.stderr | str substring ..-1)`,
|
||||||
|
] | 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 -i pre_execution | default [] | append $_atuin_pre_execution)
|
||||||
|
| upsert pre_prompt (
|
||||||
|
$env.config.hooks | get -i pre_prompt | default [] | append $_atuin_pre_prompt)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
$env.config = ($env.config | default [] keybindings)
|
||||||
|
|
||||||
|
$env.config = (
|
||||||
|
$env.config | upsert keybindings (
|
||||||
|
$env.config.keybindings
|
||||||
|
| append {
|
||||||
|
name: atuin
|
||||||
|
modifier: control
|
||||||
|
keycode: char_r
|
||||||
|
mode: [emacs, vi_normal, vi_insert]
|
||||||
|
event: { send: executehostcommand cmd: (_atuin_search_cmd) }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# The up arrow keybinding has surprising behavior in Nu, and is disabled by default.
|
||||||
|
# See https://github.com/atuinsh/atuin/issues/1025 for details
|
||||||
|
# $env.config = (
|
||||||
|
# $env.config | upsert keybindings (
|
||||||
|
# $env.config.keybindings
|
||||||
|
# | append {
|
||||||
|
# name: atuin
|
||||||
|
# modifier: none
|
||||||
|
# keycode: up
|
||||||
|
# mode: [emacs, vi_normal, vi_insert]
|
||||||
|
# event: { send: executehostcommand cmd: (_atuin_search_cmd '--shell-up-key-binding') }
|
||||||
|
# }
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
|
Loading…
Reference in a new issue