379 lines
9.7 KiB
Markdown
379 lines
9.7 KiB
Markdown
# NIP - Universal Package Manager
|
|
|
|
**Version:** 1.0.0-mvp
|
|
**Status:** MVP Achieved ✅
|
|
**Repository:** https://git.maiwald.work/Nexus/NexusToolKit
|
|
|
|
NIP is a universal package manager that grafts packages from Nix, PKGSRC, and Pacman into a unified GoboLinux-style structure with content-addressable storage. Build from source with custom optimizations using Gentoo, Nix, or PKGSRC.
|
|
|
|
**NIP's core value:** Bringing together the best of multiple package ecosystems in a clean, unified way. We do things the right way—correctness over speed.
|
|
|
|
## Features
|
|
|
|
- 🌱 **Multi-Source Grafting** - Install packages from Nix, PKGSRC, or Pacman
|
|
- 🔨 **Source Builds** - Build from Gentoo/Nix/PKGSRC with custom USE flags
|
|
- 🐳 **Container Builds** - Secure, isolated builds with Podman/Docker
|
|
- 🚀 **Auto-Bootstrap** - Automatically installs build tools when needed
|
|
- 📦 **GoboLinux Structure** - Clean `/Programs/<Name>/<Version>/` organization
|
|
- 🔗 **Unified Symlinks** - All packages accessible via `/System/Links/`
|
|
- 🔐 **Content-Addressable Storage** - Blake2b/Blake3 hashing for integrity
|
|
- 🎯 **Variant System** - Fine-grained feature control with domain flags
|
|
- 🐧 **Linux & BSD** - Works on Arch, Debian, FreeBSD, NetBSD, and more
|
|
- ⚡ **Simple & Fast** - Efficient database, smart caching
|
|
|
|
## Quick Start
|
|
|
|
**New to NIP?** Start with the [Getting Started Guide](docs/getting-started.md) for a complete walkthrough.
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Build from source
|
|
./build.sh
|
|
|
|
# Install (requires root)
|
|
sudo ./install.sh
|
|
|
|
# Verify installation
|
|
nip --version
|
|
```
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Install a package (grafts from available sources)
|
|
nip install firefox
|
|
|
|
# Build from source with custom features
|
|
nip build vim +python+ruby --source=gentoo
|
|
|
|
# Build with optimizations
|
|
nip build ffmpeg +vaapi+lto+cpu-native --source=gentoo
|
|
|
|
# Auto-detect and bootstrap if needed
|
|
nip build firefox +wayland --source=gentoo
|
|
# → NIP will automatically offer to install Gentoo tools or use containers
|
|
|
|
# List installed packages
|
|
nip list
|
|
|
|
# Show package info
|
|
nip info firefox
|
|
|
|
# Remove a package
|
|
sudo nip remove hello
|
|
|
|
# Check system status
|
|
nip status
|
|
|
|
# Check system health
|
|
nip doctor
|
|
```
|
|
|
|
## Commands
|
|
|
|
### Package Management
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `nip install <package>` | Install a package (auto-detect source) |
|
|
| `nip build <pkg> +flags` | Build from source with custom features |
|
|
| `nip remove <package>` | Remove an installed package |
|
|
| `nip list` | List all installed packages |
|
|
| `nip info <package>` | Show detailed package information |
|
|
| `nip search <query>` | Search for packages |
|
|
|
|
### Source Building
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `nip build <pkg> --source=gentoo` | Build from Gentoo with USE flags |
|
|
| `nip build <pkg> --source=nix` | Build from Nix |
|
|
| `nip build <pkg> --source=pkgsrc` | Build from PKGSRC |
|
|
| `nip build <pkg> +wayland+lto` | Build with variant flags |
|
|
| `nip sources` | List available build sources |
|
|
|
|
### Bootstrap Management
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `nip bootstrap list` | List installed build tools |
|
|
| `nip bootstrap install <tool>` | Install build tools (nix/pkgsrc/gentoo) |
|
|
| `nip bootstrap remove <tool>` | Remove build tools |
|
|
| `nip bootstrap info <tool>` | Show tool information |
|
|
| `nip bootstrap recipes` | List available recipes |
|
|
| `nip bootstrap update-recipes` | Update recipes from repository |
|
|
|
|
### System
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `nip status` | Show system status |
|
|
| `nip doctor` | Check system health |
|
|
| `nip config [show\|init]` | Show or initialize configuration |
|
|
| `nip logs [lines]` | Show recent log entries |
|
|
|
|
## Automatic Bootstrap
|
|
|
|
**NIP automatically detects and installs build tools when needed!**
|
|
|
|
When you try to build from source, NIP will:
|
|
|
|
1. **Check** if build tools are installed
|
|
2. **Detect** available container runtimes (Podman/Docker)
|
|
3. **Offer** installation options:
|
|
- Install minimal tools via NIP
|
|
- Use containerized builds (Podman/Docker)
|
|
- Manual installation instructions
|
|
- Try different source
|
|
|
|
### Example: First Build
|
|
|
|
```bash
|
|
$ nip build vim +python --source=gentoo
|
|
|
|
⚠️ Gentoo not found
|
|
|
|
NIP can help you set up Gentoo builds:
|
|
|
|
1. 🚀 Install minimal tools via NIP (recommended)
|
|
• Lightweight standalone emerge binary
|
|
• Minimal portage snapshot
|
|
• ~50MB download, ~100MB installed
|
|
|
|
2. 📦 Use containerized environment
|
|
• Requires Docker/Podman
|
|
• Isolated builds
|
|
• ~200MB download
|
|
|
|
3. 🔧 Install full Gentoo manually
|
|
• Follow: https://wiki.gentoo.org/wiki/Portage
|
|
|
|
4. 🔄 Try a different source
|
|
• nip build vim --source=nix
|
|
|
|
Choose option (1-4) or 'q' to quit: 1
|
|
|
|
📦 Installing minimal Gentoo tools...
|
|
✅ Gentoo tools installed successfully
|
|
|
|
🔨 Building vim with Gentoo...
|
|
✅ Build successful!
|
|
```
|
|
|
|
### Container Builds (Recommended for Arch Linux)
|
|
|
|
If you have Podman or Docker installed, NIP can build in containers:
|
|
|
|
```bash
|
|
# Install Podman (Arch Linux)
|
|
sudo pacman -S podman
|
|
|
|
# NIP automatically uses containers if tools aren't installed
|
|
nip build firefox +wayland --source=gentoo
|
|
|
|
# Or explicitly use containers
|
|
nip build firefox --container
|
|
```
|
|
|
|
**Benefits:**
|
|
- ✅ No need to install build tools
|
|
- ✅ Secure, isolated builds
|
|
- ✅ Rootless with Podman
|
|
- ✅ Clean system
|
|
|
|
## Configuration
|
|
|
|
NIP uses a simple key-value configuration format:
|
|
|
|
**Global:** `/etc/nip/nip.conf`
|
|
**User:** `~/.nip/config`
|
|
|
|
```bash
|
|
# Initialize user config
|
|
nip config init
|
|
|
|
# View current config
|
|
nip config show
|
|
```
|
|
|
|
Example configuration:
|
|
|
|
```
|
|
# Directory Configuration
|
|
programs-dir = "/Programs"
|
|
links-dir = "/System/Links"
|
|
|
|
# Adapter Priorities (lower = tried first)
|
|
nix-priority = 10
|
|
pkgsrc-priority = 20
|
|
pacman-priority = 30
|
|
```
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
/Programs/ # Package installation
|
|
├── Firefox/120.0/
|
|
└── Vim/9.0/
|
|
|
|
/System/Links/ # Unified symlink tree
|
|
├── Executables/ # Binaries (in PATH)
|
|
├── Libraries/ # Shared libraries
|
|
├── Headers/ # Include files
|
|
└── Shared/ # Share data
|
|
|
|
/var/nip/ # NIP data
|
|
├── cas/ # Content-addressable storage
|
|
├── cache/ # Download cache
|
|
└── db/packages.json # Package database
|
|
```
|
|
|
|
## Requirements
|
|
|
|
- **Nim compiler** (for building from source)
|
|
- **One or more package sources:**
|
|
- Nix (recommended for all platforms)
|
|
- PKGSRC (native on BSD)
|
|
- Pacman (Arch Linux)
|
|
|
|
## Platform Support
|
|
|
|
- ✅ Linux (Arch, Debian, Ubuntu, etc.)
|
|
- ✅ FreeBSD
|
|
- ✅ NetBSD
|
|
- ✅ DragonflyBSD
|
|
- ✅ OpenBSD
|
|
|
|
## Use Cases
|
|
|
|
### Arch Linux: Hybrid Package Management
|
|
|
|
**Perfect for Arch users who want customization!**
|
|
|
|
```bash
|
|
# Fast: Install standard packages from Arch repos
|
|
nip install firefox chromium vscode
|
|
|
|
# Custom: Build from Gentoo with optimizations
|
|
nip build vim +python+ruby+lto --source=gentoo
|
|
nip build ffmpeg +vaapi+cpu-native --source=gentoo
|
|
|
|
# Secure: Use Podman containers (no Gentoo installation needed)
|
|
sudo pacman -S podman
|
|
nip build obs-studio +pipewire --source=gentoo
|
|
# → Automatically builds in container
|
|
```
|
|
|
|
**See [Arch Linux Guide](docs/arch-linux-guide.md) for complete workflow**
|
|
|
|
### Gentoo: Access to Nix Packages
|
|
|
|
**Perfect for Gentoo users who want quick binary installations!**
|
|
|
|
```bash
|
|
# System packages from Portage (source, customizable)
|
|
emerge --ask firefox
|
|
|
|
# Quick binary installs from Nix (fast, no compilation)
|
|
nip install vscode chromium --source=nix
|
|
|
|
# Custom optimized builds from Gentoo
|
|
nip build ffmpeg +vaapi+lto+cpu-native --source=gentoo
|
|
|
|
# Best of both worlds!
|
|
```
|
|
|
|
**See [Gentoo + Nix Guide](docs/gentoo-nix-guide.md) for complete workflow**
|
|
|
|
### Debian/Ubuntu: Access to Latest Packages
|
|
|
|
```bash
|
|
# Get latest packages from Nix
|
|
nip install firefox # Latest version, not Debian's old version
|
|
|
|
# Build with custom features
|
|
nip build vim +python --source=gentoo
|
|
```
|
|
|
|
### BSD: Unified Package Management
|
|
|
|
```bash
|
|
# Use native PKGSRC
|
|
nip install vim
|
|
|
|
# Or use Nix for more packages
|
|
nip install firefox --source=nix
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Permission Denied
|
|
|
|
Most NIP operations require root:
|
|
|
|
```bash
|
|
sudo nip graft nix:hello
|
|
```
|
|
|
|
### Check System Health
|
|
|
|
```bash
|
|
nip doctor
|
|
```
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
nip logs 50
|
|
```
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Build for development
|
|
nim c nip_mvp.nim
|
|
|
|
# Build for release
|
|
./build.sh
|
|
|
|
# Run tests
|
|
nim c -r tests/test_all.nim
|
|
```
|
|
|
|
## License
|
|
|
|
See LICENSE file in the repository.
|
|
|
|
## Contributing
|
|
|
|
See CONTRIBUTING.md for guidelines.
|
|
|
|
## Documentation
|
|
|
|
📚 **[Complete Documentation Index](docs/README.md)** - Browse all documentation
|
|
|
|
### Getting Started
|
|
- **[Getting Started Guide](docs/getting-started.md)** - Start here! Complete introduction to NIP
|
|
- **[Quick Reference](docs/quick-reference.md)** - Command cheat sheet
|
|
|
|
### User Guides
|
|
- [Dependency Resolution](docs/DEPENDENCY_RESOLUTION.md) - How NIP resolves package dependencies
|
|
- [Bootstrap Overview](docs/bootstrap-overview.md) - Understanding the bootstrap system
|
|
- [Bootstrap Guide](docs/bootstrap-guide.md) - Installing build tools
|
|
- [Bootstrap Detection Flow](docs/bootstrap-detection-flow.md) - How automatic detection works
|
|
- [Source Build Guide](docs/source-build-guide.md) - Building from source
|
|
- [Arch Linux Guide](docs/arch-linux-guide.md) - Using NIP on Arch Linux
|
|
- [Gentoo + Nix Guide](docs/gentoo-nix-guide.md) - Using Nix packages on Gentoo
|
|
|
|
### Developer Guides
|
|
- [Bootstrap API](docs/bootstrap-api.md) - Bootstrap system API
|
|
- [Recipe Authoring](recipes/AUTHORING-GUIDE.md) - Creating recipes
|
|
- [Build Binaries](recipes/BUILD-BINARIES.md) - Building standalone binaries
|
|
|
|
## More Information
|
|
|
|
- Repository: https://git.maiwald.work/Nexus/NexusToolKit
|
|
- Issues: https://git.maiwald.work/Nexus/NexusToolKit/issues
|
|
- Wiki: https://git.maiwald.work/Nexus/NexusToolKit/wiki
|