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/