feat(config): add Atuin AI inline integration and keybinding

This commit is contained in:
Prad Nukala committed 2026-09-25 12:25:19 -04:00
1 parent 8a33be3e28
commit a82921c9e2
3 files changed
+53

No files matched your search

+50
View File
@@ -35,6 +35,7 @@ test -s ~/.config/envman/load.fish; and source ~/.config/envman/load.fish
if status is-interactive if status is-interactive
atuin init fish | source atuin init fish | source
atuin ai init fish | source
end end
# cmux # cmux
@@ -44,3 +45,52 @@ fish_add_path "/home/prad/.cache/.bun/bin"
for _f in $HOME/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.fish for _f in $HOME/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.fish
test -r "$_f"; and source "$_f"; and break test -r "$_f"; and source "$_f"; and break
end end
# Question mark at start of line - natural language mode
function _atuin_ai_question_mark
set -l buf (commandline -b)
# If buffer is empty or just contains '?', trigger natural language mode
if test -z "$buf" -o "$buf" = "?"
commandline -r ""
# Close the semantic prompt zone (OSC 133 C) so terminals with
# shell integration don't erase the TUI's output during their
# resize-time prompt reflow.
printf '\033]133;C\007' > /dev/tty
# Run atuin ai inline, swapping stdout and stderr
set -l output (atuin ai inline --hook 3>&1 1>&2 2>&3 | string collect)
if string match --quiet '__atuin_ai_print__:*' "$output"
echo (string replace "__atuin_ai_print__:" "" -- "$output" | string collect)
commandline -f repaint
else if test "$output" = "__atuin_ai_cancel__"
commandline -f repaint
else if string match --quiet '__atuin_ai_execute__:*' "$output"
# Execute the command immediately
set -l cmd (string replace "__atuin_ai_execute__:" "" -- "$output" | string collect)
commandline -r "$cmd"
commandline -f repaint
commandline -f execute
else if string match --quiet '__atuin_ai_insert__:*' "$output"
# Insert the command for editing
set -l cmd (string replace "__atuin_ai_insert__:" "" -- "$output" | string collect)
commandline -r "$cmd"
commandline -f repaint
else if test -n "$output"
# Default: insert for editing
commandline -r "$output"
commandline -f repaint
else
commandline -f repaint
end
else if not contains -- "$fish_key_bindings" fish_vi_key_bindings fish_hybrid_key_bindings
# Not at empty prompt, just insert the question mark
commandline -i "?"
end
end
# Set up keybindings
bind "?" _atuin_ai_question_mark
+2
View File
@@ -11,3 +11,5 @@ function ai --description 'Choose and launch an AI CLI via gum'
$choice $choice
end end
end end
@@ -18,6 +18,7 @@ function fish_user_key_bindings
bind -M $mode ctrl-o 'gho; commandline -f repaint' bind -M $mode ctrl-o 'gho; commandline -f repaint'
bind -M $mode ctrl-p 'pj; commandline -f repaint' bind -M $mode ctrl-p 'pj; commandline -f repaint'
bind -M $mode ctrl-a 'omp; commandline -f repaint' bind -M $mode ctrl-a 'omp; commandline -f repaint'
bind -M $mode ctrl-w 'atuin ai inline; commandline -f repaint'
# Arrow keys: atuin owns up (bound from config.fish, survives the # Arrow keys: atuin owns up (bound from config.fish, survives the
# fish_vi_key_bindings reset above because that only erases presets), # fish_vi_key_bindings reset above because that only erases presets),