1
Fork 0
mirror of https://github.com/RGBCube/nu_scripts synced 2025-08-02 15:17:47 +00:00

refactor: unified configuration environment variables (#460)

* refactor: unified configuration environment variables

* upgrade README.md

---------

Co-authored-by: nash <nash@iffy.me>
This commit is contained in:
fj0r 2023-04-24 21:24:08 +08:00 committed by GitHub
parent cb61fe50ec
commit 0403e8ebf3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 66 deletions

View file

@ -2,23 +2,23 @@
``` ```
use power.nu use power.nu
use power_git.nu use power_git.nu
power inject 0 1 {source: git, power: '#504945'} power inject 0 1 {source: git, color: '#504945'}
use power_kube.nu use power_kube.nu
power inject 1 2 {source: kube, power: '#504945'} power inject 1 2 {source: kube, color: '#504945'}
power init power init
``` ```
or or
``` ```
let-env NU_PROMPT_SCHEMA = [ let-env NU_POWER_SCHEMA = [
[ [
{source: pwd, power: '#353230'} {source: pwd, color: '#353230'}
{source: git, power: '#504945'} {source: git, color: '#504945'}
] ]
[ [
{source: proxy, power: 'dark_gray'} {source: proxy, color: 'dark_gray'}
{source: host, power: '#353230'} {source: host, color: '#353230'}
{source: kube, power: '#504945'} {source: kube, color: '#504945'}
{source: time, power: '#666560'} {source: time, color: '#666560'}
] ]
] ]
@ -27,11 +27,11 @@ use power.nu
use power_kube.nu use power_kube.nu
power init power init
``` ```
`$env.NU_PROMPT_SCHEMA` support configuring dynamically `$env.NU_POWER_SCHEMA` support configuring dynamically
## mode ## mode
- `let-env NU_POWERLINE = true|false` power mode and plain mode - `let-env NU_POWER_DECORATOR = '<power|plain>'` power mode and plain mode
- `let-env NU_UPPROMPT = <no empty>` two line prompt (experimental) - `let-env NU_POWER_FRAME = '<default|fill>'` two line prompt (experimental)
## todo ## todo
- [ ] proxy stat invalid in plain mode - [ ] proxy stat invalid in plain mode

View file

@ -84,42 +84,46 @@ def _sep [
color?: string = 'light_yellow' color?: string = 'light_yellow'
fg?: string fg?: string
] { ] {
if not $env.NU_POWERLINE { match $env.NU_POWER_DECORATOR {
let r = match $direction { 'plain' => {
'>' => { let r = match $direction {
let r = $'(ansi light_yellow)|' '>' => {
{|s| $"($s)($r)" } let r = $'(ansi light_yellow)|'
{|s| $"($s)($r)" }
}
'<' => {
let l = $'(ansi light_yellow)|'
{|s| $"($l)($s)" }
}
'<<'|'>>' => {{|s| $s }}
} }
'<' => { return $r
let l = $'(ansi light_yellow)|' }
{|s| $"($l)($s)" } 'power' => {
let fg = if ($fg | is-empty) { $color } else { $fg }
match $direction {
'>' => {
let l = (ansi -e {bg: $fg})
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
{|s| $'($l)($s)($r)' }
}
'>>' => {
let l = (ansi -e {bg: $fg})
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
{|s| $'($l)($s)($r)' }
}
'<'|'<<' => {
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
{|s| $'($l)($s)' }
}
} }
'<<'|'>>' => {{|s| $s }}
}
return $r
}
let fg = if ($fg | is-empty) { $color } else { $fg }
match $direction {
'>' => {
let l = (ansi -e {bg: $fg})
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
{|s| $'($l)($s)($r)' }
}
'>>' => {
let l = (ansi -e {bg: $fg})
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
{|s| $'($l)($s)($r)' }
}
'<'|'<<' => {
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
{|s| $'($l)($s)' }
} }
} }
} }
def left_prompt [segment] { def left_prompt [segment] {
let stop = ($segment | length) - 1 let stop = ($segment | length) - 1
let vs = ($segment | each {|x| [$x.power ($env.NU_PROMPT_COMPONENTS | get $x.source)]}) let vs = ($segment | each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]})
let cs = ($vs | each {|x| $x.0}) let cs = ($vs | each {|x| $x.0})
let cs = ($cs | prepend $cs.1?) let cs = ($cs | prepend $cs.1?)
let thunk = ($vs let thunk = ($vs
@ -141,7 +145,7 @@ def left_prompt [segment] {
def right_prompt [segment] { def right_prompt [segment] {
let thunk = ( $segment let thunk = ( $segment
| each {|x| [$x.power ($env.NU_PROMPT_COMPONENTS | get $x.source)]} | each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]}
| enumerate | enumerate
| each {|x| | each {|x|
if $x.index == 0 { if $x.index == 0 {
@ -191,21 +195,30 @@ export def default_env [name value] {
} }
export def-env init [] { export def-env init [] {
if ($env.NU_UPPROMPT? | is-empty) { match $env.NU_POWER_FRAME {
let-env PROMPT_COMMAND = (left_prompt $env.NU_PROMPT_SCHEMA.0) 'default' => {
let-env PROMPT_COMMAND_RIGHT = (right_prompt $env.NU_PROMPT_SCHEMA.1) let-env PROMPT_COMMAND = (left_prompt $env.NU_POWER_SCHEMA.0)
} else { let-env PROMPT_COMMAND_RIGHT = (right_prompt $env.NU_POWER_SCHEMA.1)
let-env PROMPT_COMMAND = (up_prompt $env.NU_PROMPT_SCHEMA) }
'fill' => {
let-env PROMPT_COMMAND = (up_prompt $env.NU_POWER_SCHEMA)
}
}
let-env PROMPT_INDICATOR = {||
match $env.NU_POWER_DECORATOR {
'plain' => { "> " }
'power' => { " " }
}
} }
let-env PROMPT_INDICATOR = {|| if not $env.NU_POWERLINE { "> " } else { " " } }
let-env PROMPT_INDICATOR_VI_INSERT = {|| ": " } let-env PROMPT_INDICATOR_VI_INSERT = {|| ": " }
let-env PROMPT_INDICATOR_VI_NORMAL = {|| "> " } let-env PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
let-env PROMPT_MULTILINE_INDICATOR = {|| "::: " } let-env PROMPT_MULTILINE_INDICATOR = {|| "::: " }
let-env config = ( $env.config | update menus ($env.config.menus let-env config = ( $env.config | update menus ($env.config.menus
| each {|x| | each {|x|
if ($x.marker in ($env.MENU_MARKER_SCHEMA | columns)) { if ($x.marker in ($env.NU_MENU_MARKER | columns)) {
let c = ($env.MENU_MARKER_SCHEMA | get $x.marker) let c = ($env.NU_MENU_MARKER | get $x.marker)
$x | upsert marker $'(ansi -e {fg: $c})(char nf_left_segment_thin) ' $x | upsert marker $'(ansi -e {fg: $c})(char nf_left_segment_thin) '
} else { } else {
$x $x
@ -223,7 +236,7 @@ export def-env register [name source] {
} }
export def-env inject [pos idx define] { export def-env inject [pos idx define] {
let prev = ($env.NU_PROMPT_SCHEMA | get $pos) let prev = ($env.NU_POWER_SCHEMA | get $pos)
let next = if $idx == 0 { let next = if $idx == 0 {
$prev | prepend $define $prev | prepend $define
} else { } else {
@ -234,8 +247,8 @@ export def-env inject [pos idx define] {
] | flatten ] | flatten
} }
let-env NU_PROMPT_SCHEMA = ( let-env NU_POWER_SCHEMA = (
$env.NU_PROMPT_SCHEMA $env.NU_POWER_SCHEMA
| update $pos $next | update $pos $next
) )
} }
@ -248,30 +261,48 @@ export def-env hook [] {
let-env config = ( $env.config | upsert hooks.env_change { |config| let-env config = ( $env.config | upsert hooks.env_change { |config|
let init = [{|before, after| if not ($before | is-empty) { init } }] let init = [{|before, after| if not ($before | is-empty) { init } }]
$config.hooks.env_change $config.hooks.env_change
| upsert NU_UPPROMPT $init | upsert NU_POWER_SCHEMA $init
| upsert NU_POWERLINE $init | upsert NU_POWER_FRAME $init
| upsert NU_PROMPT_SCHEMA $init | upsert NU_POWER_DECORATOR $init
| upsert MENU_MARKER_SCHEMA $init | upsert NU_MENU_MARKER $init
# NU_POWER_THEME
}) })
} }
export-env { export-env {
let-env NU_PROMPT_SCHEMA = (default_env let-env NU_POWER_SCHEMA = (default_env
NU_PROMPT_SCHEMA NU_POWER_SCHEMA
[ [
[ [
{source: pwd, power: '#353230'} {source: pwd, color: '#353230'}
] ]
[ [
{source: proxy, power: 'dark_gray'} {source: proxy, color: 'dark_gray'}
{source: host, power: '#353230'} {source: host, color: '#353230'}
{source: time, power: '#666560'} {source: time, color: '#666560'}
] ]
] ]
) )
let-env MENU_MARKER_SCHEMA = (default_env let-env NU_POWER_FRAME = (default_env
MENU_MARKER_SCHEMA NU_POWER_FRAME
'default' # default | fill
)
let-env NU_POWER_DECORATOR = (default_env
NU_POWER_DECORATOR
'power' # power | plain
)
let-env NU_POWER_THEME = (default_env
NU_POWER_THEME
{
red: (ansi red)
}
)
let-env NU_MENU_MARKER = (default_env
NU_MENU_MARKER
{ {
"| " : 'green' "| " : 'green'
": " : 'yellow' ": " : 'yellow'
@ -280,8 +311,6 @@ export-env {
} }
) )
let-env NU_POWERLINE = (default_env NU_POWERLINE true)
let-env NU_PROMPT_COMPONENTS = { let-env NU_PROMPT_COMPONENTS = {
pwd: (pwd_abbr) pwd: (pwd_abbr)
proxy: (proxy_stat) proxy: (proxy_stat)