#!/usr/bin/env nu # Register Installed Plugins - Simple Plugin Registration # # This script finds plugins already installed in ~/.local/bin # and registers them with Nushell config # # Usage: # register_installed_plugins.nu # Register all plugins # register_installed_plugins.nu --check # Check without registering # register_installed_plugins.nu --verify # Register and verify def main [ --check (-c) # Check only, don't register --verify (-v) # Verify registration after adding ] { log_info "šŸ”Œ Plugin Registration Manager" log_info "==================================================================" let install_dir = $"($env.HOME)/.local/bin" # Step 1: Find installed plugins log_info $"\nšŸ“‹ Step 1: Finding installed plugins in ($install_dir)..." let plugins = detect_installed_plugins $install_dir if ($plugins | length) == 0 { log_warn $"No plugins found in ($install_dir)" return } log_success $"Found ($plugins | length) plugin\(s\):" # Group by source let custom = ($plugins | where source == "custom") let core = ($plugins | where source == "core") if ($custom | length) > 0 { log_info " Custom plugins:" for plugin in $custom { log_info $" • ($plugin.name)" } } if ($core | length) > 0 { log_info " Core Nushell 0.108 plugins:" for plugin in $core { log_info $" • ($plugin.name)" } } else { log_info " Core Nushell 0.108 plugins: Not built yet" log_info "" log_warn "šŸ’” To include Nushell core plugins (polars, formats, etc):" log_warn " cd nushell && cargo build --release --workspace && cd .." log_warn " Then run this script again" } if $check { log_info "\nāœ… DRY RUN - No changes made" return } # Step 2: Register plugins log_info "\nšŸ”Œ Step 2: Registering plugins with Nushell..." register_plugins $plugins $verify # Final summary log_info "\n==================================================================" log_success "āœ… Plugin registration complete!" log_info "Next steps:" log_info " 1. Restart Nushell: exit && nu" log_info " 2. Verify plugins: nu -c 'plugin list'" } # Find installed plugins in ~/.local/bin and nushell/target/release def detect_installed_plugins [ install_dir: string ]: nothing -> list { mut all_plugins = [] # Check ~/.local/bin for custom plugins try { let custom_plugins = ls $install_dir | where type == "file" | where {|row| let basename = $row.name | path basename $basename =~ "^nu_plugin_" } | each {|row| let basename = $row.name | path basename { name: $basename path: $row.name source: "custom" } } $all_plugins = ($all_plugins | append $custom_plugins) } catch { # Silently continue if directory doesn't exist } # Check nushell/target/release for core Nushell plugins let nushell_release = "./nushell/target/release" if ($nushell_release | path exists) { try { let core_plugins = ls $nushell_release | where type == "file" | where {|row| let basename = $row.name | path basename $basename =~ "^nu_plugin_" } | each {|row| let basename = $row.name | path basename { name: $basename path: $row.name source: "core" } } $all_plugins = ($all_plugins | append $core_plugins) } catch { # Silently continue if error reading directory } } $all_plugins } # Register plugins with Nushell def register_plugins [ plugins: list verify: bool ] { let results = $plugins | each {|plugin| let plugin_path = $plugin.path let plugin_name = ($plugin.name | str replace "^nu_plugin_" "") log_info $" Registering: ($plugin.name)" let reg_result = try { # Remove old registration if exists (suppress error) try { nu -c $"plugin rm ($plugin_name)" out+err>| null } catch { # Ignore if doesn't exist } # Add new registration nu -c $"plugin add ($plugin_path)" log_success $" āœ“ Registered" # Verify if requested if $verify { try { let found = nu -c $"plugin list | where name =~ ($plugin_name) | length" | into int if $found > 0 { log_success $" āœ“ Verified" {success: true, verified: true} } else { log_warn $" āš ļø Could not verify" {success: true, verified: false} } } catch { log_warn $" āš ļø Verification failed" {success: true, verified: false} } } else { {success: true, verified: null} } } catch {|err| log_error $" āœ— Registration failed: ($err.msg)" {success: false, verified: false} } $reg_result } let registered = ($results | where success | length) let failed = ($results | where {|r| not $r.success} | length) print "" log_success $"šŸ“Š Summary:" log_success $" āœ… Registered: ($registered) plugins" if $failed > 0 { log_error $" āŒ Failed: ($failed) plugins" } } # Logging functions def log_info [msg: string] { print $"ā„¹ļø ($msg)" } def log_success [msg: string] { print $"āœ… ($msg)" } def log_error [msg: string] { print $"āŒ ($msg)" } def log_warn [msg: string] { print $"āš ļø ($msg)" } # Call main function main