From 71c5ac3f198b8ce8b4fdbad6e6868122582cd305 Mon Sep 17 00:00:00 2001
From: Marty Oehme <contact@martyoeh.me>
Date: Fri, 14 Mar 2025 23:58:33 +0100
Subject: [PATCH] atuin: Set up configuration

---
 terminal/.config/atuin/config.toml  | 75 ++++++++++++++++++++++++++
 terminal/.config/zsh/.zshrc         |  5 +-
 terminal/.local/share/atuin/init.nu | 81 -----------------------------
 3 files changed, 78 insertions(+), 83 deletions(-)
 create mode 100644 terminal/.config/atuin/config.toml
 delete mode 100644 terminal/.local/share/atuin/init.nu

diff --git a/terminal/.config/atuin/config.toml b/terminal/.config/atuin/config.toml
new file mode 100644
index 0000000..9ac07ab
--- /dev/null
+++ b/terminal/.config/atuin/config.toml
@@ -0,0 +1,75 @@
+## which search mode to use
+## possible values: prefix, fulltext, fuzzy, skim
+# search_mode = "fuzzy"
+
+## which filter mode to use
+## possible values: global, host, session, directory
+# filter_mode = "global"
+
+# Enable 'workspace' filtering if we are in a git dir
+workspaces = true
+
+# don't always update timestamps etc
+prefers_reduced_motion = true
+
+# don't waste a line
+show_tabs = false
+
+# enter vi normal/insert mode automatically
+keymap_mode = "auto"
+
+## which filter mode to use when atuin is invoked from a shell up-key binding
+## the accepted values are identical to those of "filter_mode"
+## leave unspecified to use same mode set in "filter_mode"
+filter_mode_shell_up_key_binding = "session"
+
+## which search mode to use when atuin is invoked from a shell up-key binding
+## the accepted values are identical to those of "search_mode"
+## leave unspecified to use same mode set in "search_mode"
+# search_mode_shell_up_key_binding = "fuzzy"
+
+## which style to use
+## possible values: auto, full, compact
+style = "compact"
+
+## prevent commands matching any of these regexes from being written to history.
+## Note that these regular expressions are unanchored, i.e. if they don't start
+## with ^ or end with $, they'll match anywhere in the command.
+## For details on the supported regular expression syntax, see
+## https://docs.rs/regex/latest/regex/#syntax
+history_filter = [
+    "^pass"
+  # "^secret-cmd",
+  # "^innocuous-cmd .*--secret=.+"
+]
+
+## prevent commands run with cwd matching any of these regexes from being written
+## to history. Note that these regular expressions are unanchored, i.e. if they don't
+## start with ^ or end with $, they'll match anywhere in CWD.
+## For details on the supported regular expression syntax, see
+## https://docs.rs/regex/latest/regex/#syntax
+# cwd_filter = [
+#   "^/very/secret/area"
+# ]
+
+## Configure whether or not to show the help row, which includes the current Atuin
+## version (and whether an update is available), a keymap hint, and the total
+## amount of commands in your history.
+# show_help = true
+
+enter_accept = true
+
+#[stats]
+# Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
+#common_subcommands = [
+#  "cargo",
+#  "go",
+#  "git",
+#  "npm",
+#  "yarn",
+#  "pnpm",
+#  "kubectl",
+#]
+# 
+# Set commands that should be totally stripped and ignored from stats
+#common_prefix = ["sudo"]
diff --git a/terminal/.config/zsh/.zshrc b/terminal/.config/zsh/.zshrc
index e2b9c87..9e06438 100644
--- a/terminal/.config/zsh/.zshrc
+++ b/terminal/.config/zsh/.zshrc
@@ -25,7 +25,6 @@ if command -v zr >/dev/null 2>&1; then
             molovo/tipz \
             ael-code/zsh-colored-man-pages \
             MichaelAquilina/zsh-auto-notify \
-            junegunn/fzf.git/shell/key-bindings.zsh \
             Aloxaf/fzf-tab \
             zdharma-continuum/fast-syntax-highlighting \
             zsh-users/zsh-autosuggestions \
@@ -35,7 +34,6 @@ if command -v zr >/dev/null 2>&1; then
 else # or manually
     [ -e /usr/share/oh-my-zsh/plugins/colored-man-pages/colored-man-pages.plugin.zsh ] && source /usr/share/oh-my-zsh/plugins/colored-man-pages/colored-man-pages.plugin.zsh
     [ -e /usr/share/oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh ] && source /usr/share/oh-my-zsh/plugins/command-not-found/command-not-found.plugin.zsh
-    [ -e /usr/share/fzf/key-bindings.zsh ] && source /usr/share/fzf/key-bindings.zsh
     ## find the correct installed tab-completion version
     PLUG_FOLDER="/usr/share/zsh/plugins"
     [ -e $PLUG_FOLDER/fzf-tab/fzf-tab.plugin.zsh ] && source $PLUG_FOLDER/fzf-tab/fzf-tab.plugin.zsh
@@ -223,6 +221,9 @@ bindkey '^N' history-beginning-search-forward
 
 # search history backwards <c-r>
 bindkey '^o' history-incremental-search-backward
+bindkey -M vicmd '^o' history-incremental-search-backward
+bindkey '^r' atuin-search-viins
+bindkey -M vicmd '^r' atuin-search-vicmd
 # cycle through history results
 bindkey -M isearch '^P' history-incremental-search-backward
 bindkey -M isearch '^N' history-incremental-search-forward
diff --git a/terminal/.local/share/atuin/init.nu b/terminal/.local/share/atuin/init.nu
deleted file mode 100644
index 93ebb7f..0000000
--- a/terminal/.local/share/atuin/init.nu
+++ /dev/null
@@ -1,81 +0,0 @@
-# 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') }
-#         }
-#     )
-# )
-