
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
Nightly Build / Check for Changes (push) Has been cancelled
Nightly Build / Validate Setup (push) Has been cancelled
Nightly Build / Nightly Build (darwin-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (darwin-arm64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (windows-amd64) (push) Has been cancelled
Nightly Build / Nightly Build (linux-arm64) (push) Has been cancelled
Nightly Build / Create Nightly Pre-release (push) Has been cancelled
Nightly Build / Notify Build Status (push) Has been cancelled
Nightly Build / Nightly Maintenance (push) Has been cancelled
974 lines
32 KiB
Markdown
974 lines
32 KiB
Markdown
# 🚀 Nushell Plugins Repository
|
|
|
|
A comprehensive collection of nushell plugins with automated upstream tracking, dependency management, development workflows, and **complete Nushell distribution system**.
|
|
|
|
## 🆕 NEW: Full Nushell Distribution System
|
|
|
|
**Transform from development complexity to one-liner installation!**
|
|
|
|
This repository now provides **complete Nushell distributions** that include Nushell itself plus all plugins, offering zero-prerequisite installation for end users:
|
|
|
|
### 🎯 End User Installation (Zero Prerequisites)
|
|
```bash
|
|
# One-liner installation (Linux/macOS)
|
|
curl -sSf https://your-url/install.sh | sh
|
|
|
|
# Windows PowerShell
|
|
iwr https://your-url/install.ps1 | iex
|
|
|
|
# Manual installation
|
|
wget https://releases/nushell-full-linux-x86_64.tar.gz
|
|
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
|
|
```
|
|
|
|
### 🚀 Developer Distribution Commands
|
|
```bash
|
|
just build-full # Build nushell + all plugins
|
|
just pack-full # Create distribution package
|
|
just pack-full-all # All platforms
|
|
just verify-full # Verify installation
|
|
just release-full-cross # Complete release workflow
|
|
```
|
|
|
|
### ✨ Key Features
|
|
- **Zero Prerequisites**: No Rust, Cargo, or Nu installation required
|
|
- **Cross-Platform**: Linux, macOS, Windows support
|
|
- **Complete Environment**: Nushell + all plugins + configuration
|
|
- **Professional Installation**: Clean install/uninstall experience
|
|
- **Bootstrap Installers**: Production-ready installation scripts
|
|
|
|
## 📋 Table of Contents
|
|
|
|
- [Quick Start](#-quick-start)
|
|
- [End User Installation](#-end-user-installation-zero-prerequisites)
|
|
- [Full Distribution System](#-full-distribution-system)
|
|
- [Why This Repository?](#-why-this-repository)
|
|
- [Plugin Collection](#-plugin-collection)
|
|
- [Building and Cross-Compilation](#-building-and-cross-compilation)
|
|
- [Development Workflows](#-development-workflows)
|
|
- [Upstream Tracking System](#-upstream-tracking-system)
|
|
- [Scripts and Tools](#-scripts-and-tools)
|
|
- [File Structure](#-file-structure)
|
|
- [Installation Methods](#-installation-methods)
|
|
- [FAQ](#-faq)
|
|
- [Contributing](#-contributing)
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### For End Users (Zero Prerequisites)
|
|
|
|
```bash
|
|
# One-liner installation
|
|
curl -sSf https://your-url/install.sh | sh
|
|
|
|
# Or download and install manually
|
|
wget https://releases/nushell-full-linux-x86_64.tar.gz
|
|
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
|
|
```
|
|
|
|
### For Developers
|
|
|
|
#### Prerequisites
|
|
```bash
|
|
# Install required tools
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust
|
|
cargo install just # Just (optional but recommended)
|
|
# Note: Nushell will be auto-installed if missing
|
|
```
|
|
|
|
#### Development Workflow
|
|
```bash
|
|
# Clone the repository
|
|
git clone <repository-url>
|
|
cd nushell-plugins
|
|
|
|
# Validate nushell version consistency (recommended first step)
|
|
just validate-nushell
|
|
|
|
# Plugin development
|
|
just status # Show plugin status
|
|
just status-mark-locals-ok # Mark local plugins as OK (recommended)
|
|
just upstream-check # Check for upstream updates
|
|
just build # Build all plugins
|
|
just dev-flow # Complete development workflow
|
|
|
|
# Distribution creation
|
|
just build-nushell # Build nushell + system plugins (uses --workspace flag)
|
|
just build-full # Build nushell + system plugins + custom plugins
|
|
just collect # Collect nushell + all plugins for distribution
|
|
just pack-full # Create distribution package
|
|
just release-full-cross # Complete cross-platform release
|
|
```
|
|
|
|
### ⚠️ Critical: Version Consistency
|
|
|
|
**This system requires version consistency between your installed nushell and the submodule version.** All operations automatically check version consistency and will fail if versions don't match.
|
|
|
|
- **Auto-fix**: `just fix-nushell` or `./scripts/run.sh --fix --check-only`
|
|
- **Manual check**: `just validate-nushell`
|
|
|
|
## 🎯 Full Distribution System
|
|
|
|
### What is it?
|
|
|
|
The Full Distribution System transforms this repository from a **development-focused plugin collection** into a **complete Nushell distribution platform**. Instead of requiring users to install Rust, clone repositories, and build plugins, they can now install a complete Nushell environment with a single command.
|
|
|
|
### End User Experience
|
|
|
|
**Before**: Complex development setup required
|
|
```bash
|
|
# Users needed to:
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Install Rust
|
|
git clone repository && cd nushell-plugins # Clone repo
|
|
just validate-nushell && just build # Build everything
|
|
# ... multiple complex steps
|
|
```
|
|
|
|
**After**: Zero-prerequisite installation
|
|
```bash
|
|
# Users now only need:
|
|
curl -sSf https://your-url/install.sh | sh # Done!
|
|
```
|
|
|
|
### Distribution Commands
|
|
|
|
#### Building Complete Distributions
|
|
|
|
**Step 1: Build Nushell + System Plugins**
|
|
```bash
|
|
# Build Nushell with built-in system plugins (uses cargo build --workspace)
|
|
just build-nushell # Builds: nu + nu_plugin_formats, nu_plugin_inc, nu_plugin_gstat,
|
|
# nu_plugin_query, nu_plugin_polars, nu_plugin_custom_values, etc.
|
|
|
|
# Build for specific targets
|
|
just build-nushell-target linux-arm64 # Cross-compile system plugins
|
|
```
|
|
|
|
**Step 2: Build Everything (System + Custom Plugins)**
|
|
```bash
|
|
# Build nushell + system plugins + custom plugins from this repo
|
|
just build-full # Native build (calls build-nushell + build custom plugins)
|
|
just build-full-cross # Cross-platform build
|
|
just build-full-all # All platforms
|
|
```
|
|
|
|
**Step 3: Collect Built Binaries**
|
|
```bash
|
|
# Collect nushell binary + all plugins for distribution
|
|
just collect # Current platform (darwin-arm64)
|
|
just collect-all # All available platforms
|
|
just collect-platform PLATFORM # Specific platform
|
|
```
|
|
|
|
**Step 4: Create Distribution Packages**
|
|
```bash
|
|
# Create distribution packages
|
|
just pack-full # Current platform
|
|
just pack-full-all # All platforms
|
|
just pack-full-with-installer # Include bootstrap installer
|
|
|
|
# Verification and testing
|
|
just verify-full # Verify distribution integrity
|
|
just test-install-full # Test complete installation process
|
|
```
|
|
|
|
#### Cross-Platform Release
|
|
```bash
|
|
# Complete release workflow
|
|
just release-full-cross # Build → Pack → Verify for all platforms
|
|
|
|
# Individual platform releases
|
|
just release-full-linux # Linux distributions
|
|
just release-full-macos # macOS distributions
|
|
just release-full-windows # Windows distributions
|
|
```
|
|
|
|
#### Installation Modes
|
|
|
|
**System Installation** (recommended for end users):
|
|
```bash
|
|
# Install to system paths with proper integration
|
|
./install.sh
|
|
|
|
# Windows
|
|
./install.ps1
|
|
|
|
# Custom installation path
|
|
./install.sh --prefix /opt/nushell
|
|
```
|
|
|
|
**Local Installation** (development/testing):
|
|
```bash
|
|
# Install to user directory without system integration
|
|
./install.sh --local
|
|
|
|
# Portable installation
|
|
./install.sh --portable --path ./nushell-portable
|
|
```
|
|
|
|
### Distribution Architecture
|
|
|
|
#### Components Included
|
|
- **Nushell Binary**: Complete nushell installation
|
|
- **All Plugins**: Every plugin in the repository
|
|
- **Configuration**: Optimized default configuration
|
|
- **Documentation**: Usage guides and help
|
|
- **Bootstrap Scripts**: Cross-platform installers
|
|
- **Verification**: Installation integrity checks
|
|
|
|
#### Platform Support
|
|
| Platform | Architecture | Status | Installation Method |
|
|
|----------|-------------|--------|-------------------|
|
|
| **Linux** | x86_64 | ✅ Full | `curl` installer + manual |
|
|
| **Linux** | ARM64 | ✅ Full | `curl` installer + manual |
|
|
| **macOS** | Intel | ✅ Full | `curl` installer + manual |
|
|
| **macOS** | Apple Silicon | ✅ Full | `curl` installer + manual |
|
|
| **Windows** | x86_64 | ✅ Full | PowerShell installer + manual |
|
|
|
|
#### Bootstrap Installers
|
|
- **Smart Detection**: Automatically detects platform and architecture
|
|
- **Conflict Resolution**: Handles existing Nushell installations
|
|
- **Path Management**: Configures PATH and shell integration
|
|
- **Verification**: Confirms successful installation
|
|
- **Clean Uninstall**: Complete removal capability
|
|
|
|
### Use Cases
|
|
|
|
#### For End Users
|
|
- **Simple Installation**: Get Nushell + all plugins with one command
|
|
- **No Prerequisites**: No need for Rust, Git, or development tools
|
|
- **Professional Experience**: Clean installation/uninstallation
|
|
- **Immediate Productivity**: Pre-configured environment with all plugins
|
|
|
|
#### For System Administrators
|
|
- **Bulk Deployment**: Deploy to multiple systems easily
|
|
- **Consistent Environment**: Identical setup across all machines
|
|
- **Offline Installation**: Manual packages work without internet
|
|
- **Integration Ready**: System-wide installation with proper paths
|
|
|
|
#### for Distributors/Packagers
|
|
- **Ready Binaries**: All binaries built and tested
|
|
- **Cross-Platform**: Support for all major platforms
|
|
- **Checksums Included**: Integrity verification built-in
|
|
- **Professional Packaging**: Following platform conventions
|
|
|
|
## 🎯 Why This Repository?
|
|
|
|
### The Challenge
|
|
|
|
Developing nushell plugins involves several challenges:
|
|
|
|
1. **Dependency Management**: Nushell evolves rapidly, requiring frequent dependency updates
|
|
2. **Upstream Synchronization**: Many plugins have upstream repositories that need tracking
|
|
3. **Build Consistency**: Ensuring all plugins build with the same nushell version
|
|
4. **Distribution**: Packaging and distributing multiple plugins efficiently
|
|
|
|
### Our Solution
|
|
|
|
This repository provides:
|
|
|
|
- **🔄 Automated Upstream Tracking**: Monitors upstream changes and auto-approves nu_* dependency updates
|
|
- **📦 Unified Build System**: Builds all plugins with consistent nushell versions
|
|
- **🛡️ Safe Merge Process**: Preserves local changes while integrating upstream updates
|
|
- **🚀 Complete Distribution System**: Full Nushell distributions with zero-prerequisite installation
|
|
- **📋 Professional Packaging**: Cross-platform installers and distribution packages
|
|
- **⚡ Developer Experience**: Just recipes and scripts for common tasks
|
|
|
|
## 📦 Plugin Collection
|
|
|
|
| Plugin | Status | Type | Description |
|
|
|--------|--------|------|-------------|
|
|
| **nu_plugin_clipboard** | ✅ Tracked | Upstream | Clipboard operations (copy/paste) |
|
|
| **nu_plugin_highlight** | ✅ Tracked | Upstream | Syntax highlighting for source code |
|
|
| **nu_plugin_image** | 🏠 Local | Local | Image processing and manipulation |
|
|
| **nu_plugin_hashes** | 🏠 Local | Local | Hash computation utilities |
|
|
| **nu_plugin_desktop_notifications** | 🏠 Local | Local | Desktop notification system |
|
|
| **nu_plugin_fluent** | ✅ Tracked | Upstream | Fluent localization framework |
|
|
| **nu_plugin_tera** | ✅ Tracked | Private | Tera templating engine (private repo) |
|
|
| **nu_plugin_kcl** | ✅ Tracked | Private | KCL configuration language (private repo) |
|
|
|
|
### Legend
|
|
- ✅ **Tracked**: Has upstream repository with automated tracking
|
|
- 🏠 **Local**: Developed locally without upstream
|
|
- 🔒 **Private**: Private repository with tracking (requires authentication)
|
|
|
|
## 🏗️ Building and Cross-Compilation
|
|
|
|
This repository includes a comprehensive cross-platform build system that supports building plugins for multiple platforms from a single machine.
|
|
|
|
### 🚀 Quick Build Commands
|
|
|
|
```bash
|
|
# Build for your current platform
|
|
just build
|
|
|
|
# Build for all supported platforms
|
|
just build-cross-all
|
|
|
|
# Build for specific platform
|
|
just build-cross linux-amd64
|
|
just build-cross darwin-arm64
|
|
just build-cross windows-amd64
|
|
|
|
# Complete cross-platform release
|
|
just release-cross
|
|
```
|
|
|
|
### 🎯 Supported Platforms
|
|
|
|
| Platform | Architecture | Native | Docker | Status |
|
|
|----------|-------------|--------|---------|--------|
|
|
| **Linux** | AMD64 | ✅ | ✅ | Full support |
|
|
| **Linux** | ARM64 | ⚠️ | ✅ | Docker recommended |
|
|
| **macOS** | Intel | 🍎 | ❌ | macOS host only |
|
|
| **macOS** | Apple Silicon | 🍎 | ❌ | macOS host only |
|
|
| **Windows** | AMD64 | 🪟 | ✅ | Windows host or Docker |
|
|
|
|
### 🐳 Docker Cross-Compilation
|
|
|
|
For consistent builds across all platforms:
|
|
|
|
```bash
|
|
# Build Docker cross-compilation environment
|
|
just build-docker-image
|
|
|
|
# Use Docker for specific targets
|
|
just build-docker linux-arm64
|
|
just build-docker windows-amd64
|
|
|
|
# Complete Docker workflow
|
|
just docker-flow
|
|
```
|
|
|
|
### 📦 Distribution
|
|
|
|
```bash
|
|
# Collect binaries for all platforms
|
|
just collect-all
|
|
|
|
# Package with checksums
|
|
just pack-checksums
|
|
|
|
# One-liner: build, collect, and package everything
|
|
just release-cross
|
|
```
|
|
|
|
### 📖 Comprehensive Guide
|
|
|
|
For detailed instructions, platform-specific setup, troubleshooting, and advanced topics, see:
|
|
|
|
**➡️ [Complete Building and Cross-Compilation Guide](docs/BUILDING.md)**
|
|
|
|
The guide covers:
|
|
- Platform-specific setup and dependencies
|
|
- Native vs Docker cross-compilation
|
|
- Configuration and customization
|
|
- Troubleshooting common issues
|
|
- Performance optimization
|
|
- CI/CD integration
|
|
- Custom target addition
|
|
|
|
## 🔄 Development Workflows
|
|
|
|
### Daily Development (Using Just)
|
|
|
|
```bash
|
|
# Check what needs attention
|
|
just status-attention
|
|
|
|
# Update from upstream sources
|
|
just upstream-check
|
|
|
|
# Build and test everything
|
|
just dev-flow
|
|
|
|
# Work on specific plugin
|
|
just build-plugin nu_plugin_clipboard
|
|
just test-plugin nu_plugin_clipboard
|
|
```
|
|
|
|
### Release Workflow
|
|
|
|
```bash
|
|
# Complete release pipeline (native)
|
|
just release-flow
|
|
|
|
# Cross-platform release pipeline
|
|
just release-flow-cross
|
|
|
|
# Or step by step:
|
|
just build # Build all plugins (native)
|
|
just build-cross-all # Build all plugins (all platforms)
|
|
just collect-all # Collect binaries (all platforms)
|
|
just pack-checksums # Create distribution archives with checksums
|
|
```
|
|
|
|
### Quality Assurance
|
|
|
|
```bash
|
|
# Run all quality checks
|
|
just quality-flow
|
|
|
|
# Individual checks
|
|
just fmt # Format code
|
|
just lint # Run clippy
|
|
just test # Run tests
|
|
just audit # Security audit
|
|
```
|
|
|
|
## 🎛️ Upstream Tracking System
|
|
|
|
### How It Works
|
|
|
|
The upstream tracking system automatically:
|
|
|
|
1. **Fetches** latest changes from upstream repositories
|
|
2. **Analyzes** differences between local and upstream code
|
|
3. **Auto-approves** changes that only affect nu_* dependencies
|
|
4. **Flags** other changes for manual review
|
|
5. **Preserves** local modifications during merges
|
|
6. **Excludes** specified plugins from tracking operations
|
|
|
|
### Configuration
|
|
|
|
#### Plugin Registry (`etc/plugin_registry.toml`)
|
|
|
|
```toml
|
|
[plugins.nu_plugin_example]
|
|
upstream_url = "https://github.com/user/nu_plugin_example"
|
|
upstream_branch = "main"
|
|
auto_ok_on_nu_deps_only = true # Auto-approve nu_* dependency changes
|
|
status = "unknown" # Current status
|
|
```
|
|
|
|
#### Exclusion Configuration (`etc/upstream_exclude.toml`)
|
|
|
|
Control which plugins are excluded from upstream operations:
|
|
|
|
```toml
|
|
[exclude]
|
|
# Plugins to exclude from ALL upstream operations
|
|
plugins = [
|
|
"nu_plugin_manual_only",
|
|
"nu_plugin_deprecated"
|
|
]
|
|
|
|
[exclude.check]
|
|
# Exclude from checking only (can still be manually merged)
|
|
plugins = [
|
|
"nu_plugin_no_auto_check"
|
|
]
|
|
|
|
[exclude.merge]
|
|
# Exclude from automatic merging (but can still be checked)
|
|
plugins = [
|
|
"nu_plugin_complex_merge"
|
|
]
|
|
|
|
[exclude.patterns]
|
|
# Exclude plugins matching patterns
|
|
plugins = [
|
|
"nu_plugin_test_*",
|
|
"nu_plugin_experimental_*"
|
|
]
|
|
```
|
|
|
|
### Commands
|
|
|
|
```bash
|
|
# Check all upstream sources
|
|
just upstream-check
|
|
|
|
# Check specific plugin
|
|
just upstream-check-plugin nu_plugin_clipboard
|
|
|
|
# Preview changes before merging
|
|
just upstream-preview nu_plugin_clipboard
|
|
|
|
# Safely merge upstream changes
|
|
just upstream-merge nu_plugin_clipboard
|
|
|
|
# Merge all pending changes
|
|
just upstream-merge-all
|
|
|
|
# Manage exclusions
|
|
just exclude nu_plugin_test add # Add to exclusion list
|
|
just exclude nu_plugin_test remove # Remove from exclusion list
|
|
just exclude-list # Show all excluded plugins
|
|
```
|
|
|
|
### Status System
|
|
|
|
| Status | Description | Action Required |
|
|
|--------|-------------|-----------------|
|
|
| ✅ `ok` | Synchronized with upstream | None |
|
|
| ⚠️ `pending` | Changes detected, needs review | Manual review |
|
|
| ❌ `error` | Error during sync | Investigation |
|
|
| 🔥 `conflict` | Merge conflicts | Manual resolution |
|
|
| ❓ `unknown` | Not yet checked | Run upstream check |
|
|
| 🏠 `local_only` | No upstream repository | None |
|
|
|
|
### Status Management
|
|
|
|
#### Manual Status Updates
|
|
|
|
You can manually update plugin status using justfile recipes or scripts:
|
|
|
|
```bash
|
|
# Update specific plugin status
|
|
just status-update PLUGIN STATUS
|
|
just status-update nu_plugin_image ok
|
|
|
|
# Mark all local development plugins as OK (recommended)
|
|
just status-mark-locals-ok
|
|
|
|
# Using scripts directly
|
|
./scripts/run.sh plugin_status.nu update nu_plugin_hashes ok
|
|
```
|
|
|
|
#### Common Status Management Tasks
|
|
|
|
```bash
|
|
# Check current status
|
|
just status # Full dashboard
|
|
just status-summary # Quick summary only
|
|
just status-attention # Only plugins needing attention
|
|
|
|
# Mark local plugins as reviewed/OK
|
|
just status-mark-locals-ok # Marks nu_plugin_image, nu_plugin_hashes, nu_plugin_desktop_notifications as OK
|
|
|
|
# Individual updates
|
|
just status-update nu_plugin_image ok
|
|
just status-update nu_plugin_highlight pending
|
|
```
|
|
|
|
#### When to Update Status
|
|
|
|
- **Local plugins** (`nu_plugin_image`, `nu_plugin_hashes`, `nu_plugin_desktop_notifications`): Mark as `ok` after reviewing local changes
|
|
- **Upstream plugins**: Status is automatically managed by `just upstream-check`
|
|
- **Manual override**: Use `status-update` when you need to override automatic status detection
|
|
|
|
## 🛠️ Scripts and Tools
|
|
|
|
### Consolidated Script System
|
|
|
|
The repository now uses a **unified script system** with automatic nushell detection and **mandatory version consistency checking**.
|
|
|
|
### Directory Structure
|
|
|
|
```
|
|
scripts/
|
|
├── run.sh # Universal script runner with version checking
|
|
├── check_version.nu # Version consistency validator
|
|
├── lib/
|
|
│ └── cargo_toml_diff.nu # Cargo.toml analysis library
|
|
├── check_upstream_changes.nu # Upstream monitoring
|
|
├── plugin_status.nu # Status dashboard
|
|
├── safe_merge_upstream.nu # Safe merge operations
|
|
├── build_all.nu # Build all plugins
|
|
├── collect_install.nu # Collection for distribution
|
|
├── pack_dist.nu # Distribution packaging
|
|
├── make_plugin.nu # Plugin template generator
|
|
├── update_nu_versions.nu # Dependency version management
|
|
└── sh/ # Essential shell scripts only
|
|
├── update_nushell.sh # Nushell installer/updater
|
|
├── update_nu_versions.sh # Dependency version manager
|
|
├── test_single.sh # Testing utilities
|
|
└── test_update.sh # Testing utilities
|
|
etc/
|
|
├── plugin_registry.toml # Central plugin configuration
|
|
└── upstream_exclude.toml # Upstream exclusion configuration
|
|
```
|
|
|
|
### Using the Universal Script Runner
|
|
|
|
**All nushell scripts should be run through the universal wrapper for automatic version checking:**
|
|
|
|
```bash
|
|
# Universal wrapper with automatic version checking
|
|
./scripts/run.sh <script_name> [args...]
|
|
|
|
# Status and information
|
|
./scripts/run.sh plugin_status.nu # Show dashboard
|
|
./scripts/run.sh plugin_status.nu --all # Include local plugins
|
|
./scripts/run.sh plugin_status.nu summary # Quick summary
|
|
|
|
# Upstream tracking
|
|
./scripts/run.sh check_upstream_changes.nu # Check all
|
|
./scripts/run.sh check_upstream_changes.nu --plugin highlight # Check one
|
|
./scripts/run.sh safe_merge_upstream.nu highlight # Merge one
|
|
./scripts/run.sh safe_merge_upstream.nu --all # Merge all pending
|
|
|
|
# Development
|
|
./scripts/run.sh build_all.nu # Build all plugins
|
|
./scripts/run.sh update_nu_versions.nu # Update nu dependencies
|
|
|
|
# Version management
|
|
./scripts/run.sh --check-only # Only check version consistency
|
|
./scripts/run.sh --fix --check-only # Auto-fix version mismatches
|
|
```
|
|
|
|
### Direct Nushell Script Usage (Advanced)
|
|
|
|
**⚠️ Warning: Direct usage skips the universal wrapper's version checking - not recommended**
|
|
|
|
```bash
|
|
# Run from repository root (version checking included in each script)
|
|
nu scripts/plugin_status.nu
|
|
nu scripts/check_upstream_changes.nu --plugin highlight
|
|
nu scripts/build_all.nu --verbose
|
|
```
|
|
|
|
### Version Consistency System
|
|
|
|
Every script automatically validates that your system nushell version matches the submodule version:
|
|
|
|
- **Automatic detection**: Missing nushell is auto-installed
|
|
- **Version validation**: System vs submodule version comparison
|
|
- **Auto-fix capability**: `--fix` flag resolves version mismatches
|
|
- **Clear error messages**: Detailed guidance when issues occur
|
|
|
|
## 📁 File Structure
|
|
|
|
```
|
|
nushell-plugins/
|
|
├── README.md # This file
|
|
├── justfile # Just task runner recipes
|
|
├── env # Environment configuration
|
|
├── LICENSE # License file
|
|
├── etc/ # Configuration files
|
|
│ ├── plugin_registry.toml # Plugin tracking configuration
|
|
│ └── upstream_exclude.toml # Upstream exclusion configuration
|
|
├── scripts/ # All automation scripts
|
|
│ ├── run.sh # Universal script runner
|
|
│ ├── check_version.nu # Version consistency validator
|
|
│ ├── *.nu # Nushell script implementations
|
|
│ ├── lib/ # Shared libraries
|
|
│ └── sh/ # Essential shell scripts
|
|
├── generate/ # Plugin templates
|
|
│ └── nu_plugin_template/ # Base template for new plugins
|
|
├── distribution/ # Build output directory
|
|
├── bin_archives/ # Distribution archives
|
|
├── nushell/ # Nushell submodule (for dependency versions)
|
|
├── nu_plugin_*/ # Individual plugin directories
|
|
└── docs/ # Documentation
|
|
```
|
|
|
|
## 📥 Installation Methods
|
|
|
|
### Method 1: Full Distribution (Recommended for End Users)
|
|
|
|
**Zero-prerequisite installation of complete Nushell environment:**
|
|
|
|
```bash
|
|
# One-liner installation (Linux/macOS)
|
|
curl -sSf https://your-url/install.sh | sh
|
|
|
|
# Windows PowerShell
|
|
iwr https://your-url/install.ps1 | iex
|
|
|
|
# Manual installation from release
|
|
wget https://releases/nushell-full-linux-x86_64.tar.gz
|
|
tar -xzf nushell-full-*.tar.gz && cd nushell-full-* && ./install.sh
|
|
|
|
# Verify installation
|
|
nu --version && nu -c "plugin list"
|
|
```
|
|
|
|
**What you get:**
|
|
- Complete Nushell installation
|
|
- All plugins from this repository
|
|
- Optimized configuration
|
|
- Professional installation experience
|
|
- Clean uninstall capability
|
|
|
|
### Method 2: Plugin-Only Distribution
|
|
|
|
**For users who already have Nushell installed:**
|
|
|
|
```bash
|
|
# Download plugin-only archive
|
|
wget https://releases/nushell-plugins-linux-x86_64.tar.gz
|
|
tar -xzf nushell-plugins-*.tar.gz && cd nushell-plugins
|
|
|
|
# Install all plugins
|
|
./install_plugins.sh
|
|
|
|
# Or install specific plugins
|
|
./install_plugins.sh --plugins "nu_plugin_clipboard,nu_plugin_highlight"
|
|
```
|
|
|
|
### Method 3: Repository Clone (Recommended for Development)
|
|
|
|
**For plugin developers and contributors:**
|
|
|
|
```bash
|
|
git clone <repository-url>
|
|
cd nushell-plugins
|
|
|
|
# Validate environment
|
|
just validate-nushell
|
|
|
|
# Build and install plugins only
|
|
just build && just collect
|
|
cd distribution && nu install_nu_plugins.nu
|
|
|
|
# Build complete distributions
|
|
just build-full && just pack-full
|
|
```
|
|
|
|
### Method 4: Individual Plugin Installation
|
|
|
|
**For specific plugin installation:**
|
|
|
|
```bash
|
|
# From source (development)
|
|
cd nu_plugin_clipboard
|
|
cargo build --release
|
|
plugin add target/release/nu_plugin_clipboard
|
|
|
|
# From crates.io (if published)
|
|
cargo install nu_plugin_clipboard
|
|
plugin add ~/.cargo/bin/nu_plugin_clipboard
|
|
```
|
|
|
|
### Installation Comparison
|
|
|
|
| Method | Prerequisites | What's Included | Best For |
|
|
|--------|---------------|-----------------|----------|
|
|
| **Full Distribution** | None | Nushell + All Plugins | End users, system admins |
|
|
| **Plugin Distribution** | Nushell | All Plugins | Nushell users |
|
|
| **Repository Clone** | Rust, Git | Development environment | Contributors, developers |
|
|
| **Individual Plugin** | Rust, Nu | Single plugin | Selective installation |
|
|
|
|
## 🎮 Using Just Recipes
|
|
|
|
Just provides convenient shortcuts for all common tasks with **automatic version validation**:
|
|
|
|
### Version Validation Commands (New!)
|
|
|
|
```bash
|
|
just validate-nushell # Check nushell version consistency
|
|
just fix-nushell # Auto-fix version mismatches
|
|
```
|
|
|
|
### Basic Commands
|
|
|
|
```bash
|
|
just # Show all available recipes
|
|
just status # Plugin status dashboard
|
|
just build # Build all plugins
|
|
just build-full # Build nushell + all plugins
|
|
just test # Test all plugins
|
|
just clean # Clean build artifacts
|
|
```
|
|
|
|
### Full Distribution Commands
|
|
|
|
```bash
|
|
# Building complete distributions
|
|
just build-full # Build nushell with all plugins
|
|
just build-full-cross # Cross-platform build
|
|
just build-full-all # All platforms
|
|
|
|
# Creating distribution packages
|
|
just pack-full # Create distribution package
|
|
just pack-full-all # All platforms
|
|
just pack-full-with-installer # Include bootstrap installer
|
|
|
|
# Release workflows
|
|
just release-full-cross # Complete cross-platform release
|
|
just verify-full # Verify distribution integrity
|
|
just test-full # Test installation process
|
|
```
|
|
|
|
### Upstream Management
|
|
|
|
```bash
|
|
just upstream-check # Check for upstream updates
|
|
just upstream-merge highlight # Merge specific plugin
|
|
just upstream-merge-all # Merge all pending
|
|
```
|
|
|
|
### Development Workflows
|
|
|
|
**All workflows now include mandatory version validation as the first step:**
|
|
|
|
```bash
|
|
just dev-flow # Validate → Check → Build → Test → Status
|
|
just release-flow # Validate → Build → Collect → Package
|
|
just quality-flow # Validate → Format → Lint → Test
|
|
just update-flow # Update → Fix Version → Update versions → Check upstream
|
|
```
|
|
|
|
### Plugin-Specific Operations
|
|
|
|
```bash
|
|
just build-plugin clipboard # Build specific plugin
|
|
just test-plugin clipboard # Test specific plugin
|
|
just install-plugin clipboard # Install plugin locally
|
|
```
|
|
|
|
### Advanced Features
|
|
|
|
```bash
|
|
just interactive # Interactive plugin selection (requires fzf)
|
|
just watch clipboard # Watch for changes and rebuild (requires entr)
|
|
just validate # Validate setup and dependencies
|
|
```
|
|
|
|
## ❓ FAQ
|
|
|
|
### Q: Why do I get "Version mismatch detected" errors?
|
|
|
|
**A:** This system requires your installed nushell version to match the submodule version for consistency. All operations automatically check version consistency and will fail if versions don't match.
|
|
|
|
**Solutions:**
|
|
- **Auto-fix**: `just fix-nushell` or `./scripts/run.sh --fix --check-only`
|
|
- **Manual check**: `just validate-nushell`
|
|
- **Skip (not recommended)**: `./scripts/run.sh --no-version-check script.nu`
|
|
|
|
### Q: What happened to the bash wrapper scripts?
|
|
|
|
**A:** The repository has been consolidated to eliminate script duplication. The old bash wrappers in `scripts/sh/` have been removed in favor of:
|
|
- **Universal wrapper**: `./scripts/run.sh` with automatic version checking
|
|
- **Direct nu scripts**: All scripts moved from `scripts/nu/` to `scripts/`
|
|
- **Just recipes**: Updated to use the new system
|
|
|
|
### Q: How does the new script system work?
|
|
|
|
**A:** The new system provides:
|
|
1. **Universal wrapper** (`scripts/run.sh`) with automatic nushell detection and version validation
|
|
2. **Consolidated scripts** - all nu scripts in `scripts/` directory
|
|
3. **Mandatory version checking** - every operation validates version consistency
|
|
4. **Auto-installation** - missing nushell is automatically installed
|
|
|
|
### Q: How does automatic upstream tracking work?
|
|
|
|
**A:** The system fetches changes from upstream repositories and analyzes them. If only nu_* dependencies changed (like nu-plugin, nu-protocol), it automatically marks the plugin as "OK". Other changes are flagged for manual review. You can exclude specific plugins from tracking using the `etc/upstream_exclude.toml` file.
|
|
|
|
### Q: What happens to my local changes during upstream merges?
|
|
|
|
**A:** Local changes are preserved. The system:
|
|
1. Creates backup branches before any merge
|
|
2. Applies upstream changes in a temporary branch
|
|
3. Restores your local nu_* dependency versions
|
|
4. Tests compilation before applying changes
|
|
5. Rolls back on any failure
|
|
|
|
### Q: Can I disable automatic upstream tracking for a plugin?
|
|
|
|
**A:** Yes, set `auto_ok_on_nu_deps_only = false` in `etc/plugin_registry.toml` for that plugin.
|
|
|
|
### Q: How do I add a new plugin to the repository?
|
|
|
|
**A:** Use the template generator:
|
|
```bash
|
|
just make-plugin nu_plugin_myfeature
|
|
# or
|
|
nu scripts/nu/make_plugin.nu nu_plugin_myfeature
|
|
```
|
|
|
|
### Q: What if upstream tracking fails?
|
|
|
|
**A:** Check the plugin status with `just status`. Failed plugins show error details. Common issues:
|
|
- Network connectivity to upstream repository
|
|
- Authentication for private repositories
|
|
- Merge conflicts requiring manual resolution
|
|
|
|
### Q: How do I update nushell dependency versions?
|
|
|
|
**A:** Use the version updater:
|
|
```bash
|
|
just update-nu-versions # Update all plugins
|
|
just list-nu-versions # Show current versions
|
|
```
|
|
|
|
### Q: Can I use this with my own private plugins?
|
|
|
|
**A:** Yes! Add your private repository URLs to `etc/plugin_registry.toml`. The system supports SSH URLs for private repositories.
|
|
|
|
### Q: How do I distribute plugins to other systems?
|
|
|
|
**A:** Use the distribution pipeline:
|
|
```bash
|
|
just build # Build all plugins
|
|
just collect # Collect binaries
|
|
just pack # Create archive
|
|
```
|
|
|
|
The resulting archive contains all binaries and installation scripts.
|
|
|
|
### Q: What's the difference between shell scripts and nushell scripts?
|
|
|
|
**A:**
|
|
- **Nushell scripts** (`scripts/nu/`): Primary implementation with full features
|
|
- **Shell scripts** (`scripts/sh/`): Wrappers for compatibility with non-nushell environments
|
|
- Both provide the same functionality, use whichever fits your environment
|
|
|
|
### Q: How do I contribute a new plugin?
|
|
|
|
**A:**
|
|
1. Create the plugin: `just make-plugin nu_plugin_yourname`
|
|
2. Implement your functionality
|
|
3. Add upstream URL to `etc/plugin_registry.toml` if it has one
|
|
4. Test: `just build-plugin nu_plugin_yourname`
|
|
5. Submit a pull request
|
|
|
|
### Q: How do I exclude plugins from upstream tracking?
|
|
|
|
**A:** Edit `etc/upstream_exclude.toml` to exclude plugins from specific operations:
|
|
- Add to `[exclude]` section to exclude from all operations
|
|
- Add to `[exclude.check]` to skip automatic checks
|
|
- Add to `[exclude.merge]` to prevent automatic merging
|
|
- Use patterns like `nu_plugin_test_*` to exclude multiple plugins
|
|
|
|
You can also use Just commands:
|
|
```bash
|
|
just exclude nu_plugin_test add # Add to exclusion
|
|
just exclude nu_plugin_test remove # Remove from exclusion
|
|
just exclude-list # Show excluded plugins
|
|
```
|
|
|
|
### Q: Can I use this system for other Rust projects?
|
|
|
|
**A:** The upstream tracking and dependency management concepts can be adapted, but this system is specifically designed for nushell plugins with nu_* dependencies.
|
|
|
|
## 🤝 Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
3. Make your changes
|
|
4. Test thoroughly: `just quality-flow`
|
|
5. Commit your changes: `git commit -m 'Add amazing feature'`
|
|
6. Push to the branch: `git push origin feature/amazing-feature`
|
|
7. Open a pull request
|
|
|
|
### Development Guidelines
|
|
|
|
- Follow existing code style and patterns
|
|
- Add tests for new functionality
|
|
- Update documentation for user-facing changes
|
|
- Use `just quality-flow` before submitting
|
|
- All scripts should work from repository root
|
|
|
|
### Adding New Plugins
|
|
|
|
- Use the template generator: `just make-plugin nu_plugin_name`
|
|
- Follow nushell plugin conventions
|
|
- Add comprehensive documentation
|
|
- Include examples and tests
|
|
|
|
## 📄 License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## 🙏 Acknowledgments
|
|
|
|
- [Nushell Team](https://www.nushell.sh/) for the amazing shell and plugin system
|
|
- Plugin authors for their contributions to the nushell ecosystem
|
|
- Contributors to this repository
|
|
|
|
---
|
|
|
|
**Happy Plugin Development! 🎉** |