$env.config = { bracketed_paste: true buffer_editor: "" datetime_format: {} edit_mode: vi error_style: fancy float_precision: 2 footer_mode: 25 render_right_prompt_on_last_line: false show_banner: false use_ansi_coloring: true use_kitty_protocol: true shell_integration: { osc2: false osc7: true osc8: true osc9_9: false osc133: true osc633: true reset_application_mode: true } } $env.config.color_config = { binary: white block: white bool: {|| if $in { "light_green" } else { "light_red" } } cell-path: white date: purple duration: white empty: blue filesize: cyan float: white header: green_bold hints: dark_gray int: white list: white nothing: white range: white record: white row_index: green_bold search_result: { bg: red fg: white } separator: white string: {|| if $in =~ "^(#|0x)[a-fA-F0-9]+$" { ($in | str replace "0x" "#") } else { "white" } } leading_trailing_space_bg: { attr: n } shape_and: purple_bold shape_binary: purple_bold shape_block: blue_bold shape_bool: light_cyan shape_closure: green_bold shape_custom: green shape_datetime: cyan_bold shape_directory: cyan shape_external: cyan shape_externalarg: green_bold shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold shape_garbage: { fg: white bg: red attr: b} shape_globpattern: cyan_bold shape_int: purple_bold shape_internalcall: cyan_bold shape_list: cyan_bold shape_literal: blue shape_match_pattern: green shape_nothing: light_cyan shape_operator: yellow shape_or: purple_bold shape_pipe: purple_bold shape_range: yellow_bold shape_record: cyan_bold shape_redirection: purple_bold shape_signature: green_bold shape_string: green shape_table: blue_bold shape_vardecl: purple shape_variable: purple shape_matching_brackets: { attr: u } shape_string_interpolation: cyan_bold } $env.config.ls = { clickable_links: true use_ls_colors: true } $env.config.rm.always_trash = true $env.config.table = { header_on_separator: false index_mode: always mode: light padding: { left: 1 right: 1 } show_empty: true trim: { methodology: wrapping wrapping_try_keep_words: true truncating_suffix: "..." } } $env.config.explore = { command_bar_text: { fg: "#C4C9C6" } highlight: { fg: black bg: yellow } status: { error: { fg: white bg: red } warn: {} info: {} } status_bar_background: { fg: "#1D1F21" bg: "#C4C9C6" } table: { split_line: { fg: "#404040" } selected_cell: { bg: light_blue } selected_row: {} selected_column: {} } } $env.config.history = { file_format: sqlite isolation: false max_size: 100_000 sync_on_enter: true } $env.config.completions = { algorithm: prefix case_sensitive: false partial: true quick: true external: { enable: true max_results: 100 completer: {|tokens: list| let expanded = scope aliases | where name == $tokens.0 | get --ignore-errors expansion.0 mut expanded_tokens = if $expanded != null and $tokens.0 != "cd" { $expanded | split row " " | append ($tokens | skip 1) } else { $tokens } $expanded_tokens.0 = ($expanded_tokens.0 | str trim --left --char "^") fish --command $"complete '--do-complete=($expanded_tokens | str join ' ')'" | $"value(char tab)description(char newline)" + $in | from tsv --flexible --no-infer } } } $env.config.cursor_shape = { vi_insert: block vi_normal: block } $env.config.hooks = { command_not_found: {||} display_output: { tee { table --expand | print } | $env.last = $in } pre_execution: [ { let prompt = commandline | str trim if ($prompt | is-empty) { return } print $"(ansi title)($prompt) — nu(char bel)" } ] pre_prompt: [ { if (which direnv | is-empty) { return } direnv export json | from json | default {} | load-env # Direnv outputs $PATH as a string, but nushell silently breaks if isn't a list-like table. # The following behemoth of Nu code turns this into nu's format while following the standards of how to handle quotes, use it if you need quote handling instead of the line below it: # $env.PATH = $env.PATH | parse --regex ('' + `((?:(?:"(?:(?:\\[\\"])|.)*?")|(?:'.*?')|[^` + (char env_sep) + `]*)*)`) | each {|x| $x.capture0 | parse --regex `(?:"((?:(?:\\"|.))*?)")|(?:'(.*?)')|([^'"]*)` | each {|y| if ($y.capture0 != "") { $y.capture0 | str replace -ar `\\([\\"])` `$1` } else if ($y.capture1 != "") { $y.capture1 } else $y.capture2 } | str join } $env.PATH = $env.PATH | split row (char env_sep) } ] } # Retrieve the output of the last command. def _ []: nothing -> any { $env.last } $env.config.menus = [ { marker: "| " name: completion_menu only_buffer_difference: false style: { description_text: yellow selected_text: green_reverse text: green } type: { col_padding: 2 col_width: 20 columns: 4 layout: columnar } } { marker: "? " name: history_menu only_buffer_difference: true style: { description_text: yellow selected_text: green_reverse text: green } type: { layout: list page_size: 10 } } { marker: "? " name: help_menu only_buffer_difference: true style: { description_text: yellow selected_text: green_reverse text: green } type: { col_padding: 2 col_width: 20 columns: 4 description_rows: 10 layout: description selection_rows: 4 } } ] $env.config.keybindings = [ { name: copy_commandline modifier: alt keycode: char_c mode: [ vi_normal vi_insert ] event: { send: executehostcommand cmd: 'commandline | nu-highlight | $"```ansi\n($in)\n```" | copy' } } { name: completion_menu modifier: none keycode: tab mode: [ vi_normal vi_insert ] event: { until: [ { send: menu name: completion_menu } { send: menunext } { edit: complete } ] } } { name: history_menu modifier: control keycode: char_h mode: [ vi_insert vi_normal ] event: { send: menu name: history_menu } } { name: escape modifier: none keycode: escape mode: [ vi_normal vi_insert ] event: { send: esc } } { name: cancel_command modifier: control keycode: char_c mode: [ vi_normal vi_insert ] event: { send: ctrlc } } { name: quit_shell modifier: control keycode: char_d mode: [ vi_normal vi_insert ] event: { send: ctrld } } { name: clear_screen modifier: control keycode: char_l mode: [ vi_normal vi_insert ] event: { send: clearscreen } } { name: open_command_editor modifier: control keycode: char_o mode: [ vi_normal vi_insert ] event: { send: openeditor } } { name: abbr modifier: control keycode: space mode: [ vi_normal vi_insert ] event: [ { send: menu name: abbr_menu } { edit: insertchar, value: " " } ] } { name: move_down modifier: none keycode: down mode: [ vi_normal vi_insert ] event: { until: [ { send: menudown } { send: down } ] } } { name: move_left modifier: none keycode: left mode: [ vi_normal vi_insert ] event: { until: [ { send: menuleft } { send: left } ] } } { name: move_right_or_take_history_hint modifier: none keycode: right mode: [ vi_normal vi_insert ] event: { until: [ { send: historyhintcomplete } { send: menuright } { send: right } ] } } { name: move_one_word_left modifier: control keycode: left mode: [ vi_normal vi_insert ] event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint modifier: control keycode: right mode: [ vi_normal vi_insert ] event: { until: [ { send: historyhintwordcomplete } { edit: movewordright } ] } } { name: move_to_line_start modifier: control keycode: char_a mode: [ vi_normal vi_insert ] event: { edit: movetolinestart } } { name: move_to_line_end_or_take_history_hint modifier: control keycode: char_e mode: [ vi_normal vi_insert ] event: { until: [ { send: historyhintcomplete } { edit: movetolineend } ] } } { name: delete_one_character_backward modifier: none keycode: backspace mode: vi_insert event: { edit: backspace } } { name: delete_one_word_backward modifier: control keycode: backspace mode: vi_insert event: { edit: backspaceword } } { name: newline_or_run_command modifier: none keycode: enter mode: vi_insert event: { send: enter } } { name: take_history_hint modifier: control keycode: char_f mode: [ vi_normal vi_insert ] event: { until: [ { send: historyhintcomplete } ] } } ] source ~/.config/nushell/atuin.nu source ~/.config/nushell/zoxide.nu # source ~/.config/nushell/source_profile.nu # fix sudo by prepending /run/wrappers/bin to the PATH # $env.PATH = ($env.PATH | split row (char esep) | prepend '/run/wrappers/bin') $env.STARSHIP_SHELL = "nu" def create_left_prompt [] { starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)' } # Use nushell functions to define your right and left prompt $env.PROMPT_COMMAND = { || create_left_prompt } $env.PROMPT_COMMAND_RIGHT = "" # The prompt indicators are environmental variables that represent # the state of the prompt $env.PROMPT_INDICATOR = "" $env.PROMPT_INDICATOR_VI_INSERT = ": " $env.PROMPT_INDICATOR_VI_NORMAL = "〉" $env.PROMPT_MULTILINE_INDICATOR = "::: "