mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-01 06:37:46 +00:00
update oh-my.nu to respect use_ansi_coloring config setting (#1003)
A quick update to allow the oh-my.nu prompt to respect the $env.config.use_ansi_coloring by way of a new command called `config use-colors`. This way the prompt will be rendered correctly as far as ansi escapes. This file was also formatted with `topiary` which makes up for the rest of the changes. This will only work on nushell version 0.101.1 and above.
This commit is contained in:
parent
4fa48b3e60
commit
a83a40dff0
1 changed files with 437 additions and 411 deletions
|
@ -11,170 +11,175 @@
|
||||||
# inspired by https://github.com/IlanCosman/tide
|
# inspired by https://github.com/IlanCosman/tide
|
||||||
# inspired by https://github.com/JanDeDobbeleer/oh-my-posh
|
# inspired by https://github.com/JanDeDobbeleer/oh-my-posh
|
||||||
|
|
||||||
|
|
||||||
# Abbreviate home path
|
# Abbreviate home path
|
||||||
def home_abbrev [os_name] {
|
def home_abbrev [os_name] {
|
||||||
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
||||||
if $is_home_in_path {
|
if $is_home_in_path {
|
||||||
if ($os_name =~ "windows") {
|
if ($os_name =~ "windows") {
|
||||||
let home = ($nu.home-path | str replace -ar '\\' '/')
|
let home = ($nu.home-path | str replace -ar '\\' '/')
|
||||||
let pwd = ($env.PWD | str replace -ar '\\' '/')
|
let pwd = ($env.PWD | str replace -ar '\\' '/')
|
||||||
$pwd | str replace $home '~'
|
$pwd | str replace $home '~'
|
||||||
} else {
|
|
||||||
$env.PWD | str replace $nu.home-path '~'
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if ($os_name =~ "windows") {
|
$env.PWD | str replace $nu.home-path '~'
|
||||||
# remove the C: from the path
|
|
||||||
$env.PWD | str replace -ar '\\' '/' | str substring 2..
|
|
||||||
} else {
|
|
||||||
$env.PWD
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if ($os_name =~ "windows") {
|
||||||
|
# remove the C: from the path
|
||||||
|
$env.PWD | str replace -ar '\\' '/' | str substring 2..
|
||||||
|
} else {
|
||||||
|
$env.PWD
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def path_abbrev_if_needed [apath term_width] {
|
def path_abbrev_if_needed [apath term_width] {
|
||||||
# probably shouldn't do coloring here but since we're coloring
|
# probably shouldn't do coloring here but since we're coloring
|
||||||
# only certain parts, it's kind of tricky to do it in another place
|
# only certain parts, it's kind of tricky to do it in another place
|
||||||
let T = (ansi { fg: "#BCBCBC" bg: "#3465A4"}) # truncated
|
let T = (ansi { fg: "#BCBCBC" bg: "#3465A4" }) # truncated
|
||||||
let P = (ansi { fg: "#E4E4E4" bg: "#3465A4"}) # path
|
let P = (ansi { fg: "#E4E4E4" bg: "#3465A4" }) # path
|
||||||
let PB = (ansi { fg: "#E4E4E4" bg: "#3465A4" attr: b}) # path bold
|
let PB = (ansi { fg: "#E4E4E4" bg: "#3465A4" attr: b }) # path bold
|
||||||
let R = (ansi reset)
|
let R = (ansi reset)
|
||||||
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
||||||
|
|
||||||
if (($apath | str length) > ($term_width / 2)) {
|
if (($apath | str length) > ($term_width / 2)) {
|
||||||
# split out by path separator into tokens
|
# split out by path separator into tokens
|
||||||
# don't use psep here because in home_abbrev we're making them all '/'
|
# don't use psep here because in home_abbrev we're making them all '/'
|
||||||
let splits = ($apath | split row '/')
|
let splits = ($apath | split row '/')
|
||||||
|
|
||||||
let splits_len = ($splits | length)
|
let splits_len = ($splits | length)
|
||||||
# get all the tokens except the last
|
# get all the tokens except the last
|
||||||
let tokens = (1..<($splits_len - 1) | each {|x|
|
let tokens = (
|
||||||
$"($T)((($splits) | get $x | split chars) | get 0)($R)"
|
1..<($splits_len - 1) | each {|x|
|
||||||
})
|
$"($T)((($splits) | get $x | split chars) | get 0)($R)"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# need an insert command
|
# need an insert command
|
||||||
let tokens = ($tokens | prepend $"($T)~")
|
let tokens = ($tokens | prepend $"($T)~")
|
||||||
|
|
||||||
# append the last part of the path
|
# append the last part of the path
|
||||||
let tokens = ($tokens | append $"($PB)($splits | last)($R)")
|
let tokens = ($tokens | append $"($PB)($splits | last)($R)")
|
||||||
|
|
||||||
# collect
|
# collect
|
||||||
$tokens | str join $"($T)/"
|
$tokens | str join $"($T)/"
|
||||||
} else {
|
} else {
|
||||||
let splits = ($apath | split row '/')
|
let splits = ($apath | split row '/')
|
||||||
let splits_len = ($splits | length)
|
let splits_len = ($splits | length)
|
||||||
let apath_len = ($apath | str length)
|
let apath_len = ($apath | str length)
|
||||||
if ($splits_len == 2 and $apath_len == 1) {
|
if ($splits_len == 2 and $apath_len == 1) {
|
||||||
$"/($T)($R)"
|
$"/($T)($R)"
|
||||||
} else if ($splits_len == 2) {
|
} else if ($splits_len == 2) {
|
||||||
let top_part = ($splits | last)
|
let top_part = ($splits | last)
|
||||||
let tokens = $"($PB)($top_part)($R)"
|
let tokens = $"($PB)($top_part)($R)"
|
||||||
$tokens | str join $"($T)"
|
$tokens | str join $"($T)"
|
||||||
} else if ($splits.0 | is-empty) {
|
} else if ($splits.0 | is-empty) {
|
||||||
let top_part = ($splits | skip | first ($splits_len - 2))
|
let top_part = ($splits | skip | first ($splits_len - 2))
|
||||||
let end_part = ($splits | last)
|
let end_part = ($splits | last)
|
||||||
let tokens = ($top_part | each {|x|
|
let tokens = (
|
||||||
$"($T)/(($x | split chars).0)($R)"
|
$top_part | each {|x|
|
||||||
})
|
$"($T)/(($x | split chars).0)($R)"
|
||||||
let tokens = ($tokens | append $"/($PB)($end_part)($R)")
|
|
||||||
$tokens | str join $"($T)"
|
|
||||||
} else {
|
|
||||||
let top_part = ($splits | first ($splits_len - 1))
|
|
||||||
let end_part = ($splits | last)
|
|
||||||
let tokens = ($top_part | each {|x|
|
|
||||||
if $x == '~' {
|
|
||||||
$"($T)(($x | split chars).0)($R)"
|
|
||||||
} else {
|
|
||||||
$"/($T)(($x | split chars).0)($R)"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
let tokens = ($tokens | append $"/($PB)($end_part)($R)")
|
|
||||||
$tokens | str join $"($T)"
|
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
let tokens = ($tokens | append $"/($PB)($end_part)($R)")
|
||||||
|
$tokens | str join $"($T)"
|
||||||
|
} else {
|
||||||
|
let top_part = ($splits | first ($splits_len - 1))
|
||||||
|
let end_part = ($splits | last)
|
||||||
|
let tokens = (
|
||||||
|
$top_part | each {|x|
|
||||||
|
if $x == '~' {
|
||||||
|
$"($T)(($x | split chars).0)($R)"
|
||||||
|
} else {
|
||||||
|
$"/($T)(($x | split chars).0)($R)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
let tokens = ($tokens | append $"/($PB)($end_part)($R)")
|
||||||
|
$tokens | str join $"($T)"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_index_change_count [gs] {
|
def get_index_change_count [gs] {
|
||||||
let index_new = ($gs | get idx_added_staged)
|
let index_new = ($gs | get idx_added_staged)
|
||||||
let index_modified = ($gs | get idx_modified_staged)
|
let index_modified = ($gs | get idx_modified_staged)
|
||||||
let index_deleted = ($gs | get idx_deleted_staged)
|
let index_deleted = ($gs | get idx_deleted_staged)
|
||||||
let index_renamed = ($gs | get idx_renamed)
|
let index_renamed = ($gs | get idx_renamed)
|
||||||
let index_typechanged = ($gs | get idx_type_changed)
|
let index_typechanged = ($gs | get idx_type_changed)
|
||||||
|
|
||||||
$index_new + $index_modified + $index_deleted + $index_renamed + $index_typechanged
|
$index_new + $index_modified + $index_deleted + $index_renamed + $index_typechanged
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_working_tree_count [gs] {
|
def get_working_tree_count [gs] {
|
||||||
let wt_modified = ($gs | get wt_modified)
|
let wt_modified = ($gs | get wt_modified)
|
||||||
let wt_deleted = ($gs | get wt_deleted)
|
let wt_deleted = ($gs | get wt_deleted)
|
||||||
let wt_typechanged = ($gs | get wt_type_changed)
|
let wt_typechanged = ($gs | get wt_type_changed)
|
||||||
let wt_renamed = ($gs | get wt_renamed)
|
let wt_renamed = ($gs | get wt_renamed)
|
||||||
|
|
||||||
$wt_modified + $wt_deleted + $wt_typechanged + $wt_renamed
|
$wt_modified + $wt_deleted + $wt_typechanged + $wt_renamed
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_conflicted_count [gs] {
|
def get_conflicted_count [gs] {
|
||||||
($gs | get conflicts)
|
($gs | get conflicts)
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_untracked_count [gs] {
|
def get_untracked_count [gs] {
|
||||||
($gs | get wt_untracked)
|
($gs | get wt_untracked)
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_branch_name [gs] {
|
def get_branch_name [gs] {
|
||||||
let br = ($gs | get branch)
|
let br = ($gs | get branch)
|
||||||
if $br == "no_branch" {
|
if $br == "no_branch" {
|
||||||
""
|
""
|
||||||
} else {
|
} else {
|
||||||
$br
|
$br
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_ahead_count [gs] {
|
def get_ahead_count [gs] {
|
||||||
($gs | get ahead)
|
($gs | get ahead)
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_behind_count [gs] {
|
def get_behind_count [gs] {
|
||||||
($gs | get behind)
|
($gs | get behind)
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_icons_list [] {
|
def get_icons_list [] {
|
||||||
{
|
{
|
||||||
AHEAD_ICON: (char branch_ahead), # "↑" 2191
|
AHEAD_ICON: (char branch_ahead) # "↑" 2191
|
||||||
BEHIND_ICON: (char branch_behind), # "↓" 2193
|
BEHIND_ICON: (char branch_behind) # "↓" 2193
|
||||||
NO_CHANGE_ICON: (char branch_identical) # ≣ 2263
|
NO_CHANGE_ICON: (char branch_identical) # ≣ 2263
|
||||||
HAS_CHANGE_ICON: "*",
|
HAS_CHANGE_ICON: "*"
|
||||||
INDEX_CHANGE_ICON: "♦",
|
INDEX_CHANGE_ICON: "♦"
|
||||||
WT_CHANGE_ICON: "✚",
|
WT_CHANGE_ICON: "✚"
|
||||||
CONFLICTED_CHANGE_ICON: "✖",
|
CONFLICTED_CHANGE_ICON: "✖"
|
||||||
UNTRACKED_CHANGE_ICON: (char branch_untracked) # ≢ 2262
|
UNTRACKED_CHANGE_ICON: (char branch_untracked) # ≢ 2262
|
||||||
INSERT_SYMBOL_ICON: "❯",
|
INSERT_SYMBOL_ICON: "❯"
|
||||||
HAMBURGER_ICON: (char hamburger) # "≡" 2261
|
HAMBURGER_ICON: (char hamburger) # "≡" 2261
|
||||||
GITHUB_ICON: "", # f408
|
GITHUB_ICON: "" # f408
|
||||||
BRANCH_ICON: (char nf_branch) # "" e0a0
|
BRANCH_ICON: (char nf_branch) # "" e0a0
|
||||||
REBASE_ICON: "", # e728
|
REBASE_ICON: "" # e728
|
||||||
TAG_ICON: "" # f412
|
TAG_ICON: "" # f412
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_icon_by_name [name] {
|
def get_icon_by_name [name] {
|
||||||
get_icons_list | get $name
|
get_icons_list | get $name
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_os_icon [os] {
|
def get_os_icon [os] {
|
||||||
# f17c = tux, f179 = apple, f17a = windows
|
# f17c = tux, f179 = apple, f17a = windows
|
||||||
if ($os.name =~ macos) {
|
if ($os.name =~ macos) {
|
||||||
(char -u f179)
|
(char -u f179)
|
||||||
} else if ($os.name =~ windows) {
|
} else if ($os.name =~ windows) {
|
||||||
(char -u f17a)
|
(char -u f17a)
|
||||||
} else if ($os.kernel_version =~ WSL) {
|
} else if ($os.kernel_version =~ WSL) {
|
||||||
$'(char -u f17a)(char -u f17c)'
|
$'(char -u f17a)(char -u f17c)'
|
||||||
} else if ($os.family =~ unix) {
|
} else if ($os.family =~ unix) {
|
||||||
(char -u f17c)
|
(char -u f17c)
|
||||||
} else {
|
} else {
|
||||||
''
|
''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ╭─────────────────────┬───────────────╮
|
# ╭─────────────────────┬───────────────╮
|
||||||
|
@ -200,346 +205,367 @@ def get_os_icon [os] {
|
||||||
# ╰─────────────────────┴───────────────╯
|
# ╰─────────────────────┴───────────────╯
|
||||||
|
|
||||||
def get_repo_status [gs os] {
|
def get_repo_status [gs os] {
|
||||||
let display_path = (path_abbrev_if_needed (home_abbrev $os.name) (term size).columns)
|
let display_path = (path_abbrev_if_needed (home_abbrev $os.name) (term size).columns)
|
||||||
let branch_name = (get_branch_name $gs)
|
let branch_name = (get_branch_name $gs)
|
||||||
let ahead_cnt = (get_ahead_count $gs)
|
let ahead_cnt = (get_ahead_count $gs)
|
||||||
let behind_cnt = (get_behind_count $gs)
|
let behind_cnt = (get_behind_count $gs)
|
||||||
let index_change_cnt = (get_index_change_count $gs)
|
let index_change_cnt = (get_index_change_count $gs)
|
||||||
let wt_change_cnt = (get_working_tree_count $gs)
|
let wt_change_cnt = (get_working_tree_count $gs)
|
||||||
let conflicted_cnt = (get_conflicted_count $gs)
|
let conflicted_cnt = (get_conflicted_count $gs)
|
||||||
let untracked_cnt = (get_untracked_count $gs)
|
let untracked_cnt = (get_untracked_count $gs)
|
||||||
let has_no_changes = (
|
let has_no_changes = (
|
||||||
if ($index_change_cnt <= 0) and
|
if ($index_change_cnt <= 0) and
|
||||||
($wt_change_cnt <= 0) and
|
($wt_change_cnt <= 0) and
|
||||||
($conflicted_cnt <= 0) and
|
($conflicted_cnt <= 0) and
|
||||||
($untracked_cnt <= 0) {
|
($untracked_cnt <= 0) {
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
let GIT_BG = "#C4A000"
|
let GIT_BG = "#C4A000"
|
||||||
let GIT_FG = "#000000"
|
let GIT_FG = "#000000"
|
||||||
# let TERM_BG = "#0C0C0C"
|
# let TERM_BG = "#0C0C0C"
|
||||||
|
|
||||||
# The multi-color fg colors are good if you just have a black background
|
# The multi-color fg colors are good if you just have a black background
|
||||||
|
|
||||||
let AHEAD_ICON = (get_icon_by_name AHEAD_ICON)
|
let AHEAD_ICON = (get_icon_by_name AHEAD_ICON)
|
||||||
# let A_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
# let A_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
||||||
let A_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let A_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let BEHIND_ICON = (get_icon_by_name BEHIND_ICON)
|
let BEHIND_ICON = (get_icon_by_name BEHIND_ICON)
|
||||||
# let B_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
# let B_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
||||||
let B_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let B_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let INDEX_CHANGE_ICON = (get_icon_by_name INDEX_CHANGE_ICON)
|
let INDEX_CHANGE_ICON = (get_icon_by_name INDEX_CHANGE_ICON)
|
||||||
# let I_COLOR = (ansi { fg:"#00ff00" bg: ($GIT_BG) })
|
# let I_COLOR = (ansi { fg:"#00ff00" bg: ($GIT_BG) })
|
||||||
let I_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let I_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let CONFLICTED_CHANGE_ICON = (get_icon_by_name CONFLICTED_CHANGE_ICON)
|
let CONFLICTED_CHANGE_ICON = (get_icon_by_name CONFLICTED_CHANGE_ICON)
|
||||||
# let C_COLOR = (ansi { fg:"#ff0000" bg: ($GIT_BG) })
|
# let C_COLOR = (ansi { fg:"#ff0000" bg: ($GIT_BG) })
|
||||||
let C_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let C_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let WT_CHANGE_ICON = (get_icon_by_name WT_CHANGE_ICON)
|
let WT_CHANGE_ICON = (get_icon_by_name WT_CHANGE_ICON)
|
||||||
# let W_COLOR = (ansi { fg:"#ff00ff" bg: ($GIT_BG) })
|
# let W_COLOR = (ansi { fg:"#ff00ff" bg: ($GIT_BG) })
|
||||||
let W_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let W_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let UNTRACKED_CHANGE_ICON = (get_icon_by_name UNTRACKED_CHANGE_ICON)
|
let UNTRACKED_CHANGE_ICON = (get_icon_by_name UNTRACKED_CHANGE_ICON)
|
||||||
# let U_COLOR = (ansi { fg:"#ffff00" bg: ($GIT_BG) })
|
# let U_COLOR = (ansi { fg:"#ffff00" bg: ($GIT_BG) })
|
||||||
let U_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let U_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let NO_CHANGE_ICON = (get_icon_by_name NO_CHANGE_ICON)
|
let NO_CHANGE_ICON = (get_icon_by_name NO_CHANGE_ICON)
|
||||||
# let N_COLOR = (ansi { fg:"#00ff00" bg: ($GIT_BG) })
|
# let N_COLOR = (ansi { fg:"#00ff00" bg: ($GIT_BG) })
|
||||||
let N_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let N_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let HAS_CHANGE_ICON = (get_icon_by_name HAS_CHANGE_ICON)
|
let HAS_CHANGE_ICON = (get_icon_by_name HAS_CHANGE_ICON)
|
||||||
# let H_COLOR = (ansi { fg:"#ff0000" bg: ($GIT_BG) attr: b })
|
# let H_COLOR = (ansi { fg:"#ff0000" bg: ($GIT_BG) attr: b })
|
||||||
let H_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) attr: b })
|
let H_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) attr: b })
|
||||||
|
|
||||||
let INSERT_SYMBOL_ICON = (get_icon_by_name INSERT_SYMBOL_ICON)
|
let INSERT_SYMBOL_ICON = (get_icon_by_name INSERT_SYMBOL_ICON)
|
||||||
# let S_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
# let S_COLOR = (ansi { fg:"#00ffff" bg: ($GIT_BG) })
|
||||||
let S_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
let S_COLOR = (ansi { fg: ($GIT_FG) bg: ($GIT_BG) })
|
||||||
|
|
||||||
let R = (ansi reset)
|
let R = (ansi reset)
|
||||||
|
|
||||||
let repo_status = (
|
let repo_status = (
|
||||||
$"(
|
$"(
|
||||||
if ($ahead_cnt > 0) { $'($A_COLOR)($AHEAD_ICON)($ahead_cnt)($R)' }
|
if ($ahead_cnt > 0) {$'($A_COLOR)($AHEAD_ICON)($ahead_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if ($behind_cnt > 0) { $'($B_COLOR)($BEHIND_ICON)($behind_cnt)($R)' }
|
if ($behind_cnt > 0) {$'($B_COLOR)($BEHIND_ICON)($behind_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if ($index_change_cnt > 0) { $'($I_COLOR)($INDEX_CHANGE_ICON)($index_change_cnt)($R)' }
|
if ($index_change_cnt > 0) {$'($I_COLOR)($INDEX_CHANGE_ICON)($index_change_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if ($conflicted_cnt > 0) { $'($C_COLOR)($CONFLICTED_CHANGE_ICON)($conflicted_cnt)($R)' }
|
if ($conflicted_cnt > 0) {$'($C_COLOR)($CONFLICTED_CHANGE_ICON)($conflicted_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if ($wt_change_cnt > 0) { $'($W_COLOR)($WT_CHANGE_ICON)($wt_change_cnt)($R)' }
|
if ($wt_change_cnt > 0) {$'($W_COLOR)($WT_CHANGE_ICON)($wt_change_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if ($untracked_cnt > 0) { $'($U_COLOR)($UNTRACKED_CHANGE_ICON)($untracked_cnt)($R)' }
|
if ($untracked_cnt > 0) {$'($U_COLOR)($UNTRACKED_CHANGE_ICON)($untracked_cnt)($R)'}
|
||||||
)(
|
)(
|
||||||
if $has_no_changes { $'($N_COLOR)($NO_CHANGE_ICON)($R)' } else { $'($H_COLOR)($HAS_CHANGE_ICON)($R)' }
|
if $has_no_changes {$'($N_COLOR)($NO_CHANGE_ICON)($R)'} else {$'($H_COLOR)($HAS_CHANGE_ICON)($R)'}
|
||||||
)"
|
)"
|
||||||
)
|
)
|
||||||
|
|
||||||
$repo_status
|
$repo_status
|
||||||
}
|
}
|
||||||
|
|
||||||
def git_left_prompt [gs os] {
|
def git_left_prompt [gs os] {
|
||||||
# replace this 30 with whatever the width of the terminal is
|
# replace this 30 with whatever the width of the terminal is
|
||||||
let display_path = (path_abbrev_if_needed (home_abbrev $os.name) (term size).columns)
|
let display_path = (path_abbrev_if_needed (home_abbrev $os.name) (term size).columns)
|
||||||
let branch_name = (get_branch_name $gs)
|
let branch_name = (get_branch_name $gs)
|
||||||
let R = (ansi reset)
|
let R = (ansi reset)
|
||||||
|
|
||||||
# when reduce is available
|
# when reduce is available
|
||||||
# echo "one" "two" "three" | reduce { if ($acc | str starts-with 't') { $acc + $it } { $it }}
|
# echo "one" "two" "three" | reduce { if ($acc | str starts-with 't') { $acc + $it } { $it }}
|
||||||
|
|
||||||
# some icons and the unicode char
|
# some icons and the unicode char
|
||||||
# e0b0
|
# e0b0
|
||||||
# e0b1
|
# e0b1
|
||||||
# e0b2
|
# e0b2
|
||||||
# e0b3
|
# e0b3
|
||||||
# f1d3
|
# f1d3
|
||||||
# f07c or f115
|
# f07c or f115
|
||||||
# f015 or f7db
|
# f015 or f7db
|
||||||
|
|
||||||
let GIT_BG = "#C4A000"
|
let GIT_BG = "#C4A000"
|
||||||
let GIT_FG = "#000000"
|
let GIT_FG = "#000000"
|
||||||
let TERM_BG = "#0C0C0C"
|
let TERM_BG = "#0C0C0C"
|
||||||
|
|
||||||
let repo_status = (get_repo_status $gs $os)
|
let repo_status = (get_repo_status $gs $os)
|
||||||
|
|
||||||
# build segments and then put together the segments for the prompt
|
# build segments and then put together the segments for the prompt
|
||||||
let os_segment = ([
|
let os_segment = (
|
||||||
(ansi { fg: "#080808" bg: "#CED7CF"}) # os bg color
|
|
||||||
(char space) # space
|
|
||||||
(get_os_icon $os) # os icon
|
|
||||||
(char space) # space
|
|
||||||
(ansi { fg: "#CED7CF" bg: "#3465A4"}) # color transition
|
|
||||||
(char -u e0b0) #
|
|
||||||
(char space) # space
|
|
||||||
] | str join)
|
|
||||||
|
|
||||||
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
|
||||||
let path_segment = (if (($is_home_in_path) and ($branch_name == "")) {
|
|
||||||
[
|
|
||||||
(char -u f015) # home icon
|
|
||||||
(char space) # space
|
|
||||||
$display_path # ~/src/forks/nushell
|
|
||||||
(ansi { fg: "#CED7CF" bg: "#3465A4"}) # color just to color the next space
|
|
||||||
(char space) # space
|
|
||||||
] | str join
|
|
||||||
} else {
|
|
||||||
[
|
|
||||||
(char -u f07c) # folder icon
|
|
||||||
(char space) # space
|
|
||||||
$display_path # ~/src/forks/nushell
|
|
||||||
(ansi { fg: "#CED7CF" bg: "#3465A4"}) # color just to color the next space
|
|
||||||
(char space) # space
|
|
||||||
] | str join
|
|
||||||
})
|
|
||||||
|
|
||||||
let git_segment = (if ($branch_name != "") {
|
|
||||||
[
|
|
||||||
(ansi { fg: "#3465A4" bg: "#4E9A06"}) # color
|
|
||||||
(char -u e0b0) #
|
|
||||||
(char space) # space
|
|
||||||
(ansi { fg: $TERM_BG bg: "#4E9A06"}) # color
|
|
||||||
# (char -u f1d3) #
|
|
||||||
(char -u e0a0) #
|
|
||||||
(char space) # space
|
|
||||||
($branch_name) # main
|
|
||||||
(char space) # space
|
|
||||||
(ansi { fg: "#4E9A06" bg: $GIT_BG}) # color
|
|
||||||
(char -u e0b0) #
|
|
||||||
(char space) # space
|
|
||||||
($R) # reset color
|
|
||||||
$repo_status # repo status
|
|
||||||
] | str join
|
|
||||||
})
|
|
||||||
|
|
||||||
let git_right = false
|
|
||||||
let indicator_segment = (if ($branch_name == "" or $git_right) {
|
|
||||||
[
|
|
||||||
(ansi { fg: "#3465A4" bg: $TERM_BG}) # color
|
|
||||||
(char -u e0b0) #
|
|
||||||
($R) # reset color
|
|
||||||
] | str join
|
|
||||||
} else {
|
|
||||||
[
|
|
||||||
(ansi { fg: $GIT_BG bg: $TERM_BG}) # color
|
|
||||||
(char -u e0b0) #
|
|
||||||
($R) # reset color
|
|
||||||
] | str join
|
|
||||||
})
|
|
||||||
|
|
||||||
# assemble all segments for final prompt printing
|
|
||||||
[
|
[
|
||||||
$os_segment
|
(ansi { fg: "#080808" bg: "#CED7CF" }) # os bg color
|
||||||
$path_segment
|
(char space) # space
|
||||||
(if ($git_right == false) {
|
(get_os_icon $os) # os icon
|
||||||
$git_segment
|
(char space) # space
|
||||||
})
|
(ansi { fg: "#CED7CF" bg: "#3465A4" }) # color transition
|
||||||
$indicator_segment
|
(char -u e0b0) #
|
||||||
|
(char space) # space
|
||||||
] | str join
|
] | str join
|
||||||
|
)
|
||||||
|
|
||||||
|
let is_home_in_path = ($env.PWD | str starts-with $nu.home-path)
|
||||||
|
let path_segment = (
|
||||||
|
if (($is_home_in_path) and ($branch_name == "")) {
|
||||||
|
[
|
||||||
|
(char -u f015) # home icon
|
||||||
|
(char space) # space
|
||||||
|
$display_path # ~/src/forks/nushell
|
||||||
|
(ansi { fg: "#CED7CF" bg: "#3465A4" }) # color just to color the next space
|
||||||
|
(char space) # space
|
||||||
|
] | str join
|
||||||
|
} else {
|
||||||
|
[
|
||||||
|
(char -u f07c) # folder icon
|
||||||
|
(char space) # space
|
||||||
|
$display_path # ~/src/forks/nushell
|
||||||
|
(ansi { fg: "#CED7CF" bg: "#3465A4" }) # color just to color the next space
|
||||||
|
(char space) # space
|
||||||
|
] | str join
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let git_segment = (
|
||||||
|
if ($branch_name != "") {
|
||||||
|
[
|
||||||
|
(ansi { fg: "#3465A4" bg: "#4E9A06" }) # color
|
||||||
|
(char -u e0b0) #
|
||||||
|
(char space) # space
|
||||||
|
(ansi { fg: $TERM_BG bg: "#4E9A06" }) # color
|
||||||
|
# (char -u f1d3) #
|
||||||
|
(char -u e0a0) #
|
||||||
|
(char space) # space
|
||||||
|
($branch_name) # main
|
||||||
|
(char space) # space
|
||||||
|
(ansi { fg: "#4E9A06" bg: $GIT_BG }) # color
|
||||||
|
(char -u e0b0) #
|
||||||
|
(char space) # space
|
||||||
|
($R) # reset color
|
||||||
|
$repo_status # repo status
|
||||||
|
] | str join
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let git_right = false
|
||||||
|
let indicator_segment = (
|
||||||
|
if ($branch_name == "" or $git_right) {
|
||||||
|
[
|
||||||
|
(ansi { fg: "#3465A4" bg: $TERM_BG }) # color
|
||||||
|
(char -u e0b0) #
|
||||||
|
($R) # reset color
|
||||||
|
] | str join
|
||||||
|
} else {
|
||||||
|
[
|
||||||
|
(ansi { fg: $GIT_BG bg: $TERM_BG }) # color
|
||||||
|
(char -u e0b0) #
|
||||||
|
($R) # reset color
|
||||||
|
] | str join
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# assemble all segments for final prompt printing
|
||||||
|
[
|
||||||
|
$os_segment
|
||||||
|
$path_segment
|
||||||
|
(
|
||||||
|
if ($git_right == false) {
|
||||||
|
$git_segment
|
||||||
|
}
|
||||||
|
)
|
||||||
|
$indicator_segment
|
||||||
|
] | str join
|
||||||
}
|
}
|
||||||
|
|
||||||
def git_right_prompt [gs os] {
|
def git_right_prompt [gs os] {
|
||||||
# right prompt ideas
|
# right prompt ideas
|
||||||
# 1. just the time on the right
|
# 1. just the time on the right
|
||||||
# 2. date and time on the right
|
# 2. date and time on the right
|
||||||
# 3. git information on the right
|
# 3. git information on the right
|
||||||
# 4. maybe git and time
|
# 4. maybe git and time
|
||||||
# 5. would like to get CMD_DURATION_MS going there too when it's implemented
|
# 5. would like to get CMD_DURATION_MS going there too when it's implemented
|
||||||
# 6. all of the above, chosen by def parameters
|
# 6. all of the above, chosen by def parameters
|
||||||
|
|
||||||
let branch_name = (get_branch_name $gs)
|
let branch_name = (get_branch_name $gs)
|
||||||
let repo_status = (get_repo_status $gs $os)
|
let repo_status = (get_repo_status $gs $os)
|
||||||
let R = (ansi reset)
|
let R = (ansi reset)
|
||||||
let TIME_BG = "#D3D7CF"
|
let TIME_BG = "#D3D7CF"
|
||||||
let TERM_FG = "#0C0C0C"
|
let TERM_FG = "#0C0C0C"
|
||||||
let GIT_BG = "#C4A000"
|
let GIT_BG = "#C4A000"
|
||||||
let GIT_FG = "#000000"
|
let GIT_FG = "#000000"
|
||||||
let TERM_BG = "#0C0C0C"
|
let TERM_BG = "#0C0C0C"
|
||||||
let TERM_FG_DEFAULT = "\e[39m"
|
let TERM_FG_DEFAULT = "\e[39m"
|
||||||
let TERM_BG_DEFAULT = "\e[49m"
|
let TERM_BG_DEFAULT = "\e[49m"
|
||||||
|
|
||||||
let datetime_segment = ([
|
let datetime_segment = (
|
||||||
(ansi { fg: $TIME_BG bg: $TERM_FG})
|
[
|
||||||
(char -u e0b2) #
|
(ansi { fg: $TIME_BG bg: $TERM_FG })
|
||||||
(ansi { fg: $TERM_FG bg: $TIME_BG})
|
(char -u e0b2) #
|
||||||
(char space)
|
(ansi { fg: $TERM_FG bg: $TIME_BG })
|
||||||
(date now | format date '%m/%d/%Y %I:%M:%S%.3f')
|
(char space)
|
||||||
(char space)
|
(date now | format date '%m/%d/%Y %I:%M:%S%.3f')
|
||||||
($R)
|
(char space)
|
||||||
] | str join)
|
($R)
|
||||||
|
] | str join
|
||||||
|
)
|
||||||
|
|
||||||
let time_segment = ([
|
let time_segment = (
|
||||||
(ansi { fg: $TIME_BG bg: $TERM_FG})
|
[
|
||||||
(char -u e0b2) #
|
(ansi { fg: $TIME_BG bg: $TERM_FG })
|
||||||
(ansi { fg: $TERM_FG bg: $TIME_BG})
|
(char -u e0b2) #
|
||||||
(char space)
|
(ansi { fg: $TERM_FG bg: $TIME_BG })
|
||||||
(date now | format date '%I:%M:%S %p')
|
(char space)
|
||||||
(char space)
|
(date now | format date '%I:%M:%S %p')
|
||||||
($R)
|
(char space)
|
||||||
] | str join)
|
($R)
|
||||||
|
] | str join
|
||||||
|
)
|
||||||
|
|
||||||
let git_segment = (if ($branch_name != "") {
|
let git_segment = (
|
||||||
[
|
if ($branch_name != "") {
|
||||||
(ansi { fg: $GIT_BG bg: $TERM_BG}) # color
|
[
|
||||||
(char -u e0b2) #
|
(ansi { fg: $GIT_BG bg: $TERM_BG }) # color
|
||||||
(ansi { fg: $TERM_FG bg: $GIT_BG}) # color
|
(char -u e0b2) #
|
||||||
(char space) # space
|
(ansi { fg: $TERM_FG bg: $GIT_BG }) # color
|
||||||
$repo_status # repo status
|
(char space) # space
|
||||||
(ansi { fg: $TERM_FG bg: $GIT_BG}) # color
|
$repo_status # repo status
|
||||||
|
(ansi { fg: $TERM_FG bg: $GIT_BG }) # color
|
||||||
(char space)
|
(char space)
|
||||||
(ansi { fg: "#4E9A06" bg: $GIT_BG }) # color
|
(ansi { fg: "#4E9A06" bg: $GIT_BG }) # color
|
||||||
(char -u e0b2) #
|
(char -u e0b2) #
|
||||||
(ansi { fg: $TERM_BG bg: "#4E9A06"}) # color
|
(ansi { fg: $TERM_BG bg: "#4E9A06" }) # color
|
||||||
(char space) # space
|
(char space) # space
|
||||||
# (char -u f1d3) #
|
# (char -u f1d3) #
|
||||||
# (char -u e0a0) #
|
# (char -u e0a0) #
|
||||||
(char nf_git_branch) #
|
(char nf_git_branch) #
|
||||||
(char space) # space
|
(char space) # space
|
||||||
$branch_name # main
|
$branch_name # main
|
||||||
(char space) # space
|
(char space) # space
|
||||||
($R) # reset color
|
($R) # reset color
|
||||||
] | str join
|
] | str join
|
||||||
})
|
}
|
||||||
|
)
|
||||||
|
|
||||||
let execution_time_segment = (
|
let execution_time_segment = (
|
||||||
[
|
|
||||||
# (ansi { fg: "#606060" bg: "#191323"})
|
|
||||||
(ansi { fg: "#606060"})
|
|
||||||
$TERM_BG_DEFAULT
|
|
||||||
(char -u e0b3)
|
|
||||||
(char space)
|
|
||||||
$env.CMD_DURATION_MS
|
|
||||||
(char space)
|
|
||||||
($R)
|
|
||||||
] | str join
|
|
||||||
)
|
|
||||||
|
|
||||||
let status_segment = (
|
|
||||||
[
|
|
||||||
(if $env.LAST_EXIT_CODE != 0 {
|
|
||||||
(ansi { fg: "#CC0000" })
|
|
||||||
} else {
|
|
||||||
(ansi { fg: "#606060" })
|
|
||||||
})
|
|
||||||
(char -u e0b3)
|
|
||||||
(char space)
|
|
||||||
$env.LAST_EXIT_CODE
|
|
||||||
(char space)
|
|
||||||
($R)
|
|
||||||
] | str join
|
|
||||||
)
|
|
||||||
# 1. datetime - working
|
|
||||||
# $datetime_segment
|
|
||||||
|
|
||||||
# 2. time only - working
|
|
||||||
[
|
[
|
||||||
(if $env.LAST_EXIT_CODE != 0 {
|
# (ansi { fg: "#606060" bg: "#191323"})
|
||||||
$status_segment
|
(ansi { fg: "#606060" })
|
||||||
})
|
$TERM_BG_DEFAULT
|
||||||
$execution_time_segment
|
(char -u e0b3)
|
||||||
$time_segment
|
(char space)
|
||||||
|
$env.CMD_DURATION_MS
|
||||||
|
(char space)
|
||||||
|
($R)
|
||||||
] | str join
|
] | str join
|
||||||
|
)
|
||||||
|
|
||||||
# 3. git only - working
|
let status_segment = (
|
||||||
# $git_segment
|
[
|
||||||
|
(
|
||||||
|
if $env.LAST_EXIT_CODE != 0 {
|
||||||
|
(ansi { fg: "#CC0000" })
|
||||||
|
} else {
|
||||||
|
(ansi { fg: "#606060" })
|
||||||
|
}
|
||||||
|
)
|
||||||
|
(char -u e0b3)
|
||||||
|
(char space)
|
||||||
|
$env.LAST_EXIT_CODE
|
||||||
|
(char space)
|
||||||
|
($R)
|
||||||
|
] | str join
|
||||||
|
)
|
||||||
|
# 1. datetime - working
|
||||||
|
# $datetime_segment
|
||||||
|
|
||||||
# 4. git + time -> need to fix the transition
|
# 2. time only - working
|
||||||
# [
|
[
|
||||||
# $git_segment
|
(
|
||||||
# $time_segment
|
if $env.LAST_EXIT_CODE != 0 {
|
||||||
# ] | str join
|
$status_segment
|
||||||
|
}
|
||||||
|
)
|
||||||
|
$execution_time_segment
|
||||||
|
$time_segment
|
||||||
|
] | str join
|
||||||
|
|
||||||
# 5. fernando wants this on the left prompt
|
# 3. git only - working
|
||||||
# [
|
# $git_segment
|
||||||
# $os_segment
|
|
||||||
# $time_segment
|
# 4. git + time -> need to fix the transition
|
||||||
# $path_segment
|
# [
|
||||||
# ]
|
# $git_segment
|
||||||
|
# $time_segment
|
||||||
|
# ] | str join
|
||||||
|
|
||||||
|
# 5. fernando wants this on the left prompt
|
||||||
|
# [
|
||||||
|
# $os_segment
|
||||||
|
# $time_segment
|
||||||
|
# $path_segment
|
||||||
|
# ]
|
||||||
}
|
}
|
||||||
|
|
||||||
export def git_prompt [] {
|
export def git_prompt [] {
|
||||||
let gs = (gstat)
|
let gs = (gstat)
|
||||||
let os = $nu.os-info
|
let os = $nu.os-info
|
||||||
let left_prompt = (git_left_prompt $gs $os)
|
let left_prompt = (git_left_prompt $gs $os)
|
||||||
let right_prompt = (git_right_prompt $gs $os)
|
let right_prompt = (git_right_prompt $gs $os)
|
||||||
|
let use_ansi = (config use-colors)
|
||||||
|
|
||||||
# set the title of the window/tab
|
# set the title of the window/tab
|
||||||
# Wezterm accepts:
|
# Wezterm accepts:
|
||||||
# osc0 \x1b]0;
|
# osc0 \x1b]0;
|
||||||
# osc1 \x1b]1;
|
# osc1 \x1b]1;
|
||||||
# osc2 \x1b]2;
|
# osc2 \x1b]2;
|
||||||
# the typical way to set the terminal title is:
|
# the typical way to set the terminal title is:
|
||||||
# osc2 some_string bel aka (char osc)2;($some_string)(char bel) or "\u001b]2;($some_string)\a"
|
# osc2 some_string bel aka (char osc)2;($some_string)(char bel) or "\u001b]2;($some_string)\a"
|
||||||
# bel is escape \a or \x7 or \u0007
|
# bel is escape \a or \x7 or \u0007
|
||||||
# but i've also seen it as
|
# but i've also seen it as
|
||||||
# osc2 some_string string_terminator aka (char osc)2;($some_string)(ansi st) or "\u001b];($some_string)\\"
|
# osc2 some_string string_terminator aka (char osc)2;($some_string)(ansi st) or "\u001b];($some_string)\\"
|
||||||
# where string_terminator is \
|
# where string_terminator is \
|
||||||
# so you might want to play around with these settings a bit
|
# so you might want to play around with these settings a bit
|
||||||
|
|
||||||
#let abbrev = ((path_abbrev_if_needed (home_abbrev $os.name) 30) | ansi strip)
|
#let abbrev = ((path_abbrev_if_needed (home_abbrev $os.name) 30) | ansi strip)
|
||||||
|
|
||||||
# $"\u001b]0;($abbrev)"
|
# $"\u001b]0;($abbrev)"
|
||||||
# note that this isn't ending properly with a bel or a st, that's
|
# note that this isn't ending properly with a bel or a st, that's
|
||||||
# because it makes the string echo to the screen as an empty line
|
# because it makes the string echo to the screen as an empty line
|
||||||
|
|
||||||
# turning off now since a similar thing is built into nushell + it breaks kitty
|
# turning off now since a similar thing is built into nushell + it breaks kitty
|
||||||
#$"(ansi osc)2;($abbrev)"
|
#$"(ansi osc)2;($abbrev)"
|
||||||
|
|
||||||
# return in record literal syntax to be used kind of like a tuple
|
# return in record literal syntax to be used kind of like a tuple
|
||||||
# so we don't have to run this script more than once per prompt
|
# so we don't have to run this script more than once per prompt
|
||||||
{
|
{
|
||||||
left_prompt: $left_prompt
|
left_prompt: (if $use_ansi { $left_prompt } else { $left_prompt | ansi strip })
|
||||||
right_prompt: $right_prompt
|
right_prompt: (if $use_ansi { $right_prompt } else { $right_prompt | ansi strip })
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# in the config.nu you would do something like
|
# in the config.nu you would do something like
|
||||||
# use "c:\some\path\to\nu_scripts\prompt\oh-my.nu" git_prompt
|
# use "c:\some\path\to\nu_scripts\prompt\oh-my.nu" git_prompt
|
||||||
# $env.PROMPT_COMMAND = { (git_prompt).left_prompt }
|
# $env.PROMPT_COMMAND = { (git_prompt).left_prompt }
|
||||||
# $env.PROMPT_COMMAND_RIGHT = { (git_prompt).right_prompt }
|
# $env.PROMPT_COMMAND_RIGHT = { (git_prompt).right_prompt }
|
||||||
# $env.PROMPT_INDICATOR = " "
|
# $env.PROMPT_INDICATOR = " "
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue