From 4a912cf7e763d9567c9a54c3cdc7af9adf2e759e Mon Sep 17 00:00:00 2001 From: gwbeip Date: Wed, 27 May 2026 00:13:28 +0800 Subject: [PATCH] feat(ZSH): auto start nushell if it exits when init zsh --- nushell/modules/pj_prompt.nu | 28 ++++++++++++++++++++++++++-- zsh/zshrc | 4 ++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/nushell/modules/pj_prompt.nu b/nushell/modules/pj_prompt.nu index e96cf0f..227eba4 100644 --- a/nushell/modules/pj_prompt.nu +++ b/nushell/modules/pj_prompt.nu @@ -3,7 +3,8 @@ export def --env "pj starship config" [name: string] { echo "starship is not installed." return } - $env.starship_config = ($env.NU_POLYJUICE_PATH | path join ".." "starship" $"starship_($name).toml") + let cfg = ($env.NU_POLYJUICE_PATH | path join ".." "starship" $"starship_($name).toml") + $env.STARSHIP_CONFIG = $cfg } export def --env "pj starship list" [] { @@ -14,6 +15,28 @@ export def --env "pj starship list" [] { ls ($env.NU_POLYJUICE_PATH | path join ".." "starship") -s | get name | parse -r '^(starship_(?.*).toml)$' | get name } +export def "pj starship doctor" [] { + let installed = ((which ^starship | length) > 0) + let prompt_type = ($env.PROMPT_COMMAND? | describe) + let right_prompt_type = ($env.PROMPT_COMMAND_RIGHT? | describe) + let prompt_cmd = (($env.PROMPT_COMMAND? | to nuon --serialize) | default "") + let right_prompt_cmd = (($env.PROMPT_COMMAND_RIGHT? | to nuon --serialize) | default "") + let prompt_uses_starship = ($prompt_cmd | str contains "starship' prompt") + let right_prompt_uses_starship = ($right_prompt_cmd | str contains "starship' prompt") + + { + starship_installed: $installed + starship_path: ((which ^starship | get path.0?) | default "") + starship_version: (if $installed { (^starship --version | str trim) } else { "" }) + STARSHIP_SHELL: ($env.STARSHIP_SHELL? | default "") + STARSHIP_CONFIG: ($env.STARSHIP_CONFIG? | default "") + prompt_command_type: $prompt_type + prompt_command_uses_starship: $prompt_uses_starship + prompt_command_right_type: $right_prompt_type + prompt_command_right_uses_starship: $right_prompt_uses_starship + } +} + export-env { if (which ^starship | is-not-empty) { $env.STARSHIP_SHELL = "nu" @@ -51,6 +74,7 @@ export-env { ) } } - $env.starship_config = ($env.NU_POLYJUICE_PATH | path join ".." "starship" $"starship_default.toml") + let default_cfg = ($env.NU_POLYJUICE_PATH | path join ".." "starship" $"starship_default.toml") + $env.STARSHIP_CONFIG = $default_cfg } } diff --git a/zsh/zshrc b/zsh/zshrc index 70a1668..ed86108 100644 --- a/zsh/zshrc +++ b/zsh/zshrc @@ -7,6 +7,10 @@ if [ ! -n "${ZSH_VERSION}" ]; then return 1 fi +if [ $+commands[nu] ]; then + exec nu +fi + # get the dir name that current file in function get_current_dir_name { _source="${(%):-%x}"