From 1a03f02dfdc11a8e733322974795bebb79fb2360 Mon Sep 17 00:00:00 2001 From: Jalon Wong Date: Wed, 19 Jul 2023 19:24:54 +0800 Subject: [PATCH] Add a git prompt (#555) * Add a git prompt * Amend README --- modules/prompt/README.md | 6 +- modules/prompt/images/jalon-git.png | Bin 0 -> 23546 bytes modules/prompt/jalon-git.nu | 368 ++++++++++++++++++++++++++++ 3 files changed, 373 insertions(+), 1 deletion(-) create mode 100644 modules/prompt/images/jalon-git.png create mode 100644 modules/prompt/jalon-git.nu diff --git a/modules/prompt/README.md b/modules/prompt/README.md index 60a9118..cc3a772 100644 --- a/modules/prompt/README.md +++ b/modules/prompt/README.md @@ -6,7 +6,7 @@ These scripts should be used to draw a custom command prompt in nushell. They ca #### starship.nu -File is in [starship](./starship.nu) +File is in [starship](./starship.nu) This discribe how to use starship to make a leftprompt, the repo of starship is [here](https://github.com/starship/starship). @@ -25,3 +25,7 @@ help shells ``` ![shell_spaceshow](./images/shell_space.png) + +#### jalon-git.nu +From https://github.com/JalonWong/nushell-prompt +![jalon-git](./images/jalon-git.png) diff --git a/modules/prompt/images/jalon-git.png b/modules/prompt/images/jalon-git.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7f5da48878acce35cc43c11ee692eaf50c1559 GIT binary patch literal 23546 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 wH3J`GeY&*fJ9v9cITwzVaZ{?l|EphJz5o4`g=g " + } else { + $"\r\n(ansi red)x " + } +} + +def username-style [show_host: bool] { + let name = (get-username) + if $show_host and (is-ssh-session) { + $'($USER_STYLE)($name)(ansi dark_gray)@($USER_STYLE)(get-hostname)(ansi dark_gray):(ansi reset)' + } else if (is-self-user $name) == false { + $'($USER_STYLE)($name)(ansi dark_gray):(ansi reset)' + } else { + '' + } +} + +def wsl-style [] { + if 'WSLENV' in $env { + $'(ansi dark_gray) WSL(ansi reset)' + } else { + '' + } +} + +# Get the current directory with home abbreviated +def current-dir-style [] { + let current_dir = ($env.PWD) + + let current_dir_abbreviated = if $current_dir == $nu.home-path { + '~' + } else { + let current_dir_relative_to_home = ( + do --ignore-errors { $current_dir | path relative-to $nu.home-path } | str join + ) + + if ($current_dir_relative_to_home | is-empty) == false { + $'~(char separator)($current_dir_relative_to_home)' + } else { + $current_dir + } + } + + if (is-admin) { + $'(ansi red_bold)($current_dir_abbreviated)(ansi reset)' + } else { + $'($PATH_STYLE)($current_dir_abbreviated)(ansi reset)' + } +} + +def read-only-style [] { + if (ls -Dl $env.PWD | get readonly.0) { + $'[(ansi red_bold)ro(ansi reset)]' + } else { + '' + } +} + +def duration-style [] { + mut secs = ($env.CMD_DURATION_MS | into int) / 1000 + if $secs > 1 { + mut ret = [$'[took ($DURATION_STYLE)'] + + if $secs >= 3600 { + $ret = ($ret | append $'($secs // 3600)h ($secs mod 3600 // 60)m ') + $secs = $secs mod 60 + } else if $secs >= 60 { + $ret = ($ret | append $'($secs // 60)m ') + $secs = $secs mod 60 + } + + ($ret | append $'($secs | math round -p 1)s(ansi reset)]' | str join) + } else { + '' + } +} + +def fast-git-style [] { + let b_info = (do -p { git --no-optional-locks branch -v } | str trim) + if ($b_info | is-empty) { + '' + } else { + let info = ($b_info | parse -r '\* (?(\([\S ]+\))|([\w\/\-\.]+)) +\w+ (\[((?[^\]]+))+\])?') + let state_list = ($info.state.0 | split row ', ' | each { |it| + let p = ($it | parse "{s} {n}") + if ($p | is-empty) { + if ($it | str starts-with "gone") { + $' (ansi light_red)(char failed)' + } else { + '' + } + } else if $p.s.0 == 'ahead' { + $' ($AHEAD_STYLE)($p.n.0)(ansi reset)' + } else if $p.s.0 == 'behind' { + $' ($BEHIND_STYLE)($p.n.0)' + } else { + $' (ansi red)($p.s.0) ($p.n.0)' + } + }) + let state_str = ($state_list | str join) + $'[($BRANCH_STYLE)($info.name.0)(ansi reset)($state_str)(ansi reset)]' + } +} + +def full-git-style [] { + let info_lines = (do -p { git --no-optional-locks status --porcelain=2 --branch } | str trim | lines) + if ($info_lines | is-empty) { + '' + } else { + # Scan lines + let info = ($info_lines | reduce -f { + out: [], + staged: {a: 0, m: 0, d: 0}, + unstaged: {n: 0, m: 0, d: 0, c: 0}, + track: false, + remote: false, + } { |str, ctx| + mut track = $ctx.track + mut remote = $ctx.remote + mut out = $ctx.out + mut staged = $ctx.staged + mut unstaged = $ctx.unstaged + let l = ($str | split row -n 3 ' ') + + if $track == false { + if $l.0 == '#' and $l.1 == 'branch.upstream' { + $track = true + } + } + + # Branch + if $l.0 == '#' { + if $l.1 == 'branch.oid' { + let id = ($l.2 | str substring 0..7) + $out = [$"($BRANCH_STYLE)\(HEAD detached at ($id)\)(ansi reset)"] + } else if $l.1 == 'branch.head' { + if $l.2 != "\(detached\)" { + $out = ($out | update 0 $'($BRANCH_STYLE)($l.2)(ansi reset)') + } + } else if $track { + if $l.1 == 'branch.ab' { + $remote = true + let state = ($l.2 | parse "+{an} -{bn}") + if $state.an.0 != '0' { + $out = ($out | append $' ($AHEAD_STYLE)($state.an.0)(ansi reset)') + } + + if $state.bn.0 != '0' { + $out = ($out | append $' ($BEHIND_STYLE)($state.bn.0)') + } + } + } + } + + # Status + if $l.0 == '?' { + $unstaged = ($unstaged | update n ($unstaged.n + 1)) + } else if $l.0 == 'u' { + $unstaged = ($unstaged | update c ($unstaged.c + 1)) + } else if $l.0 == '1' or $l.0 == '2' { + let state_l = ($l.1 | split chars) + $staged = (update-git-status $staged $state_l.0) + $unstaged = (update-git-status $unstaged $state_l.1) + } + + { + out: $out, + staged: $staged, + unstaged: $unstaged, + track: $track, + remote: $remote, + } + }) + + # Branch string + mut out_list = if $info.track { + if $info.remote == false { + ($info.out | append $' (ansi light_red)(char failed)') + } else if ($info.out | length) < 2 { + ($info.out | append $' (ansi cyan)(char identical_to)') + } else { + $info.out + } + } else { + $info.out + } + + $out_list = ($out_list | append $'(ansi reset)') + + # Stage string + mut stage_list = [] + if $info.staged.a > 0 { + $stage_list = ($stage_list | append $' ($ADD_FILE_STYLE)($info.staged.a)(ansi reset)') + } + + if $info.staged.m > 0 { + $stage_list = ($stage_list | append $' ($MODIFY_FILE_STYLE)($info.staged.m)(ansi reset)') + } + + if $info.staged.d > 0 { + $stage_list = ($stage_list | append $' ($DELETE_FILE_STYLE)($info.staged.d)(ansi reset)') + } + + # Unstage string + mut unstage_list = [] + if $info.unstaged.c > 0 { + $unstage_list = ($unstage_list | append $' ($CONFLICT_FILE_STYLE)($info.unstaged.c)(ansi reset)') + } + + if $info.unstaged.n > 0 { + $unstage_list = ($unstage_list | append $' ($NEW_FILE_STYLE)($info.unstaged.n)(ansi reset)') + } + + if $info.unstaged.m > 0 { + $unstage_list = ($unstage_list | append $' ($MODIFY_FILE_STYLE)($info.unstaged.m)(ansi reset)') + } + + if $info.unstaged.d > 0 { + $unstage_list = ($unstage_list | append $' ($DELETE_FILE_STYLE)($info.unstaged.d)(ansi reset)') + } + + # Append list + if ($stage_list | length) > 0 { + $out_list = ($out_list | append $' | ($STAGE_STYLE):' | append $stage_list) + } + + if ($unstage_list | length) > 0 { + $out_list = ($out_list | append $' | ($UNSTAGE_STYLE):' | append $unstage_list) + } + + $'[($out_list | str join)(ansi reset)]' + } +} + +def update-git-status [ + status: record + m: string +] { + if $m == 'A' { + ($status | update a (($status.a | into int) + 1)) + } else if $m == 'M' { + ($status | update m (($status.m | into int) + 1)) + } else if $m == 'D' { + ($status | update d (($status.d | into int) + 1)) + } else { + $status + } +} + +# Helper ---------------------------------------------------------------------- + +def get-username [] { + if 'USERNAME' in $env { + $env.USERNAME + } else if 'USER' in $env { + $env.USER + } else { + '' + } +} + +def is-self-user [name: string] { + if 'LOGNAME' in $env { + ($env.LOGNAME == $name) + } else { + true + } +} + +def get-hostname [] { + if 'COMPUTERNAME' in $env { + $env.COMPUTERNAME + } else if 'HOSTNAME' in $env { + $env.HOSTNAME + } else { + '' + } +} + +def is-ssh-session [] { + if 'SSH_CONNECTION' in $env { + true + } else if 'SSH_CLIENT' in $env { + true + } else if 'SSH_TTY' in $env { + true + } else { + false + } +}