dotfiles/terminal/.config/nushell/config.nu
Marty Oehme dc71f747da
nu: Copy basic sh aliases
Held back a little by the issue that you can't really set aliases
conditionally (yet?) in nushell, which is kind of fundamental to my
zsh/sh alias setup. If a program exists, we add some nice aliases -- if
not, we simply degrade gracefully and don't add anything.

PR to track issue:
https://github.com/nushell/nushell/issues/5068
2025-11-30 23:05:15 +01:00

148 lines
4.3 KiB
Text

# config.nu
#
# Installed by:
# version = "0.102.0"
#
# This file is used to override default Nushell settings, define
# (or import) custom commands, or run any other startup tasks.
# See https://www.nushell.sh/book/configuration.html
#
# This file is loaded after env.nu and before login.nu
#
$env.config.show_banner = false
$env.config.edit_mode = "vi"
# Enable same behavior as fzf-tab-complete for zsh
$env.config.completions.algorithm = "fuzzy"
$env.PROMPT_INDICATOR = ""
$env.PROMPT_MULTILINE_INDICATOR = "::: " # overwritten by starship
# enable transient prompt with starship
$env.TRANSIENT_PROMPT_COMMAND = ^starship module character
$env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| ^starship module cmd_duration }
# FIXME: Disabled for now to use starship prompts instead
# but still very buggy. See:
# https://github.com/starship/starship/issues/5423 and
# https://github.com/nushell/nushell/issues/14650
# $env.PROMPT_INDICATOR_VI_INSERT = ": "
# $env.PROMPT_INDICATOR_VI_NORMAL = "〉"
$env.PROMPT_INDICATOR_VI_INSERT = ""
$env.PROMPT_INDICATOR_VI_NORMAL = ""
# Temporary workaround
$env.config.cursor_shape.vi_insert = "line"
$env.config.cursor_shape.vi_normal = "block"
# load starship prompt
mkdir ($nu.data-dir | path join "vendor/autoload")
starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu")
# load atuin history
atuin init nu | save -f ($nu.data-dir | path join "vendor/autoload/atuin.nu")
# load zoxide bookmarks
zoxide init nushell | save -f ($nu.data-dir | path join "vendor/autoload/zoxide.nu")
# load carapace completions
source ~/.cache/carapace/init.nu
# keybinds
$env.config.keybindings = [
{ modifier: control keycode: char_o mode: [emacs, vi_normal, vi_insert] event: null },
{
name: clear_screen
modifier: alt
keycode: char_l
mode: ["emacs", "vi_normal", "vi_insert"]
event: [
{edit: Clear}
{send: Enter}
]
}
# reedline edits
{
name: insert_last_token
modifier: alt
keycode: char_.
mode: ["emacs", "vi_normal", "vi_insert"]
event: [
{ edit: InsertString, value: "!$" }
{ send: Enter }
]
}
{
name: open_editor
modifier: control
keycode: char_e
mode: ["emacs", "vi_normal", "vi_insert"]
event: {
send: OpenEditor
}
}
{
name: toggle_sudo
modifier: alt
keycode: char_s
mode: [emacs vi_insert vi_normal]
event: {
send: ExecuteHostCommand
cmd: " let cmd = (commandline); commandline edit (if $cmd starts-with sudo { $cmd | str replace -r '^sudo ' '' } else { 'sudo ' ++ $cmd });"
}
}
{
name: partial_history_complete
modifier: None
keycode: char_e
mode: [vi_normal]
event: {
until: [
{ send: HistoryHintWordComplete }
{ edit: MoveWordRight }
]
}
}
# file menus
{
name: run_zoxide
modifier: alt
keycode: char_c
mode: ["emacs", "vi_normal", "vi_insert"]
event: {
send: executehostcommand
cmd: " zoxide query --interactive"
}
}
{
name: run_zoxide_vicmd
modifier: shift
keycode: char_c
mode: [ "vi_normal"]
event: {
send: executehostcommand
cmd: " zoxide query --interactive"
}
}
{
name: insert_file_fzf
modifier: control
keycode: char_t
mode: ["emacs", "vi_normal", "vi_insert"]
event: {
send: executehostcommand
# intentional eol space to prevent adding cmd to history
cmd: "
let fzf_ctrl_t_command = \$\"fd --type file --hidden | fzf --preview 'bat --color=always --style=full --line-range=:500 {}' \";
let result = nu -l -i -c $fzf_ctrl_t_command;
commandline edit --append $result;
commandline set-cursor --end
"
}
}
# job control
{
name: unfreeze_job
modifier: control
keycode: char_z
mode: ["emacs", "vi_normal", "vi_insert"]
event: {
send: executehostcommand
cmd: "job unfreeze"
}
}
]