set up nushell

This commit is contained in:
emilis 2024-03-09 17:32:45 +00:00
parent a44e3b3305
commit 607eb41d72
2 changed files with 57 additions and 8 deletions

View File

@ -143,7 +143,7 @@ let light_theme = {
# The default config record. This is where much of your global configuration is setup.
$env.config = {
show_banner: true # 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
ls: {
use_ls_colors: true # use the LS_COLORS environment variable to colorize output
@ -155,7 +155,7 @@ $env.config = {
}
table: {
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
mode: dots # 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
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
@ -234,7 +234,7 @@ $env.config = {
use_ansi_coloring: true
bracketed_paste: true # enable bracketed paste, currently useless on windows
edit_mode: emacs # emacs, vi
shell_integration: false # enables terminal shell integration. Off by default, as some terminals have issues with this.
shell_integration: true # 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.
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.

View File

@ -2,6 +2,50 @@
#
# version = "0.91.1"
def git_prompt [] {
if (do --ignore-errors { git rev-parse --abbrev-ref HEAD } | is-empty) {
return
}
let status = git --no-optional-locks status --porcelain=2 --branch | lines
let head = $status | where ($it | str starts-with '# branch.head') | str join | parse '# branch.head {branch}' | get branch | first
let result = [$"(ansi magenta2a)($head)"];
let ahead_behind = $status | where ($it | str starts-with '# branch.ab') | str join | parse "# branch.ab +{ahead} -{behind}"
let ahead = $ahead_behind | get ahead | first
let behind = $ahead_behind | get behind | first
let ahead = if ($ahead != '0') { $"↑($ahead)" } else {}
let behind = if ($behind != '0') { $"↓($behind)" } else {}
let result = $result | append ([$ahead, $behind] | where not ($it | is-empty) | str join (char space))
let untracked = $status | where ($it | str starts-with '?') | length
let unstaged = $status | where ($it =~ '1 \..+' ) | length
let staged = $status | where ($it =~ '1 .\..+' ) | length
let file_states = file_state_to_string [
[value, str, color];
[$untracked, $"…($untracked)", (ansi paleturquoise1)],
[$unstaged, $"✚($unstaged)", (ansi orange3)],
[$staged, $"●($staged)", (ansi darkseagreen1b)]
]
let result = $result | append $file_states
let result = $result | where not ($it | is-empty) | str join $" (ansi reset)"
$"(ansi lub)\(($result)(ansi lub)\)"
}
def file_state_to_string [$states: table] -> string {
$states | each {|itm|
if ($itm.value != 0) {
let str = $itm.str
let color = $itm.color
$"($color)($str)"
} else {
""
}
} | where not ($it | is-empty) | str join ' '
}
def create_left_prompt [] {
let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {
null => $env.PWD
@ -9,19 +53,24 @@ def create_left_prompt [] {
$relative_pwd => ([~ $relative_pwd] | path join)
}
let path_color = (if (is-admin) { ansi red_bold } else { ansi 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_color = (if (is-admin) { ansi red_bold } else { ansi pb })
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi pb })
let user_color = (if (is-admin) {ansi red} else { ansi xterm_magenta1 })
let path_segment = $"($user_color)[($env.USER)] ($path_color)($dir)(git_prompt)"
$path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
}
def hostname [] -> string {
$"(ansi lmi)((sys).host | get hostname)(ansi reset)"
}
def create_right_prompt [] {
# create a right prompt in magenta with green separators and am/pm underlined
let time_segment = ([
(ansi reset)
(ansi magenta)
(date now | format date '%x %X') # try to respect user's locale
(date now | format date '%H:%M') # try to respect user's locale
] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
@ -31,7 +80,7 @@ def create_right_prompt [] {
] | str join)
} else { "" }
([$last_exit_code, (char space), $time_segment] | str join)
([$last_exit_code, (hostname), $time_segment] | str join (char space))
}
# Use nushell functions to define your right and left prompt