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:
parent
cb61fe50ec
commit
0403e8ebf3
2 changed files with 95 additions and 66 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue