1
Fork 0
mirror of https://github.com/RGBCube/nu_scripts synced 2025-08-02 07:07:46 +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_git.nu
power inject 0 1 {source: git, power: '#504945'}
power inject 0 1 {source: git, color: '#504945'}
use power_kube.nu
power inject 1 2 {source: kube, power: '#504945'}
power inject 1 2 {source: kube, color: '#504945'}
power init
```
or
```
let-env NU_PROMPT_SCHEMA = [
let-env NU_POWER_SCHEMA = [
[
{source: pwd, power: '#353230'}
{source: git, power: '#504945'}
{source: pwd, color: '#353230'}
{source: git, color: '#504945'}
]
[
{source: proxy, power: 'dark_gray'}
{source: host, power: '#353230'}
{source: kube, power: '#504945'}
{source: time, power: '#666560'}
{source: proxy, color: 'dark_gray'}
{source: host, color: '#353230'}
{source: kube, color: '#504945'}
{source: time, color: '#666560'}
]
]
@ -27,11 +27,11 @@ use power.nu
use power_kube.nu
power init
```
`$env.NU_PROMPT_SCHEMA` support configuring dynamically
`$env.NU_POWER_SCHEMA` support configuring dynamically
## mode
- `let-env NU_POWERLINE = true|false` power mode and plain mode
- `let-env NU_UPPROMPT = <no empty>` two line prompt (experimental)
- `let-env NU_POWER_DECORATOR = '<power|plain>'` power mode and plain mode
- `let-env NU_POWER_FRAME = '<default|fill>'` two line prompt (experimental)
## todo
- [ ] proxy stat invalid in plain mode

View file

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