Skip to content

Commit 0403e8e

Browse files
fj0rnashvi
andauthored
refactor: unified configuration environment variables (nushell#460)
* refactor: unified configuration environment variables * upgrade README.md --------- Co-authored-by: nash <nash@iffy.me>
1 parent cb61fe5 commit 0403e8e

File tree

2 files changed

+95
-66
lines changed

2 files changed

+95
-66
lines changed

prompt/powerline/README.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
```
33
use power.nu
44
use power_git.nu
5-
power inject 0 1 {source: git, power: '#504945'}
5+
power inject 0 1 {source: git, color: '#504945'}
66
use power_kube.nu
7-
power inject 1 2 {source: kube, power: '#504945'}
7+
power inject 1 2 {source: kube, color: '#504945'}
88
power init
99
```
1010
or
1111
```
12-
let-env NU_PROMPT_SCHEMA = [
12+
let-env NU_POWER_SCHEMA = [
1313
[
14-
{source: pwd, power: '#353230'}
15-
{source: git, power: '#504945'}
14+
{source: pwd, color: '#353230'}
15+
{source: git, color: '#504945'}
1616
]
1717
[
18-
{source: proxy, power: 'dark_gray'}
19-
{source: host, power: '#353230'}
20-
{source: kube, power: '#504945'}
21-
{source: time, power: '#666560'}
18+
{source: proxy, color: 'dark_gray'}
19+
{source: host, color: '#353230'}
20+
{source: kube, color: '#504945'}
21+
{source: time, color: '#666560'}
2222
]
2323
]
2424
@@ -27,11 +27,11 @@ use power.nu
2727
use power_kube.nu
2828
power init
2929
```
30-
`$env.NU_PROMPT_SCHEMA` support configuring dynamically
30+
`$env.NU_POWER_SCHEMA` support configuring dynamically
3131

3232
## mode
33-
- `let-env NU_POWERLINE = true|false` power mode and plain mode
34-
- `let-env NU_UPPROMPT = <no empty>` two line prompt (experimental)
33+
- `let-env NU_POWER_DECORATOR = '<power|plain>'` power mode and plain mode
34+
- `let-env NU_POWER_FRAME = '<default|fill>'` two line prompt (experimental)
3535

3636
## todo
3737
- [ ] proxy stat invalid in plain mode

prompt/powerline/power.nu

+83-54
Original file line numberDiff line numberDiff line change
@@ -84,42 +84,46 @@ def _sep [
8484
color?: string = 'light_yellow'
8585
fg?: string
8686
] {
87-
if not $env.NU_POWERLINE {
88-
let r = match $direction {
89-
'>' => {
90-
let r = $'(ansi light_yellow)|'
91-
{|s| $"($s)($r)" }
87+
match $env.NU_POWER_DECORATOR {
88+
'plain' => {
89+
let r = match $direction {
90+
'>' => {
91+
let r = $'(ansi light_yellow)|'
92+
{|s| $"($s)($r)" }
93+
}
94+
'<' => {
95+
let l = $'(ansi light_yellow)|'
96+
{|s| $"($l)($s)" }
97+
}
98+
'<<'|'>>' => {{|s| $s }}
9299
}
93-
'<' => {
94-
let l = $'(ansi light_yellow)|'
95-
{|s| $"($l)($s)" }
96-
}
97-
'<<'|'>>' => {{|s| $s }}
98-
}
99-
return $r
100-
}
101-
let fg = if ($fg | is-empty) { $color } else { $fg }
102-
match $direction {
103-
'>' => {
104-
let l = (ansi -e {bg: $fg})
105-
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
106-
{|s| $'($l)($s)($r)' }
100+
return $r
107101
}
108-
'>>' => {
109-
let l = (ansi -e {bg: $fg})
110-
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
111-
{|s| $'($l)($s)($r)' }
112-
}
113-
'<'|'<<' => {
114-
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
115-
{|s| $'($l)($s)' }
102+
'power' => {
103+
let fg = if ($fg | is-empty) { $color } else { $fg }
104+
match $direction {
105+
'>' => {
106+
let l = (ansi -e {bg: $fg})
107+
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
108+
{|s| $'($l)($s)($r)' }
109+
}
110+
'>>' => {
111+
let l = (ansi -e {bg: $fg})
112+
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
113+
{|s| $'($l)($s)($r)' }
114+
}
115+
'<'|'<<' => {
116+
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
117+
{|s| $'($l)($s)' }
118+
}
119+
}
116120
}
117121
}
118122
}
119123

120124
def left_prompt [segment] {
121125
let stop = ($segment | length) - 1
122-
let vs = ($segment | each {|x| [$x.power ($env.NU_PROMPT_COMPONENTS | get $x.source)]})
126+
let vs = ($segment | each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]})
123127
let cs = ($vs | each {|x| $x.0})
124128
let cs = ($cs | prepend $cs.1?)
125129
let thunk = ($vs
@@ -141,7 +145,7 @@ def left_prompt [segment] {
141145

142146
def right_prompt [segment] {
143147
let thunk = ( $segment
144-
| each {|x| [$x.power ($env.NU_PROMPT_COMPONENTS | get $x.source)]}
148+
| each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]}
145149
| enumerate
146150
| each {|x|
147151
if $x.index == 0 {
@@ -191,21 +195,30 @@ export def default_env [name value] {
191195
}
192196

193197
export def-env init [] {
194-
if ($env.NU_UPPROMPT? | is-empty) {
195-
let-env PROMPT_COMMAND = (left_prompt $env.NU_PROMPT_SCHEMA.0)
196-
let-env PROMPT_COMMAND_RIGHT = (right_prompt $env.NU_PROMPT_SCHEMA.1)
197-
} else {
198-
let-env PROMPT_COMMAND = (up_prompt $env.NU_PROMPT_SCHEMA)
198+
match $env.NU_POWER_FRAME {
199+
'default' => {
200+
let-env PROMPT_COMMAND = (left_prompt $env.NU_POWER_SCHEMA.0)
201+
let-env PROMPT_COMMAND_RIGHT = (right_prompt $env.NU_POWER_SCHEMA.1)
202+
}
203+
'fill' => {
204+
let-env PROMPT_COMMAND = (up_prompt $env.NU_POWER_SCHEMA)
205+
}
206+
}
207+
208+
let-env PROMPT_INDICATOR = {||
209+
match $env.NU_POWER_DECORATOR {
210+
'plain' => { "> " }
211+
'power' => { " " }
212+
}
199213
}
200-
let-env PROMPT_INDICATOR = {|| if not $env.NU_POWERLINE { "> " } else { " " } }
201214
let-env PROMPT_INDICATOR_VI_INSERT = {|| ": " }
202215
let-env PROMPT_INDICATOR_VI_NORMAL = {|| "> " }
203216
let-env PROMPT_MULTILINE_INDICATOR = {|| "::: " }
204217

205218
let-env config = ( $env.config | update menus ($env.config.menus
206219
| each {|x|
207-
if ($x.marker in ($env.MENU_MARKER_SCHEMA | columns)) {
208-
let c = ($env.MENU_MARKER_SCHEMA | get $x.marker)
220+
if ($x.marker in ($env.NU_MENU_MARKER | columns)) {
221+
let c = ($env.NU_MENU_MARKER | get $x.marker)
209222
$x | upsert marker $'(ansi -e {fg: $c})(char nf_left_segment_thin) '
210223
} else {
211224
$x
@@ -223,7 +236,7 @@ export def-env register [name source] {
223236
}
224237

225238
export def-env inject [pos idx define] {
226-
let prev = ($env.NU_PROMPT_SCHEMA | get $pos)
239+
let prev = ($env.NU_POWER_SCHEMA | get $pos)
227240
let next = if $idx == 0 {
228241
$prev | prepend $define
229242
} else {
@@ -234,8 +247,8 @@ export def-env inject [pos idx define] {
234247
] | flatten
235248
}
236249

237-
let-env NU_PROMPT_SCHEMA = (
238-
$env.NU_PROMPT_SCHEMA
250+
let-env NU_POWER_SCHEMA = (
251+
$env.NU_POWER_SCHEMA
239252
| update $pos $next
240253
)
241254
}
@@ -248,30 +261,48 @@ export def-env hook [] {
248261
let-env config = ( $env.config | upsert hooks.env_change { |config|
249262
let init = [{|before, after| if not ($before | is-empty) { init } }]
250263
$config.hooks.env_change
251-
| upsert NU_UPPROMPT $init
252-
| upsert NU_POWERLINE $init
253-
| upsert NU_PROMPT_SCHEMA $init
254-
| upsert MENU_MARKER_SCHEMA $init
264+
| upsert NU_POWER_SCHEMA $init
265+
| upsert NU_POWER_FRAME $init
266+
| upsert NU_POWER_DECORATOR $init
267+
| upsert NU_MENU_MARKER $init
268+
# NU_POWER_THEME
255269
})
256270
}
257271

258272
export-env {
259-
let-env NU_PROMPT_SCHEMA = (default_env
260-
NU_PROMPT_SCHEMA
273+
let-env NU_POWER_SCHEMA = (default_env
274+
NU_POWER_SCHEMA
261275
[
262276
[
263-
{source: pwd, power: '#353230'}
277+
{source: pwd, color: '#353230'}
264278
]
265279
[
266-
{source: proxy, power: 'dark_gray'}
267-
{source: host, power: '#353230'}
268-
{source: time, power: '#666560'}
280+
{source: proxy, color: 'dark_gray'}
281+
{source: host, color: '#353230'}
282+
{source: time, color: '#666560'}
269283
]
270284
]
271285
)
272286

273-
let-env MENU_MARKER_SCHEMA = (default_env
274-
MENU_MARKER_SCHEMA
287+
let-env NU_POWER_FRAME = (default_env
288+
NU_POWER_FRAME
289+
'default' # default | fill
290+
)
291+
292+
let-env NU_POWER_DECORATOR = (default_env
293+
NU_POWER_DECORATOR
294+
'power' # power | plain
295+
)
296+
297+
let-env NU_POWER_THEME = (default_env
298+
NU_POWER_THEME
299+
{
300+
red: (ansi red)
301+
}
302+
)
303+
304+
let-env NU_MENU_MARKER = (default_env
305+
NU_MENU_MARKER
275306
{
276307
"| " : 'green'
277308
": " : 'yellow'
@@ -280,8 +311,6 @@ export-env {
280311
}
281312
)
282313

283-
let-env NU_POWERLINE = (default_env NU_POWERLINE true)
284-
285314
let-env NU_PROMPT_COMPONENTS = {
286315
pwd: (pwd_abbr)
287316
proxy: (proxy_stat)

0 commit comments

Comments
 (0)