# 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
