diff --git a/nushell/modules/pj_completions.nu b/nushell/modules/pj_completions.nu index b25f429..aa61f07 100644 --- a/nushell/modules/pj_completions.nu +++ b/nushell/modules/pj_completions.nu @@ -1,4 +1,21 @@ -def "pj completion" [ +const pj_module_dir = (path self | path dirname) +const pj_completion_base_dir = ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions') +const pj_completion_commands = [git ssh cargo uv rustup make pytest rg tar fzf vscode winget zig] + +def _pj_completion_script_path [name: string] { + ($pj_completion_base_dir | path join $name $"($name)-completions.nu") +} + +def _pj_required_completion_files [] { + $pj_completion_commands | each {|name| + { + command: $name + file: (_pj_completion_script_path $name) + } + } +} + +export def "pj completion" [ --update(-u) # Pull latest changes when repo already exists. --force(-f) # Re-clone even when repo already exists. ] { @@ -47,18 +64,11 @@ def "pj completion" [ } } - let required = [ - ($completion_dir | path join 'git' 'git-completions.nu') - ($completion_dir | path join 'ssh' 'ssh-completions.nu') - ($completion_dir | path join 'cargo' 'cargo-completions.nu') - ($completion_dir | path join 'uv' 'uv-completions.nu') - ($completion_dir | path join 'rustup' 'rustup-completions.nu') - ] - - let missing = ($required | where {|f| not ($f | path exists) }) + let required = (_pj_required_completion_files) + let missing = ($required | where {|it| not ($it.file | path exists) }) if not ($missing | is-empty) { print "[pj completion] warning: some required completion files are missing:" - $missing | each {|f| print $" - ($f)" } + $missing | each {|it| print $" - ($it.command): ($it.file)" } } print "[pj completion] ok" @@ -66,6 +76,7 @@ def "pj completion" [ cache_dir: $cache_dir repo_dir: $repo_dir completion_dir: $completion_dir + commands: $pj_completion_commands missing_files: $missing } } @@ -85,36 +96,16 @@ export-env { } } -const pj_module_dir = (path self | path dirname) - -const git_completion = if (($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'git' 'git-completions.nu') | path exists) { - ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'git' 'git-completions.nu') -} else { - null -} -const ssh_completion = if (($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'ssh' 'ssh-completions.nu') | path exists) { - ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'ssh' 'ssh-completions.nu') -} else { - null -} -const cargo_completion = if (($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'cargo' 'cargo-completions.nu') | path exists) { - ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'cargo' 'cargo-completions.nu') -} else { - null -} -const uv_completion = if (($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'uv' 'uv-completions.nu') | path exists) { - ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'uv' 'uv-completions.nu') -} else { - null -} -const rustup_completion = if (($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'rustup' 'rustup-completions.nu') | path exists) { - ($pj_module_dir | path join '..' 'cache' 'nu_scripts' 'custom-completions' 'rustup' 'rustup-completions.nu') -} else { - null -} - -use $git_completion * -use $ssh_completion * -use $cargo_completion * -use $uv_completion * -use $rustup_completion * +# Re-export imported extern signatures so they are visible when this module is `use`d. +export use ($pj_completion_base_dir | path join 'git' 'git-completions.nu') * +export use ($pj_completion_base_dir | path join 'ssh' 'ssh-completions.nu') * +export use ($pj_completion_base_dir | path join 'cargo' 'cargo-completions.nu') * +export use ($pj_completion_base_dir | path join 'uv' 'uv-completions.nu') * +export use ($pj_completion_base_dir | path join 'rustup' 'rustup-completions.nu') * +export use ($pj_completion_base_dir | path join 'make' 'make-completions.nu') * +export use ($pj_completion_base_dir | path join 'pytest' 'pytest-completions.nu') * +export use ($pj_completion_base_dir | path join 'rg' 'rg-completions.nu') * +export use ($pj_completion_base_dir | path join 'tar' 'tar-completions.nu') * +export use ($pj_completion_base_dir | path join 'vscode' 'vscode-completions.nu') * +export use ($pj_completion_base_dir | path join 'winget' 'winget-completions.nu') * +export use ($pj_completion_base_dir | path join 'zig' 'zig-completions.nu') * diff --git a/nushell/modules/pj_prompt.nu b/nushell/modules/pj_prompt.nu index 7d29825..91e332e 100644 --- a/nushell/modules/pj_prompt.nu +++ b/nushell/modules/pj_prompt.nu @@ -572,7 +572,7 @@ def _pj_prompt_static_base [] { def _pj_left_prompt [] { let p = ($env.PJ_PROMPT_PALETTE? | default (_pj_palette_default)) - let static = ($env.PJ_PROMPT_STATIC? | default (_pj_prompt_static_base)) + let static = ($env.PJ_LEFT_PROMPT_STATIC_PART? | default (_pj_prompt_static_base)) let user_color = if ($static.effective_user == "root") { $p.c_root } else { $p.c_user } @@ -635,7 +635,7 @@ export-env { load-env { PJ_PROMPT_PALETTE: (_pj_palette_default) PJ_OS_KEY: (_pj_detect_os_key) - PJ_PROMPT_STATIC: (_pj_prompt_static_base) + PJ_LEFT_PROMPT_STATIC_PART: (_pj_prompt_static_base) PROMPT_MULTILINE_INDICATOR: ":" PROMPT_INDICATOR: {|| _pj_prompt_indicator diff --git a/nushell/nu_polyjuice.nu b/nushell/nu_polyjuice.nu index 74f3f3d..8831f76 100644 --- a/nushell/nu_polyjuice.nu +++ b/nushell/nu_polyjuice.nu @@ -6,7 +6,7 @@ $env.NU_POLYJUICE_PATH = $env.FILE_PWD # modules use modules/pj_aliases.nu * -source modules/pj_completions.nu +use modules/pj_completions.nu * use modules/pj_helix.nu * use modules/pj_fzf.nu * use modules/pj_zoxide.nu *