528 字
3 分钟
给nushell配置自定义的欢迎banner

引言#

近闻nushell十分新奇,便从zsh切换至了nushell

为了装逼在使用时获取信息,于是想自定义一下欢迎banner

原先的banner是这样的

教程#

参考了github上的一个讨论和AI助手

具体配置修改如下

def show_banner [] {
fastfetch --logo none
print $" (ansi green) __ ,(ansi reset)
(ansi green) .--\(\)°'.' (ansi reset)Welcome to (ansi green)Nushell(ansi reset),
(ansi green)'|, . ,' (ansi reset)based on the (ansi green)nu(ansi reset) language,
(ansi green) !_-\(_\\ (ansi reset)where all data is structured!"
print $""
}
show_banner
#下面是AI协助生成的代码,有修改
let first_run = true
$env.config.hooks = {
env_change: {
PATH: [ # 可以监听 PATH 环境变量的变化,因为启动时 PATH 肯定会变化
{||
if $first_run {
print $"(ansi green)Startup time:(ansi reset) ($nu.startup-time)"
print $""
let first_run = false # 设置为 false,防止重复执行
}
}
]
}
}

过程#

一开始使用的是

def show_banner [] {
fastfetch --logo none
print $" (ansi green) __ ,(ansi reset)
(ansi green) .--\(\)°'.' (ansi reset)Welcome to (ansi green)Nushell(ansi reset),
(ansi green)'|, . ,' (ansi reset)based on the (ansi green)nu(ansi reset) language,
(ansi green) !_-\(_\\ (ansi reset)where all data is structured!"
print $"Startup Time:" ($nu.startup-time)
print $""
}
show_banner

但是这种会导致Startup Time显示为-1ns

推测是由于 $nu.startup-time 还未被声明,参考讨论

于是根据热心群众@brendon-felix方案,我也选择了hook的方法

在AI的协助下,便有了

let first_run = true
$env.config.hooks = {
env_change: {
PATH: [ # 可以监听 PATH 环境变量的变化,因为启动时 PATH 肯定会变化
{||
if $first_run {
print $"Startup time: ($nu.startup-time)"
$first_run = false # 设置为 false,防止重复执行
}
}
]
}
}

但是这是不行的,一是不够美观

参考原版,我将

print $"Startup time: ($nu.startup-time)"

修改为

print $"(ansi green)Startup time:(ansi reset) ($nu.startup-time)"
print $""

二是语法有问题

print $"Startup time: ($nu.startup-time)"
$first_run = false # 设置为 false,防止重复执行

AI想当然的直接使用了 $first_run = false

但在nushell的配置文件里面,得改成

let first_run = false

这样就差不多了,满足了我的需求

最终效果#

结语#

nushell配置这种banner还是挺麻烦的,鉴于我是一个非科班出身的业余爱好者,所以大致只能这样了,如有问题,还请不吝指教

给nushell配置自定义的欢迎banner
https://lnpo.qzz.io/posts/nushell-custom-banner/
作者
Enceka
发布于
2025-08-09
许可协议
CC BY-NC-SA 4.0