AYO4A36OXBAUFHX2ZBG2IVRAWIGLW4N76JZADPH2MVIJZA6Y6EOQC 5F7FQOTRMHTFZM2DLCYR2KFCT2ZX55Y5SWPAAUZ4SVFBTTB77ARQC UKBUKLXIOXLGV6EKNX7N47A7YCE4JA7CVXYDUSHKHXKEKBN2MAFQC HYATGBAR6UJ6HSTFTGMPLDRSKPPRGRDBSGTZEOM3JTFUGWCIONAAC OY5IM37CDTFYUCGM2C6ZQA5GOU2D65KZQUSDY46OLS4SEQMJ4JNAC 3VB56R4BDM6GOZB3EEUKZSGYYHLESM3SG2X5GTFQZZRDUYD6Y44QC S6AGIE6QJGWPCDD2QLTNFG7C6YALEJWXNYL32XQ2FB6TFT5FVR5AC LQIUZJSRW5BT3CJESIDGOOUAE6WUGVAYXGCSE5EJ2CK23UDOG5RQC UKKLTWOMVXH3XV5LGMIPIWEEWTNV4F3D4ZQ7VRA3AXQ2YZ3J5NEAC BTJY7QVON3A2332YDENXYMZIJUKV73RSLPKBZLQ3GOXXK7WCQQHQC 5BZE67D2L7H3XY2EUHO6OBE77HI7PXVS2JWSHHWCVIDZWC2SHSNAC [bottom]owner = "ClementTsang"repo = "bottom"exe_name = "btm"asset_name.linux = "x86_64-unknown-linux-musl"asset_name.macos = "x86_64-apple-darwin"asset_name.windows = "x86_64-pc-windows-msvc"[mold]owner = "rui314"repo = "mold"asset_name.linux = "x86_64-linux"asset_name.macos = "NOT_SUPPORTED"asset_name.windows = "NOT_SUPPORTED"
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 loadedlet-env ENV_CONVERSIONS = {"PATH": {from_string: { |s| $s | split row (char esep) | path expand -n }to_string: { |v| $v | path expand -n | str collect (char esep) }}"Path": {from_string: { |s| $s | split row (char esep) | path expand -n }to_string: { |v| $v | path expand -n | str collect (char esep) }}}# Directories to search for scripts when calling source or use## By default, <nushell-config-dir>/scripts is addedlet-env NU_LIB_DIRS = [($nu.config-path | path dirname | path join 'scripts')]# Directories to search for plugin binaries when calling register## By default, <nushell-config-dir>/plugins is addedlet-env NU_PLUGIN_DIRS = [($nu.config-path | path dirname | path join 'plugins')]# To add entries to PATH (on Windows you might use Path), you can use the following pattern:# let-env PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
# Not well-suited for `starship prompt --right`.# Built-in right prompt is equivalent to $fill$right_format in the first prompt line.# Thus does not play well with default `add_newline = True`.let-env PROMPT_COMMAND_RIGHT = {''}
let-env STARSHIP_SHELL = "nu"let-env STARSHIP_SESSION_KEY = (random chars -l 16)let-env PROMPT_MULTILINE_INDICATOR = (^/sbin/starship prompt --continuation)# Does not play well with default character module.# TODO: Also Use starship vi mode indicators?let-env PROMPT_INDICATOR = ""let-env PROMPT_COMMAND = {# jobs are not supportedlet width = (term size).columns^/sbin/starship prompt $"--cmd-duration=($env.CMD_DURATION_MS)" $"--status=($env.LAST_EXIT_CODE)" $"--terminal-width=($width)"}# Whether we have config itemslet has_config_items = (not ($env | get -i config | is-empty))let-env config = if $has_config_items {$env.config | upsert render_right_prompt_on_last_line true} else {{render_right_prompt_on_last_line: true}}let-env PROMPT_COMMAND_RIGHT = {let width = (term size).columns^/sbin/starship prompt --right $"--cmd-duration=($env.CMD_DURATION_MS)" $"--status=($env.LAST_EXIT_CODE)" $"--terminal-width=($width)"}alias e = emacsclient -n# Nushell Config Filemodule 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 remotesdef "nu-complete git branches" [] {^git branch | lines | each { |line| $line | str replace '[\*\+] ' '' | str trim }}def "nu-complete git remotes" [] {^git remote | lines | each { |line| $line | str trim }}# Download objects and refs from another repositoryexport extern "git fetch" [repository?: string@"nu-complete git remotes" # name of the repository to fetchbranch?: string@"nu-complete git branches" # name of the branch to fetch--all # Fetch all remotes--append(-a) # Append ref names and object names to .git/FETCH_HEAD--atomic # Use an atomic transaction to update local refs.--depth: int # Limit fetching to n commits from the tip--deepen: int # Limit fetching to n commits from the current shallow boundary--shallow-since: string # Deepen or shorten the history by date--shallow-exclude: string # Deepen or shorten the history by branch/tag--unshallow # Fetch all available history--update-shallow # Update .git/shallow to accept new refs--negotiation-tip: string # Specify which commit/glob to report while fetching--negotiate-only # Do not fetch, only print common ancestors--dry-run # Show what would be done--write-fetch-head # Write fetched refs in FETCH_HEAD (default)--no-write-fetch-head # Do not write FETCH_HEAD--force(-f) # Always update the local branch--keep(-k) # Keep dowloaded pack--multiple # Allow several arguments to be specified--auto-maintenance # Run 'git maintenance run --auto' at the end (default)--no-auto-maintenance # Don't run 'git maintenance' at the end--auto-gc # Run 'git maintenance run --auto' at the end (default)--no-auto-gc # Don't run 'git maintenance' at the end--write-commit-graph # Write a commit-graph after fetching--no-write-commit-graph # Don't write a commit-graph after fetching--prefetch # Place all refs into the refs/prefetch/ namespace--prune(-p) # Remove obsolete remote-tracking references--prune-tags(-P) # Remove any local tags that do not exist on the remote--no-tags(-n) # Disable automatic tag following--refmap: string # Use this refspec to map the refs to remote-tracking branches--tags(-t) # Fetch all tags--recurse-submodules: string # Fetch new commits of populated submodules (yes/on-demand/no)--jobs(-j): int # Number of parallel children--no-recurse-submodules # Disable recursive fetching of submodules--set-upstream # Add upstream (tracking) reference--submodule-prefix: string # Prepend to paths printed in informative messages--upload-pack: string # Non-default path for remote command--quiet(-q) # Silence internally used git commands--verbose(-v) # Be verbose--progress # Report progress on stderr--server-option(-o): string # Pass options for the server to handle--show-forced-updates # Check if a branch is force-updated--no-show-forced-updates # Don't check if a branch is force-updated-4 # Use IPv4 addresses, ignore IPv6 addresses-6 # Use IPv6 addresses, ignore IPv4 addresses--help # Display the help message for this command]# Check out git branches and filesexport extern "git checkout" [...targets: string@"nu-complete git branches" # name of the branch or files to checkout--conflict: string # conflict style (merge or diff3)--detach(-d) # detach HEAD at named commit--force(-f) # force checkout (throw away local modifications)--guess # second guess 'git checkout <no-such-branch>' (default)--ignore-other-worktrees # do not check if another worktree is holding the given ref--ignore-skip-worktree-bits # do not limit pathspecs to sparse entries only--merge(-m) # perform a 3-way merge with the new branch--orphan: string # new unparented branch--ours(-2) # checkout our version for unmerged files--overlay # use overlay mode (default)--overwrite-ignore # update ignored files (default)--patch(-p) # select hunks interactively--pathspec-from-file: string # read pathspec from file--progress # force progress reporting--quiet(-q) # suppress progress reporting--recurse-submodules: string # control recursive updating of submodules--theirs(-3) # checkout their version for unmerged files--track(-t) # set upstream info for new branch-b: string # create and checkout a new branch-B: string # create/reset and checkout a branch-l # create reflog for new branch--help # Display the help message for this command]# Push changesexport extern "git push" [remote?: string@"nu-complete git remotes", # the name of the remote...refs: string@"nu-complete git branches" # the branch / refspec--all # push all refs--atomic # request atomic transaction on remote side--delete(-d) # delete refs--dry-run(-n) # dry run--exec: string # receive pack program--follow-tags # push missing but relevant tags--force-with-lease # require old value of ref to be at this value--force(-f) # force updates--ipv4(-4) # use IPv4 addresses only--ipv6(-6) # use IPv6 addresses only--mirror # mirror all refs--no-verify # bypass pre-push hook--porcelain # machine-readable output--progress # force progress reporting--prune # prune locally removed refs--push-option(-o): string # option to transmit--quiet(-q) # be more quiet--receive-pack: string # receive pack program--recurse-submodules: string # control recursive pushing of submodules--repo: string # repository--set-upstream(-u) # set upstream for git pull/status--signed: string # GPG sign the push--tags # push tags (can't be used with --all or --mirror)--thin # use thin pack--verbose(-v) # be more verbose--help # Display the help message for this command]}# Get just the extern definitions without the custom completion commandsuse completions *# for more information on themes see# https://www.nushell.sh/book/coloring_and_theming.htmllet dark_theme = {# color for nushell primitivesseparator: whiteleading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this offheader: green_boldempty: bluebool: whiteint: whitefilesize: whiteduration: whitedate: whiterange: whitefloat: whitestring: whitenothing: whitebinary: whitecellpath: whiterow_index: green_boldrecord: whitelist: whiteblock: whitehints: dark_gray# shapes are used to change the cli syntax highlightingshape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}shape_binary: purple_boldshape_bool: light_cyanshape_int: purple_boldshape_float: purple_boldshape_range: yellow_boldshape_internalcall: cyan_boldshape_external: cyanshape_externalarg: green_boldshape_literal: blueshape_operator: yellowshape_signature: green_boldshape_string: greenshape_string_interpolation: cyan_boldshape_datetime: cyan_boldshape_list: cyan_boldshape_table: blue_boldshape_record: cyan_boldshape_block: blue_boldshape_filepath: cyanshape_directory: cyanshape_globpattern: cyan_boldshape_variable: purpleshape_flag: blue_boldshape_custom: greenshape_nothing: light_cyanshape_matching_brackets: { attr: u }}let light_theme = {# color for nushell primitivesseparator: dark_grayleading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this offheader: green_boldempty: bluebool: dark_grayint: dark_grayfilesize: dark_grayduration: dark_graydate: dark_grayrange: dark_grayfloat: dark_graystring: dark_graynothing: dark_graybinary: dark_graycellpath: dark_grayrow_index: green_boldrecord: whitelist: whiteblock: whitehints: dark_gray# shapes are used to change the cli syntax highlightingshape_garbage: { fg: "#FFFFFF" bg: "#FF0000" attr: b}shape_binary: purple_boldshape_bool: light_cyanshape_int: purple_boldshape_float: purple_boldshape_range: yellow_boldshape_internalcall: cyan_boldshape_external: cyanshape_externalarg: green_boldshape_literal: blueshape_operator: yellowshape_signature: green_boldshape_string: greenshape_string_interpolation: cyan_boldshape_datetime: cyan_boldshape_list: cyan_boldshape_table: blue_boldshape_record: cyan_boldshape_block: blue_boldshape_filepath: cyanshape_directory: cyanshape_globpattern: cyan_boldshape_variable: purpleshape_flag: blue_boldshape_custom: greenshape_nothing: light_cyanshape_matching_brackets: { attr: u }}# 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.
ls: {use_ls_colors: true # use the LS_COLORS environment variable to colorize outputclickable_links: true # enable or disable clickable links. Your terminal has to support links.}rm: {always_trash: false # always act as if -t was given. Can be overridden with -p}cd: {abbreviations: true # 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, otherindex_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" columntrim: {methodology: wrapping # wrapping or truncatingwrapping_try_keep_words: true # A strategy used by the 'wrapping' methodologytruncating_suffix: "..." # A suffix used by the 'truncating' methodology}}history: {max_size: 10000 # Session has to be reloaded for this to take effectsync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to filefile_format: "plaintext" # "sqlite" or "plaintext"}completions: {case_sensitive: false # set to true to enable case-sensitive completionsquick: true # set this to false to prevent auto-selecting completions when only one remainspartial: true # set this to false to prevent partial filling of the promptalgorithm: "prefix" # prefix or fuzzyexternal: {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 slowmax_results: 100 # setting it lower can improve completion performance at the cost of omitting some optionscompleter: null # check 'carapace_completer' above as an example}}filesize: {metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto}color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme`use_grid_icons: truefooter_mode: "25" # always, never, number_of_rows, autofloat_precision: 2# buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUALuse_ansi_coloring: trueedit_mode: emacs # emacs, vishell_integration: true # enables terminal markers and a workaround to arrow keys stop working issueshow_banner: false # true or false to enable or disable the bannerrender_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.hooks: {pre_prompt: [{$nothing # replace with source code to run before the prompt is shown}]pre_execution: [{$nothing # replace with source code to run before the repl input is run}]env_change: {PWD: [{|before, after|$nothing # replace with source code to run if the PWD environment is different since the last repl input}]}display_output: {if (term size).columns >= 100 { table -e } else { table }}}menus: [# Configuration for default nushell menus# Note the lack of souce parameter{name: completion_menuonly_buffer_difference: falsemarker: "| "type: {layout: columnarcolumns: 4col_width: 20 # Optional value. If missing all the screen width is used to calculate column widthcol_padding: 2}style: {text: greenselected_text: green_reversedescription_text: yellow}}{name: history_menuonly_buffer_difference: truemarker: "? "type: {layout: listpage_size: 10}style: {text: greenselected_text: green_reversedescription_text: yellow}}{name: help_menuonly_buffer_difference: truemarker: "? "type: {layout: descriptioncolumns: 4col_width: 20 # Optional value. If missing all the screen width is used to calculate column widthcol_padding: 2selection_rows: 4description_rows: 10}style: {text: greenselected_text: green_reversedescription_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_menuonly_buffer_difference: falsemarker: "# "type: {layout: columnarcolumns: 4col_width: 20col_padding: 2}style: {text: greenselected_text: green_reversedescription_text: yellow}source: { |buffer, position|$nu.scope.commands| where command =~ $buffer| each { |it| {value: $it.command description: $it.usage} }}}{name: vars_menuonly_buffer_difference: truemarker: "# "type: {layout: listpage_size: 10}style: {text: greenselected_text: green_reversedescription_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_descriptiononly_buffer_difference: truemarker: "# "type: {layout: descriptioncolumns: 4col_width: 20col_padding: 2selection_rows: 4description_rows: 10}style: {text: greenselected_text: green_reversedescription_text: yellow}source: { |buffer, position|$nu.scope.commands| where command =~ $buffer| each { |it| {value: $it.command description: $it.usage} }}}]keybindings: [{name: completion_menumodifier: nonekeycode: tabmode: emacs # Options: emacs vi_normal vi_insertevent: {until: [{ send: menu name: completion_menu }{ send: menunext }]}}{name: completion_previousmodifier: shiftkeycode: backtabmode: [emacs, vi_normal, vi_insert] # Note: You can add the same keybinding to all modes by using a listevent: { send: menuprevious }}{name: history_menumodifier: controlkeycode: char_rmode: emacsevent: { send: menu name: history_menu }}{name: next_pagemodifier: controlkeycode: char_xmode: emacsevent: { send: menupagenext }}{name: undo_or_previous_pagemodifier: controlkeycode: char_zmode: emacsevent: {until: [{ send: menupageprevious }{ edit: undo }]}}{name: yankmodifier: controlkeycode: char_ymode: emacsevent: {until: [{edit: pastecutbufferafter}]}}{name: unix-line-discardmodifier: controlkeycode: char_umode: [emacs, vi_normal, vi_insert]event: {until: [{edit: cutfromlinestart}]}}{name: kill-linemodifier: controlkeycode: char_kmode: [emacs, vi_normal, vi_insert]event: {until: [{edit: cuttolineend}]}}# Keybindings used to trigger the user defined menus{name: commands_menumodifier: controlkeycode: char_tmode: [emacs, vi_normal, vi_insert]event: { send: menu name: commands_menu }}{name: vars_menumodifier: altkeycode: char_omode: [emacs, vi_normal, vi_insert]event: { send: menu name: vars_menu }}{name: commands_with_descriptionmodifier: controlkeycode: char_smode: [emacs, vi_normal, vi_insert]event: { send: menu name: commands_with_description }}]
show_banner: false