# Nushell Config File {{#if ctx.zellij_sessions}} if $env.ZELLIJ? == null { zellij attach -c --index 0 } {{/if}} # for more information on themes see # https://www.nushell.sh/book/coloring_and_theming.html let dark_theme = { # color for nushell primitives separator: white leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off header: green_bold empty: blue bool: white int: white filesize: white duration: white date: white range: white float: white string: white nothing: white binary: white cellpath: white row_index: green_bold record: white list: white block: white hints: dark_gray # shapes are used to change the cli syntax highlighting shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b} shape_binary: purple_bold shape_bool: light_cyan shape_int: purple_bold shape_float: purple_bold shape_range: yellow_bold shape_internalcall: cyan_bold shape_external: cyan shape_externalarg: green_bold shape_literal: blue shape_operator: light_magenta shape_signature: green_bold shape_string: green shape_string_interpolation: cyan_bold shape_datetime: cyan_bold shape_list: cyan_bold shape_table: blue_bold shape_record: cyan_bold shape_block: blue_bold shape_filepath: cyan shape_globpattern: cyan_bold shape_variable: purple shape_flag: blue_bold shape_custom: green shape_nothing: light_magenta } let light_theme = { # color for nushell primitives separator: dark_gray leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off header: green_bold empty: blue bool: dark_gray int: dark_gray filesize: dark_gray duration: dark_gray date: dark_gray range: dark_gray float: dark_gray string: dark_gray nothing: dark_gray binary: dark_gray cellpath: dark_gray row_index: green_bold record: white list: white block: white hints: dark_gray # shapes are used to change the cli syntax highlighting shape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b} shape_binary: purple_bold shape_bool: light_cyan shape_int: purple_bold shape_float: purple_bold shape_range: yellow_bold shape_internalcall: cyan_bold shape_external: cyan shape_externalarg: green_bold shape_literal: blue shape_operator: yellow shape_signature: green_bold shape_string: green shape_string_interpolation: cyan_bold shape_datetime: cyan_bold shape_list: cyan_bold shape_table: blue_bold shape_record: cyan_bold shape_block: blue_bold shape_filepath: cyan shape_globpattern: cyan_bold shape_variable: purple shape_flag: blue_bold shape_custom: green shape_nothing: light_cyan } # External completer example # let carapace_completer = {|spans| # carapace $spans.0 nushell $spans | from json # } # The default config record. This is where much of your global configuration is setup. $env.config = { cursor_shape: { vi_insert: underscore vi_normal: block emacs: block } color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme` footer_mode: "auto" # always, never, number_of_rows, auto float_precision: 2 buffer_editor: "hx" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL use_ansi_coloring: true edit_mode: emacs # emacs, vi 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 } # enables terminal markers and a workaround to arrow keys stop working issue # disable_table_indexes: false # set to true to remove the index column from tables # settings for the ls command ls: { use_ls_colors: true clickable_links: true # true or false to enable or disable clickable links in the ls listing. your terminal has to support links. } # settings for the rm command rm: { always_trash: false } # history settings history: { max_size: 10000 # Session has to be reloaded for this to take effect sync_on_enter: true # Enable to share the history between multiple sessions, else you have to close the session to persist history to file file_format: "sqlite" # "sqlite" or "plaintext" isolation: true } # filesize settings filesize: { metric: false format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto } # completion settings completions: { case_sensitive: false # set to true to enable case-sensitive completions quick: true # set this to false to prevent auto-selecting completions when only one remains partial: true # set this to false to prevent partial filling of the prompt algorithm: "prefix" # prefix, fuzzy external: { enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options completer: null # check 'carapace_completer' above to as example } } # table settings table: { mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other index_mode: auto # A strategy of managing table view in case of limited space. trim: { methodology: wrapping, # truncating # A strategy which will be used by 'wrapping' methodology wrapping_try_keep_words: true, # A suffix which will be used with 'truncating' methodology # truncating_suffix: "..." } } show_banner: false # true or false to enable or disable the banner hooks: { pre_prompt: [{|| null # replace with source code to run before the prompt is shown }] pre_execution: [{|| null # replace with source code to run before the repl input is run }] env_change: { PWD: [{|before, after| {{#if-installed direnv}} if (which direnv | is-empty) { return } direnv export json | from json | default {} | load-env {{/if-installed}} }, { condition: {|before, after| ("nuenv.nu" in (overlay list)) and ($before == null or ($before not-in $after)) } code: "overlay hide nuenv.nu --keep-env [ PWD ]" }, { condition: {|before, after| "./nuenv.nu" | path exists }, code: "let dir = $env.PWD; overlay use ./nuenv.nu as nuenv.nu; cd $dir" }] } } menus: [ # Configuration for default nushell menus # Note the lack of souce parameter { name: completion_menu only_buffer_difference: false marker: "| " type: { layout: columnar columns: 4 col_width: 20 # Optional value. If missing all the screen width is used to calculate column width col_padding: 2 } style: { text: green selected_text: green_reverse description_text: yellow } } { name: history_menu only_buffer_difference: true marker: "? " type: { layout: list page_size: 10 } style: { text: green selected_text: green_reverse description_text: yellow } } { name: help_menu only_buffer_difference: true marker: "? " type: { layout: description columns: 4 col_width: 20 # Optional value. If missing all the screen width is used to calculate column width col_padding: 2 selection_rows: 4 description_rows: 10 } style: { text: green selected_text: green_reverse description_text: yellow } } # Example of extra menus created using a nushell source # Use the source field to create a list of records that populates # the menu { name: commands_menu only_buffer_difference: false marker: "# " type: { layout: columnar columns: 4 col_width: 20 col_padding: 2 } style: { text: green selected_text: green_reverse description_text: yellow } source: { |buffer, position| $nu.scope.commands | where command =~ $buffer | each { |it| {value: $it.command description: $it.usage} } } } { name: vars_menu only_buffer_difference: true marker: "# " type: { layout: list page_size: 10 } style: { text: green selected_text: green_reverse description_text: yellow } source: { |buffer, position| $nu.scope.vars | where name =~ $buffer | sort-by name | each { |it| {value: $it.name description: $it.type} } } } { name: commands_with_description only_buffer_difference: true marker: "# " type: { layout: description columns: 4 col_width: 20 col_padding: 2 selection_rows: 4 description_rows: 10 } style: { text: green selected_text: green_reverse description_text: yellow } source: { |buffer, position| $nu.scope.commands | where command =~ $buffer | each { |it| {value: $it.command description: $it.usage} } } } ] keybindings: [ { name: completion_menu modifier: none keycode: tab mode: emacs # Options: emacs vi_normal vi_insert event: { until: [ { send: menu name: completion_menu } { send: menunext } ] } } { name: completion_previous modifier: shift keycode: backtab mode: [emacs, vi_normal, vi_insert] # Note: You can add the same keybinding to all modes by using a list event: { send: menuprevious } } { name: history_menu modifier: control keycode: char_r mode: emacs event: { send: menu name: history_menu } } { name: next_page modifier: control keycode: char_x mode: emacs event: { send: menupagenext } } { name: undo_or_previous_page modifier: control keycode: char_z mode: emacs event: { until: [ { send: menupageprevious } { edit: undo } ] } } { name: yank modifier: control keycode: char_y mode: emacs event: { until: [ {edit: pastecutbufferafter} ] } } { name: unix-line-discard modifier: control keycode: char_u mode: [emacs, vi_normal, vi_insert] event: { until: [ {edit: cutfromlinestart} ] } } { name: kill-line modifier: control keycode: char_k mode: [emacs, vi_normal, vi_insert] event: { until: [ {edit: cuttolineend} ] } } # Keybindings used to trigger the user defined menus { name: commands_menu modifier: control keycode: char_t mode: [emacs, vi_normal, vi_insert] event: { send: menu name: commands_menu } } { name: vars_menu modifier: alt keycode: char_o mode: [emacs, vi_normal, vi_insert] event: { send: menu name: vars_menu } } { name: commands_with_description modifier: control keycode: char_s mode: [emacs, vi_normal, vi_insert] event: { send: menu name: commands_with_description } } ] } # Completions source {{dirs.config}}/nushell/completions/completions.nu # Environment source {{dirs.config}}/nushell/path.nu # Starship source {{dirs.config}}/nushell/starship.nu # aliases source {{dirs.config}}/nushell/aliases.nu # motd source {{dirs.config}}/nushell/motd.nu {{#if-installed fnm}} # fnm source {{dirs.config}}/nushell/fnm.nu {{/if-installed}} {{#if-installed yt-dlp}} # ytdl source {{dirs.data}}/scripts/ytdl.nu {{/if-installed}} {{#if-installed broot}} # broot source {{dirs.config}}/broot/launcher/nushell/br {{/if-installed}} {{#if-installed zoxide}} source ~/.zoxide.nu {{/if-installed}} {{#if-installed pueued}} use task.nu {{/if-installed}} {{#if-installed git}} source git.nu {{/if-installed}} {{#if-installed glab}} {{#if-installed gh}} use ci.nu {{/if-installed}} {{/if-installed}} use ide.nu source utils.nu