Update nushell config

This commit is contained in:
David Holland 2023-09-14 23:47:28 +02:00
parent 81357a3c8f
commit 348bb0a2ba
3 changed files with 653 additions and 443 deletions

View file

@ -1,6 +1,6 @@
# Nushell Config File # Nushell Config File
# #
# version = 0.80.1 # version = "0.84.0"
# For more information on defining custom themes, see # For more information on defining custom themes, see
# https://www.nushell.sh/book/coloring_and_theming.html # https://www.nushell.sh/book/coloring_and_theming.html
@ -14,33 +14,12 @@ let dark_theme = {
empty: blue empty: blue
# Closures can be used to choose colors for specific values. # Closures can be used to choose colors for specific values.
# The value (in this case, a bool) is piped into the closure. # The value (in this case, a bool) is piped into the closure.
bool: {|| if $in { 'light_cyan' } else { 'light_gray' } } # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
bool: light_cyan
int: white int: white
filesize: {|e| filesize: cyan
if $e == 0b {
'white'
} else if $e < 1mb {
'cyan'
} else { 'blue' }
}
duration: white duration: white
date: {|| (date now) - $in | date: purple
if $in < 1hr {
'purple'
} else if $in < 6hr {
'red'
} else if $in < 1day {
'yellow'
} else if $in < 3day {
'green'
} else if $in < 1wk {
'light_green'
} else if $in < 6wk {
'cyan'
} else if $in < 52wk {
'blue'
} else { 'dark_gray' }
}
range: white range: white
float: white float: white
string: white string: white
@ -53,7 +32,6 @@ let dark_theme = {
block: white block: white
hints: dark_gray hints: dark_gray
search_result: {bg: red fg: white} search_result: {bg: red fg: white}
shape_and: purple_bold shape_and: purple_bold
shape_binary: purple_bold shape_binary: purple_bold
shape_block: blue_bold shape_block: blue_bold
@ -99,33 +77,12 @@ let light_theme = {
empty: blue empty: blue
# Closures can be used to choose colors for specific values. # Closures can be used to choose colors for specific values.
# The value (in this case, a bool) is piped into the closure. # The value (in this case, a bool) is piped into the closure.
bool: {|| if $in { 'dark_cyan' } else { 'dark_gray' } } # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
bool: dark_cyan
int: dark_gray int: dark_gray
filesize: {|e| filesize: cyan_bold
if $e == 0b {
'dark_gray'
} else if $e < 1mb {
'cyan_bold'
} else { 'blue_bold' }
}
duration: dark_gray duration: dark_gray
date: {|| (date now) - $in | date: purple
if $in < 1hr {
'purple'
} else if $in < 6hr {
'red'
} else if $in < 1day {
'yellow'
} else if $in < 3day {
'green'
} else if $in < 1wk {
'light_green'
} else if $in < 6wk {
'cyan'
} else if $in < 52wk {
'blue'
} else { 'dark_gray' }
}
range: dark_gray range: dark_gray
float: dark_gray float: dark_gray
string: dark_gray string: dark_gray
@ -138,7 +95,6 @@ let light_theme = {
block: white block: white
hints: dark_gray hints: dark_gray
search_result: {fg: white bg: red} search_result: {fg: white bg: red}
shape_and: purple_bold shape_and: purple_bold
shape_binary: purple_bold shape_binary: purple_bold
shape_block: blue_bold shape_block: blue_bold
@ -177,154 +133,128 @@ let light_theme = {
} }
# External completer example # External completer example
let carapace_completer = {|spans| # let carapace_completer = {|spans|
carapace $spans.0 nushell $spans | from json # carapace $spans.0 nushell $spans | from json
} # }
let fish_completer = {|spans|
fish --command $'complete "--do-complete=($spans | str join " ")"'
| $"value(char tab)description(char newline)" + $in
| from tsv --flexible --no-infer
}
# The default config record. This is where much of your global configuration is setup. # The default config record. This is where much of your global configuration is setup.
let-env config = { $env.config = {
# true or false to enable or disable the welcome banner at startup show_banner: false # true or false to enable or disable the welcome banner at startup
show_banner: false
ls: { ls: {
use_ls_colors: true # use the LS_COLORS environment variable to colorize output use_ls_colors: true # use the LS_COLORS environment variable to colorize output
clickable_links: true # enable or disable clickable links. Your terminal has to support links. clickable_links: true # enable or disable clickable links. Your terminal has to support links.
} }
rm: { rm: {
always_trash: false # always act as if -t was given. Can be overridden with -p always_trash: false # always act as if -t was given. Can be overridden with -p
} }
cd: { cd: {
abbreviations: false # allows `cd s/o/f` to expand to `cd some/other/folder` abbreviations: false # allows `cd s/o/f` to expand to `cd some/other/folder`
} }
table: { table: {
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other 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 index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
show_empty: true # show 'empty list' and 'empty record' placeholders for command output show_empty: true # show 'empty list' and 'empty record' placeholders for command output
padding: { left: 1, right: 1 } # a left right padding of each column in a table
trim: { trim: {
methodology: wrapping # wrapping or truncating methodology: wrapping # wrapping or truncating
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
truncating_suffix: "..." # A suffix used by the 'truncating' methodology truncating_suffix: "..." # A suffix used by the 'truncating' methodology
} }
header_on_separator: false # show header text on separator/border line
}
# 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."
datetime_format: {
# normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables
# table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format
} }
explore: { explore: {
help_banner: true
exit_esc: true
command_bar_text: '#C4C9C6'
# command_bar: {fg: '#C4C9C6' bg: '#223311' }
status_bar_background: {fg: '#1D1F21' bg: '#C4C9C6' }
# status_bar_text: {fg: '#C4C9C6' bg: '#223311' }
highlight: {bg: 'yellow' fg: 'black' }
status: {
# warn: {bg: 'yellow', fg: 'blue'}
# error: {bg: 'yellow', fg: 'blue'}
# info: {bg: 'yellow', fg: 'blue'}
}
try: { try: {
# border_color: 'red' border_color: {fg: "white"}
# highlighted_color: 'blue' },
status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"},
# reactive: false command_bar_text: {fg: "#C4C9C6"},
} highlight: {fg: "black", bg: "yellow"},
status: {
error: {fg: "white", bg: "red"},
warn: {}
info: {}
},
table: { table: {
split_line: '#404040' split_line: {fg: "#404040"},
selected_cell: {},
cursor: true selected_row: {},
selected_column: {},
line_index: true show_cursor: true,
line_shift: true line_head_top: true,
line_head_top: true line_head_bottom: true,
line_head_bottom: true line_shift: true,
line_index: true,
show_head: true },
show_index: true
# selected_cell: {fg: 'white', bg: '#777777'}
# selected_row: {fg: 'yellow', bg: '#C1C2A3'}
# selected_column: blue
# padding_column_right: 2
# padding_column_left: 2
# padding_index_left: 2
# padding_index_right: 1
}
config: { config: {
cursor_color: {bg: 'yellow' fg: 'black' } border_color: {fg: "white"}
cursor_color: {fg: "black", bg: "light_yellow"}
# border_color: white },
# list_color: green
}
} }
history: { history: {
max_size: 10000 # Session has to be reloaded for this to take effect max_size: 100_000 # Session has to be reloaded for this to take effect
sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
file_format: "plaintext" # "sqlite" or "plaintext" file_format: "plaintext" # "sqlite" or "plaintext"
# history_isolation: true # true enables history isolation, false disables it. true will allow the history to be isolated to the current session. false will allow the history to be shared across all sessions. isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions.
} }
completions: { completions: {
case_sensitive: false # set to true to enable case-sensitive 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 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 partial: true # set this to false to prevent partial filling of the prompt
algorithm: "prefix" # prefix or fuzzy algorithm: "prefix" # prefix or fuzzy
external: { 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 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 may be very slow
max_results: 50 # setting it lower can improve completion performance at the cost of omitting some options max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
completer: (if ("OS" not-in $env) or (not $env.OS == "Windows_NT") { $fish_completer } else { $carapace_completer }) # check 'carapace_completer' above as an example completer: null # check 'carapace_completer' above as an example
} }
} }
filesize: { filesize: {
metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) 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 format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto
} }
cursor_shape: { cursor_shape: {
emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) 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_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) vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default)
} }
color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme`
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
use_grid_icons: true use_grid_icons: true
footer_mode: "25" # always, never, number_of_rows, auto footer_mode: "25" # always, never, number_of_rows, auto
float_precision: 2 # the precision for displaying floats in tables float_precision: 2 # the precision for displaying floats in tables
# 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.VISUAL buffer_editor: "" # 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 use_ansi_coloring: true
bracketed_paste: true # enable bracketed paste, currently useless on windows bracketed_paste: true # enable bracketed paste, currently useless on windows
edit_mode: vi # emacs, vi edit_mode: vi # emacs, vi
shell_integration: ("WEZTERM_PANE" not-in $env) # enables terminal markers and a workaround to arrow keys stop working issue shell_integration: ("WEZTERM_PANE" not-in $env) # enables terminal shell integration. Off by default, as some terminals have issues with this.
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. 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.
hooks: { hooks: {
pre_prompt: [{|| pre_prompt: [{ null }] # run before the prompt is shown
null # replace with source code to run before the prompt is shown pre_execution: [{ null }] # run before the repl input is run
}]
pre_execution: [{||
null # replace with source code to run before the repl input is run
}]
env_change: { env_change: {
PWD: [{|before, after| PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
null # 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 }
}
command_not_found: {||
null # replace with source code to return an error message when a command is not found
} }
display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
command_not_found: { null } # return an error message when a command is not found
} }
menus: [ menus: [
# Configuration for default nushell menus # Configuration for default nushell menus
# Note the lack of source parameter # Note the lack of source parameter
@ -376,74 +306,8 @@ let-env config = {
description_text: yellow 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 name =~ $buffer
| each { |it| {value: $it.name 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 name =~ $buffer
| each { |it| {value: $it.name description: $it.usage} }
}
}
] ]
keybindings: [ keybindings: [
{ {
name: completion_menu name: completion_menu
@ -457,29 +321,36 @@ let-env config = {
] ]
} }
} }
{
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 name: history_menu
modifier: control modifier: control
keycode: char_r keycode: char_r
mode: emacs mode: [emacs, vi_insert, vi_normal]
event: { send: menu name: history_menu } event: { send: menu name: history_menu }
} }
{ {
name: next_page name: help_menu
modifier: none
keycode: f1
mode: [emacs, vi_insert, vi_normal]
event: { send: menu name: help_menu }
}
{
name: completion_previous_menu
modifier: shift
keycode: backtab
mode: [emacs, vi_normal, vi_insert]
event: { send: menuprevious }
}
{
name: next_page_menu
modifier: control modifier: control
keycode: char_x keycode: char_x
mode: emacs mode: emacs
event: { send: menupagenext } event: { send: menupagenext }
} }
{ {
name: undo_or_previous_page name: undo_or_previous_page_menu
modifier: control modifier: control
keycode: char_z keycode: char_z
mode: emacs mode: emacs
@ -491,69 +362,413 @@ let-env config = {
} }
} }
{ {
name: yank name: escape
modifier: control modifier: none
keycode: char_y keycode: escape
mode: emacs mode: [emacs, vi_normal, vi_insert]
event: { event: { send: esc } # NOTE: does not appear to work
until: [
{edit: pastecutbufferafter}
]
}
} }
{ {
name: unix-line-discard name: cancel_command
modifier: control modifier: control
keycode: char_u keycode: char_c
mode: [emacs, vi_normal, vi_insert]
event: { send: ctrlc }
}
{
name: quit_shell
modifier: control
keycode: char_d
mode: [emacs, vi_normal, vi_insert]
event: { send: ctrld }
}
{
name: clear_screen
modifier: control
keycode: char_l
mode: [emacs, vi_normal, vi_insert]
event: { send: clearscreen }
}
{
name: search_history
modifier: control
keycode: char_q
mode: [emacs, vi_normal, vi_insert]
event: { send: searchhistory }
}
{
name: open_command_editor
modifier: control
keycode: char_o
mode: [emacs, vi_normal, vi_insert]
event: { send: openeditor }
}
{
name: move_up
modifier: none
keycode: up
mode: [emacs, vi_normal, vi_insert] mode: [emacs, vi_normal, vi_insert]
event: { event: {
until: [ until: [
{edit: cutfromlinestart} {send: menuup}
{send: up}
] ]
} }
} }
{ {
name: kill-line name: move_down
modifier: control modifier: none
keycode: char_k keycode: down
mode: [emacs, vi_normal, vi_insert] mode: [emacs, vi_normal, vi_insert]
event: { event: {
until: [ until: [
{edit: cuttolineend} {send: menudown}
{send: down}
] ]
} }
} }
# Keybindings used to trigger the user defined menus
{ {
name: commands_menu name: move_left
modifier: none
keycode: left
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: menuleft}
{send: left}
]
}
}
{
name: move_right_or_take_history_hint
modifier: none
keycode: right
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: historyhintcomplete}
{send: menuright}
{send: right}
]
}
}
{
name: move_one_word_left
modifier: control
keycode: left
mode: [emacs, vi_normal, vi_insert]
event: {edit: movewordleft}
}
{
name: move_one_word_right_or_take_history_hint
modifier: control
keycode: right
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: historyhintwordcomplete}
{edit: movewordright}
]
}
}
{
name: move_to_line_start
modifier: none
keycode: home
mode: [emacs, vi_normal, vi_insert]
event: {edit: movetolinestart}
}
{
name: move_to_line_start
modifier: control
keycode: char_a
mode: [emacs, vi_normal, vi_insert]
event: {edit: movetolinestart}
}
{
name: move_to_line_end_or_take_history_hint
modifier: none
keycode: end
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: historyhintcomplete}
{edit: movetolineend}
]
}
}
{
name: move_to_line_end_or_take_history_hint
modifier: control
keycode: char_e
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: historyhintcomplete}
{edit: movetolineend}
]
}
}
{
name: move_to_line_start
modifier: control
keycode: home
mode: [emacs, vi_normal, vi_insert]
event: {edit: movetolinestart}
}
{
name: move_to_line_end
modifier: control
keycode: end
mode: [emacs, vi_normal, vi_insert]
event: {edit: movetolineend}
}
{
name: move_up
modifier: control
keycode: char_p
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{send: menuup}
{send: up}
]
}
}
{
name: move_down
modifier: control modifier: control
keycode: char_t keycode: char_t
mode: [emacs, vi_normal, vi_insert] mode: [emacs, vi_normal, vi_insert]
event: { send: menu name: commands_menu } event: {
until: [
{send: menudown}
{send: down}
]
}
} }
{ {
name: vars_menu name: delete_one_character_backward
modifier: alt modifier: none
keycode: char_o keycode: backspace
mode: [emacs, vi_normal, vi_insert] mode: [emacs, vi_insert]
event: { send: menu name: vars_menu } event: {edit: backspace}
} }
{ {
name: commands_with_description name: delete_one_word_backward
modifier: control modifier: control
keycode: char_s keycode: backspace
mode: [emacs, vi_normal, vi_insert] mode: [emacs, vi_insert]
event: { send: menu name: commands_with_description } event: {edit: backspaceword}
}
{
name: delete_one_character_forward
modifier: none
keycode: delete
mode: [emacs, vi_insert]
event: {edit: delete}
}
{
name: delete_one_character_forward
modifier: control
keycode: delete
mode: [emacs, vi_insert]
event: {edit: delete}
}
{
name: delete_one_character_forward
modifier: control
keycode: char_h
mode: [emacs, vi_insert]
event: {edit: backspace}
}
{
name: delete_one_word_backward
modifier: control
keycode: char_w
mode: [emacs, vi_insert]
event: {edit: backspaceword}
}
{
name: move_left
modifier: none
keycode: backspace
mode: vi_normal
event: {edit: moveleft}
}
{
name: newline_or_run_command
modifier: none
keycode: enter
mode: emacs
event: {send: enter}
}
{
name: move_left
modifier: control
keycode: char_b
mode: emacs
event: {
until: [
{send: menuleft}
{send: left}
]
}
}
{
name: move_right_or_take_history_hint
modifier: control
keycode: char_f
mode: emacs
event: {
until: [
{send: historyhintcomplete}
{send: menuright}
{send: right}
]
}
}
{
name: redo_change
modifier: control
keycode: char_g
mode: emacs
event: {edit: redo}
}
{
name: undo_change
modifier: control
keycode: char_z
mode: emacs
event: {edit: undo}
}
{
name: paste_before
modifier: control
keycode: char_y
mode: emacs
event: {edit: pastecutbufferbefore}
}
{
name: cut_word_left
modifier: control
keycode: char_w
mode: emacs
event: {edit: cutwordleft}
}
{
name: cut_line_to_end
modifier: control
keycode: char_k
mode: emacs
event: {edit: cuttoend}
}
{
name: cut_line_from_start
modifier: control
keycode: char_u
mode: emacs
event: {edit: cutfromstart}
}
{
name: swap_graphemes
modifier: control
keycode: char_t
mode: emacs
event: {edit: swapgraphemes}
}
{
name: move_one_word_left
modifier: alt
keycode: left
mode: emacs
event: {edit: movewordleft}
}
{
name: move_one_word_right_or_take_history_hint
modifier: alt
keycode: right
mode: emacs
event: {
until: [
{send: historyhintwordcomplete}
{edit: movewordright}
]
}
}
{
name: move_one_word_left
modifier: alt
keycode: char_b
mode: emacs
event: {edit: movewordleft}
}
{
name: move_one_word_right_or_take_history_hint
modifier: alt
keycode: char_f
mode: emacs
event: {
until: [
{send: historyhintwordcomplete}
{edit: movewordright}
]
}
}
{
name: delete_one_word_forward
modifier: alt
keycode: delete
mode: emacs
event: {edit: deleteword}
}
{
name: delete_one_word_backward
modifier: alt
keycode: backspace
mode: emacs
event: {edit: backspaceword}
}
{
name: delete_one_word_backward
modifier: alt
keycode: char_m
mode: emacs
event: {edit: backspaceword}
}
{
name: cut_word_to_right
modifier: alt
keycode: char_d
mode: emacs
event: {edit: cutwordright}
}
{
name: upper_case_word
modifier: alt
keycode: char_u
mode: emacs
event: {edit: uppercaseword}
}
{
name: lower_case_word
modifier: alt
keycode: char_l
mode: emacs
event: {edit: lowercaseword}
}
{
name: capitalize_char
modifier: alt
keycode: char_c
mode: emacs
event: {edit: capitalizechar}
} }
] ]
} }
use nu_scripts/themes/themes/dracula.nu
const dracula_path = './nu_scripts/themes/themes/dracula.nu' $env.config = ($env.config | merge {color_config: (dracula)})
if ($dracula_path | path exists) {
use $dracula_path
let-env config = ($env.config | merge {color_config: (dracula)})
}
source ~/.cache/starship/init.nu source ~/.cache/starship/init.nu
source ~/.cache/zoxide/init.nu source ~/.cache/zoxide/init.nu

View file

@ -1,6 +1,6 @@
# Nushell Environment Config File # Nushell Environment Config File
# #
# version = 0.80.1 # version = "0.84.0"
def create_left_prompt [] { def create_left_prompt [] {
mut home = "" mut home = ""
@ -13,7 +13,7 @@ def create_left_prompt [] {
} }
let dir = ([ let dir = ([
($env.PWD | str substring 0..($home | str length) | str replace --string $home "~"), ($env.PWD | str substring 0..($home | str length) | str replace $home "~"),
($env.PWD | str substring ($home | str length)..) ($env.PWD | str substring ($home | str length)..)
] | str join) ] | str join)
@ -21,18 +21,17 @@ def create_left_prompt [] {
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold }) let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
let path_segment = $"($path_color)($dir)" let path_segment = $"($path_color)($dir)"
$path_segment | str replace --all --string (char path_sep) $"($separator_color)/($path_color)" $path_segment | str replace --all (char path_sep) $"($separator_color)/($path_color)"
} }
def create_right_prompt [] { def create_right_prompt [] {
let time_segment_color = (ansi magenta) # create a right prompt in magenta with green separators and am/pm underlined
let time_segment = ([ let time_segment = ([
(ansi reset) (ansi reset)
$time_segment_color (ansi magenta)
(date now | date format '%m/%d/%Y %r') (date now | format date '%Y/%m/%d %r')
] | str join | str replace --all "([/:])" $"(ansi light_magenta_bold)${1}($time_segment_color)" | ] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
str replace --all "([AP]M)" $"(ansi light_magenta_underline)${1}") str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([ let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
(ansi rb) (ansi rb)
@ -44,21 +43,21 @@ def create_right_prompt [] {
} }
# Use nushell functions to define your right and left prompt # Use nushell functions to define your right and left prompt
let-env PROMPT_COMMAND = {|| create_left_prompt } $env.PROMPT_COMMAND = {|| create_left_prompt }
let-env PROMPT_COMMAND_RIGHT = {|| create_right_prompt } # $env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt }
# The prompt indicators are environmental variables that represent # The prompt indicators are environmental variables that represent
# the state of the prompt # the state of the prompt
let-env PROMPT_INDICATOR = {|| "> " } $env.PROMPT_INDICATOR = {|| "> " }
let-env PROMPT_INDICATOR_VI_INSERT = {|| "> " } $env.PROMPT_INDICATOR_VI_INSERT = {|| "> " }
let-env PROMPT_INDICATOR_VI_NORMAL = {|| ": " } $env.PROMPT_INDICATOR_VI_NORMAL = {|| ": " }
let-env PROMPT_MULTILINE_INDICATOR = {|| ">>> " } $env.PROMPT_MULTILINE_INDICATOR = {|| ">>> " }
# Specifies how environment variables are: # Specifies how environment variables are:
# - converted from a string to a value on Nushell startup (from_string) # - 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) # - converted from a value back to a string when running external commands (to_string)
# Note: The conversions happen *after* config.nu is loaded # Note: The conversions happen *after* config.nu is loaded
let-env ENV_CONVERSIONS = { $env.ENV_CONVERSIONS = {
"PATH": { "PATH": {
from_string: { |s| $s | split row (char esep) | path expand --no-symlink } from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
to_string: { |v| $v | path expand --no-symlink | str join (char esep) } to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
@ -70,21 +69,17 @@ let-env ENV_CONVERSIONS = {
} }
# Directories to search for scripts when calling source or use # Directories to search for scripts when calling source or use
# $env.NU_LIB_DIRS = [
# By default, <nushell-config-dir>/scripts is added ($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
let-env NU_LIB_DIRS = [
($nu.default-config-dir | path join 'scripts')
] ]
# Directories to search for plugin binaries when calling register # Directories to search for plugin binaries when calling register
# $env.NU_PLUGIN_DIRS = [
# By default, <nushell-config-dir>/plugins is added # ($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
let-env NU_PLUGIN_DIRS = [
($nu.default-config-dir | path join 'plugins')
] ]
# To add entries to PATH (on Windows you might use Path), you can use the following pattern: # 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') # $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
mkdir ~/.cache/starship mkdir ~/.cache/starship
starship init nu | save -f ~/.cache/starship/init.nu starship init nu | save -f ~/.cache/starship/init.nu

@ -1 +1 @@
Subproject commit fde7f5b768b09fc40a90b2e0d6013a21784f6b07 Subproject commit c352f261548ee3c511bb4c0d3fa9a8bbeb8bba6c