From 3801e9bf62ef24e3fe977233e8c76b172176ef29 Mon Sep 17 00:00:00 2001 From: reo101 Date: Sun, 21 Jul 2024 18:04:00 +0300 Subject: [PATCH] feat(nu)!: update config for `nushell` `0.95.0` --- .../reo101-shell/nushell/config.nu | 319 ++++++++++++------ 1 file changed, 221 insertions(+), 98 deletions(-) diff --git a/modules/home-manager/reo101-shell/nushell/config.nu b/modules/home-manager/reo101-shell/nushell/config.nu index 296852d..ef6e402 100644 --- a/modules/home-manager/reo101-shell/nushell/config.nu +++ b/modules/home-manager/reo101-shell/nushell/config.nu @@ -1,6 +1,6 @@ # Nushell Config File # -# version = "0.84.0" +# version = "0.95.0" # For more information on defining custom themes, see # https://www.nushell.sh/book/coloring_and_theming.html @@ -25,13 +25,13 @@ let dark_theme = { string: white nothing: white binary: white - cellpath: white + cell-path: white row_index: green_bold record: white list: white block: white hints: dark_gray - search_result: {bg: red fg: white} + search_result: { bg: red fg: white } shape_and: purple_bold shape_binary: purple_bold shape_block: blue_bold @@ -42,14 +42,17 @@ let dark_theme = { shape_directory: cyan shape_external: cyan shape_externalarg: green_bold + shape_external_resolved: light_yellow_bold shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold # shapes are used to change the cli syntax highlighting shape_garbage: { fg: white bg: red attr: b} + shape_glob_interpolation: cyan_bold shape_globpattern: cyan_bold shape_int: purple_bold shape_internalcall: cyan_bold + shape_keyword: cyan_bold shape_list: cyan_bold shape_literal: blue shape_match_pattern: green @@ -67,6 +70,7 @@ let dark_theme = { shape_table: blue_bold shape_variable: purple shape_vardecl: purple + shape_raw_string: light_purple } let light_theme = { @@ -88,13 +92,13 @@ let light_theme = { string: dark_gray nothing: dark_gray binary: dark_gray - cellpath: dark_gray + cell-path: dark_gray row_index: green_bold - record: white - list: white - block: white + record: dark_gray + list: dark_gray + block: dark_gray hints: dark_gray - search_result: {fg: white bg: red} + search_result: { fg: white bg: red } shape_and: purple_bold shape_binary: purple_bold shape_block: blue_bold @@ -105,6 +109,7 @@ let light_theme = { shape_directory: cyan shape_external: cyan shape_externalarg: green_bold + shape_external_resolved: light_purple_bold shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold @@ -113,6 +118,7 @@ let light_theme = { shape_globpattern: cyan_bold shape_int: purple_bold shape_internalcall: cyan_bold + shape_keyword: cyan_bold shape_list: cyan_bold shape_literal: blue shape_match_pattern: green @@ -130,11 +136,12 @@ let light_theme = { shape_table: blue_bold shape_variable: purple shape_vardecl: purple + shape_raw_string: light_purple } # External completer example # let carapace_completer = {|spans| -# carapace $spans.0 nushell $spans | from json +# carapace $spans.0 nushell ...$spans | from json # } # The default config record. This is where much of your global configuration is setup. @@ -150,10 +157,6 @@ $env.config = { always_trash: false # always act as if -t was given. Can be overridden with -p } - # cd: { - # abbreviations: false # allows `cd s/o/f` to expand to `cd some/other/folder` - # } - table: { mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column @@ -165,8 +168,11 @@ $env.config = { truncating_suffix: "..." # A suffix used by the 'truncating' methodology } header_on_separator: false # show header text on separator/border line + # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point } + error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages + # datetime_format determines what a datetime rendered in the shell would look like. # Behavior without this configuration point will be to "humanize" the datetime display, # showing something like "a day ago." @@ -176,32 +182,15 @@ $env.config = { } explore: { - try: { - border_color: {fg: "white"} - }, - status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"}, - command_bar_text: {fg: "#C4C9C6"}, - highlight: {fg: "black", bg: "yellow"}, + status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" }, + command_bar_text: { fg: "#C4C9C6" }, + highlight: { fg: "black", bg: "yellow" }, status: { - error: {fg: "white", bg: "red"}, + error: { fg: "white", bg: "red" }, warn: {} info: {} }, - table: { - split_line: {fg: "#404040"}, - selected_cell: {}, - selected_row: {}, - selected_column: {}, - show_cursor: true, - line_head_top: true, - line_head_bottom: true, - line_shift: true, - line_index: true, - }, - config: { - border_color: {fg: "white"} - cursor_color: {fg: "black", bg: "light_yellow"} - }, + selected_cell: { bg: light_blue }, } history: { @@ -221,6 +210,7 @@ $env.config = { max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options completer: null # check 'carapace_completer' above as an example } + use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS } filesize: { @@ -229,9 +219,9 @@ $env.config = { } cursor_shape: { - emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) - vi_insert: line # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default) - vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default) + vi_insert: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default) + vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default) } color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record @@ -242,8 +232,55 @@ $env.config = { use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: vi # emacs, vi - shell_integration: false # enables terminal shell integration. Off by default, as some terminals have issues with this. + shell_integration: { + # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title + osc2: true + # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory + osc7: true + # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 + osc8: true + # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal + osc9_9: false + # osc133 is several escapes invented by Final Term which include the supported ones below. + # 133;A - Mark prompt start + # 133;B - Mark prompt end + # 133;C - Mark pre-execution + # 133;D;exit - Mark execution finished with exit code + # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is + osc133: true + # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features + # 633;A - Mark prompt start + # 633;B - Mark prompt end + # 633;C - Mark pre-execution + # 633;D;exit - Mark execution finished with exit code + # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce + # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal + # and also helps with the run recent menu in vscode + osc633: true + # reset_application_mode is escape \x1b[?1l and was added to help ssh work better + reset_application_mode: true + } render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this. + highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which. + recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it + + plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration. + + plugin_gc: { + # Configuration for plugin garbage collection + default: { + enabled: true # true to enable stopping of inactive plugins + stop_after: 10sec # how long to wait after a plugin is inactive to stop it + } + plugins: { + # alternate configuration for specific plugins, by name, for example: + # + # gstat: { + # enabled: false + # } + } + } hooks: { pre_prompt: [{ null }] # run before the prompt is shown @@ -270,8 +307,43 @@ $env.config = { } style: { text: green - selected_text: green_reverse + selected_text: { attr: r } description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: ide_completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: ide + min_completion_width: 0, + max_completion_width: 50, + max_completion_height: 10, # will be limited by the available lines in the terminal + padding: 0, + border: true, + cursor_offset: 0, + description_mode: "prefer_right" + min_description_width: 0 + max_description_width: 50 + max_description_height: 10 + description_offset: 1 + # If true, the cursor pos will be corrected, so the suggestions match up with the typed text + # + # C:\> str + # str join + # str trim + # str split + correct_cursor_pos: false + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } } } { @@ -318,6 +390,20 @@ $env.config = { until: [ { send: menu name: completion_menu } { send: menunext } + { edit: complete } + ] + } + } + { + name: ide_completion_menu + modifier: control + keycode: char_n + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: ide_completion_menu } + { send: menunext } + { edit: complete } ] } } @@ -410,8 +496,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuup} - {send: up} + { send: menuup } + { send: up } ] } } @@ -422,8 +508,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menudown} - {send: down} + { send: menudown } + { send: down } ] } } @@ -434,8 +520,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuleft} - {send: left} + { send: menuleft } + { send: left } ] } } @@ -446,9 +532,9 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} + { send: historyhintcomplete } + { send: menuright } + { send: right } ] } } @@ -457,7 +543,7 @@ $env.config = { modifier: control keycode: left mode: [emacs, vi_normal, vi_insert] - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -466,8 +552,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -476,14 +562,14 @@ $env.config = { modifier: none keycode: home mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_start modifier: control keycode: char_a mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_end_or_take_history_hint @@ -492,8 +578,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {edit: movetolineend} + { send: historyhintcomplete } + { edit: movetolineend } ] } } @@ -504,8 +590,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: historyhintcomplete} - {edit: movetolineend} + { send: historyhintcomplete } + { edit: movetolineend } ] } } @@ -514,14 +600,14 @@ $env.config = { modifier: control keycode: home mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} + event: { edit: movetolinestart } } { name: move_to_line_end modifier: control keycode: end mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolineend} + event: { edit: movetolineend } } { name: move_up @@ -530,8 +616,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menuup} - {send: up} + { send: menuup } + { send: up } ] } } @@ -542,8 +628,8 @@ $env.config = { mode: [emacs, vi_normal, vi_insert] event: { until: [ - {send: menudown} - {send: down} + { send: menudown } + { send: down } ] } } @@ -552,56 +638,56 @@ $env.config = { modifier: none keycode: backspace mode: [emacs, vi_insert] - event: {edit: backspace} + event: { edit: backspace } } { name: delete_one_word_backward modifier: control keycode: backspace mode: [emacs, vi_insert] - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: delete_one_character_forward modifier: none keycode: delete mode: [emacs, vi_insert] - event: {edit: delete} + event: { edit: delete } } { name: delete_one_character_forward modifier: control keycode: delete mode: [emacs, vi_insert] - event: {edit: delete} + event: { edit: delete } } { - name: delete_one_character_forward + name: delete_one_character_backward modifier: control keycode: char_h mode: [emacs, vi_insert] - event: {edit: backspace} + event: { edit: backspace } } { name: delete_one_word_backward modifier: control keycode: char_w mode: [emacs, vi_insert] - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: move_left modifier: none keycode: backspace mode: vi_normal - event: {edit: moveleft} + event: { edit: moveleft } } { name: newline_or_run_command modifier: none keycode: enter mode: emacs - event: {send: enter} + event: { send: enter } } { name: move_left @@ -610,8 +696,8 @@ $env.config = { mode: emacs event: { until: [ - {send: menuleft} - {send: left} + { send: menuleft } + { send: left } ] } } @@ -622,9 +708,9 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} + { send: historyhintcomplete } + { send: menuright } + { send: right } ] } } @@ -633,56 +719,56 @@ $env.config = { modifier: control keycode: char_g mode: emacs - event: {edit: redo} + event: { edit: redo } } { name: undo_change modifier: control keycode: char_z mode: emacs - event: {edit: undo} + event: { edit: undo } } { name: paste_before modifier: control keycode: char_y mode: emacs - event: {edit: pastecutbufferbefore} + event: { edit: pastecutbufferbefore } } { name: cut_word_left modifier: control keycode: char_w mode: emacs - event: {edit: cutwordleft} + event: { edit: cutwordleft } } { name: cut_line_to_end modifier: control keycode: char_k mode: emacs - event: {edit: cuttoend} + event: { edit: cuttoend } } { name: cut_line_from_start modifier: control keycode: char_u mode: emacs - event: {edit: cutfromstart} + event: { edit: cutfromstart } } { name: swap_graphemes modifier: control keycode: char_t mode: emacs - event: {edit: swapgraphemes} + event: { edit: swapgraphemes } } { name: move_one_word_left modifier: alt keycode: left mode: emacs - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -691,8 +777,8 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -701,7 +787,7 @@ $env.config = { modifier: alt keycode: char_b mode: emacs - event: {edit: movewordleft} + event: { edit: movewordleft } } { name: move_one_word_right_or_take_history_hint @@ -710,8 +796,8 @@ $env.config = { mode: emacs event: { until: [ - {send: historyhintwordcomplete} - {edit: movewordright} + { send: historyhintwordcomplete } + { edit: movewordright } ] } } @@ -720,49 +806,86 @@ $env.config = { modifier: alt keycode: delete mode: emacs - event: {edit: deleteword} + event: { edit: deleteword } } { name: delete_one_word_backward modifier: alt keycode: backspace mode: emacs - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: delete_one_word_backward modifier: alt keycode: char_m mode: emacs - event: {edit: backspaceword} + event: { edit: backspaceword } } { name: cut_word_to_right modifier: alt keycode: char_d mode: emacs - event: {edit: cutwordright} + event: { edit: cutwordright } } { name: upper_case_word modifier: alt keycode: char_u mode: emacs - event: {edit: uppercaseword} + event: { edit: uppercaseword } } { name: lower_case_word modifier: alt keycode: char_l mode: emacs - event: {edit: lowercaseword} + event: { edit: lowercaseword } } { name: capitalize_char modifier: alt keycode: char_c mode: emacs - event: {edit: capitalizechar} + event: { edit: capitalizechar } + } + # The following bindings with `*system` events require that Nushell has + # been compiled with the `system-clipboard` feature. + # This should be the case for Windows, macOS, and most Linux distributions + # Not available for example on Android (termux) + # If you want to use the system clipboard for visual selection or to + # paste directly, uncomment the respective lines and replace the version + # using the internal clipboard. + { + name: copy_selection + modifier: control_shift + keycode: char_c + mode: emacs + event: { edit: copyselection } + # event: { edit: copyselectionsystem } + } + { + name: cut_selection + modifier: control_shift + keycode: char_x + mode: emacs + event: { edit: cutselection } + # event: { edit: cutselectionsystem } + } + # { + # name: paste_system + # modifier: control_shift + # keycode: char_v + # mode: emacs + # event: { edit: pastesystem } + # } + { + name: select_all + modifier: control_shift + keycode: char_a + mode: emacs + event: { edit: selectall } } ] }