# Nushell Config File def create_left_prompt [] { let path_segment = ($env.PWD) $path_segment } def create_right_prompt [] { let time_segment = ([ (date now | date format '%m/%d/%Y %r') ] | str collect) $time_segment } # Use nushell functions to define your right and left prompt let-env PROMPT_COMMAND = { create_left_prompt } let-env PROMPT_COMMAND_RIGHT = { create_right_prompt } # The prompt indicators are environmental variables that represent # the state of the prompt let-env PROMPT_INDICATOR = "〉" let-env PROMPT_INDICATOR_VI_INSERT = ": " let-env PROMPT_INDICATOR_VI_NORMAL = "〉" let-env PROMPT_MULTILINE_INDICATOR = "::: " # Specifies how environment variables are: # - converted from a string to a value on Nushell startup (from_string) # - converted from a value back to a string when running external commands (to_string) # Note: The conversions happen *after* config.nu is loaded let-env ENV_CONVERSIONS = { "PATH": { from_string: { |s| $s | split row (char esep) } to_string: { |v| $v | str collect (char esep) } } "Path": { from_string: { |s| $s | split row (char esep) } to_string: { |v| $v | str collect (char esep) } } } # Directories to search for scripts when calling source or use # # By default, /scripts is added let-env NU_LIB_DIRS = [ ($nu.config-path | path dirname | path join 'scripts') ] # Directories to search for plugin binaries when calling register # # By default, /plugins is added let-env NU_PLUGIN_DIRS = [ ($nu.config-path | path dirname | path join 'plugins') ] module completions { # Custom completions for external commands (those outside of Nushell) # Each completions has two parts: the form of the external command, including its flags and parameters # and a helper command that knows how to complete values for those flags and parameters # # This is a simplified version of completions for git branches and git remotes def "nu-complete git branches" [] { ^git branch | lines | each { |line| $line | str find-replace '\* ' '' | str trim } } def "nu-complete git remotes" [] { ^git remote | lines | each { |line| $line | str trim } } export extern "git checkout" [ branch?: string@"nu-complete git branches" # name of the branch to checkout -b: string # create and checkout a new branch -B: string # create/reset and checkout a branch -l # create reflog for new branch --guess # second guess 'git checkout ' (default) --overlay # use overlay mode (default) --quiet(-q) # suppress progress reporting --recurse-submodules: string # control recursive updating of submodules --progress # force progress reporting --merge(-m) # perform a 3-way merge with the new branch --conflict: string # conflict style (merge or diff3) --detach(-d) # detach HEAD at named commit --track(-t) # set upstream info for new branch --force(-f) # force checkout (throw away local modifications) --orphan: string # new unparented branch --overwrite-ignore # update ignored files (default) --ignore-other-worktrees # do not check if another worktree is holding the given ref --ours(-2) # checkout our version for unmerged files --theirs(-3) # checkout their version for unmerged files --patch(-p) # select hunks interactively --ignore-skip-worktree-bits # do not limit pathspecs to sparse entries only --pathspec-from-file: string # read pathspec from file ] export extern "git push" [ remote?: string@"nu-complete git remotes", # the name of the remote refspec?: string@"nu-complete git branches"# the branch / refspec --verbose(-v) # be more verbose --quiet(-q) # be more quiet --repo: string # repository --all # push all refs --mirror # mirror all refs --delete(-d) # delete refs --tags # push tags (can't be used with --all or --mirror) --dry-run(-n) # dry run --porcelain # machine-readable output --force(-f) # force updates --force-with-lease: string # require old value of ref to be at this value --recurse-submodules: string # control recursive pushing of submodules --thin # use thin pack --receive-pack: string # receive pack program --exec: string # receive pack program --set-upstream(-u) # set upstream for git pull/status --progress # force progress reporting --prune # prune locally removed refs --no-verify # bypass pre-push hook --follow-tags # push missing but relevant tags --signed: string # GPG sign the push --atomic # request atomic transaction on remote side --push-option(-o): string # option to transmit --ipv4(-4) # use IPv4 addresses only --ipv6(-6) # use IPv6 addresses only ] } # Get just the extern definitions without the custom completion commands use completions * # for more information on themes see # https://github.com/nushell/nushell/blob/main/docs/How_To_Coloring_and_Theming.md let default_theme = { # color for nushell primitives separator: white leading_trailing_space_bg: { attr: n } # no fg, no bg, attr non 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: 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 } # The default config record. This is where much of your global configuration is setup. let $config = { filesize_metric: false table_mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other use_ls_colors: true rm_always_trash: false color_config: $default_theme use_grid_icons: true footer_mode: "25" # always, never, number_of_rows, auto quick_completions: true # set this to false to prevent auto-selecting completions when only one remains partial_completions: true # set this to false to prevent partial filling of the prompt animate_prompt: false # redraw the prompt every second float_precision: 2 use_ansi_coloring: true filesize_format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto edit_mode: emacs # emacs, vi max_history_size: 10000 menu_config: { columns: 4 col_width: 20 # Optional value. If missing all the screen width is used to calculate column width col_padding: 2 text_style: green selected_text_style: green_reverse marker: "| " } history_config: { page_size: 10 selector: "!" text_style: green selected_text_style: green_reverse marker: "? " } 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_x mode: emacs event: { until: [ { send: menu name: history_menu } { send: menupagenext } ] } } { name: history_previous modifier: control keycode: char_z mode: emacs event: { until: [ { send: menupageprevious } { edit: undo } ] } } ] }