Some checks failed
Build and Test / Validate Setup (push) Has been cancelled
Build and Test / Build (darwin-amd64) (push) Has been cancelled
Build and Test / Build (darwin-arm64) (push) Has been cancelled
Build and Test / Build (linux-amd64) (push) Has been cancelled
Build and Test / Build (windows-amd64) (push) Has been cancelled
Build and Test / Build (linux-arm64) (push) Has been cancelled
Build and Test / Security Audit (push) Has been cancelled
Build and Test / Package Results (push) Has been cancelled
Build and Test / Quality Gate (push) Has been cancelled
209 lines
6.1 KiB
Plaintext
Executable File
209 lines
6.1 KiB
Plaintext
Executable File
#!/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<record> {
|
||
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<record>
|
||
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
|