390 lines
7.7 KiB
Markdown
390 lines
7.7 KiB
Markdown
# NIP Build System - Help Documentation
|
|
|
|
## Overview
|
|
|
|
The NIP build system allows you to build packages from source using multiple package managers (Nix, PKGSRC, Gentoo) with full variant support, intelligent caching, and automatic system integration.
|
|
|
|
## Commands
|
|
|
|
### `nip build <package> [options]`
|
|
|
|
Build a package from source with optional variant flags.
|
|
|
|
**Usage:**
|
|
```bash
|
|
nip build <package> [+variant...] [options]
|
|
```
|
|
|
|
**Options:**
|
|
- `--source=<name>` - Specify source system (nix, pkgsrc, gentoo). Default: auto-detect
|
|
- `--rebuild` - Force rebuild, skip cache
|
|
- `--no-install` - Build but don't install
|
|
- `--verbose` - Show detailed build output
|
|
- `--keep-work` - Keep intermediate build files
|
|
|
|
**Variant Flags:**
|
|
Variants are specified with `+domain=value` syntax:
|
|
- `+wayland` - Enable Wayland support (graphics domain)
|
|
- `+lto` - Enable link-time optimization (optimization domain)
|
|
- `+pipewire` - Enable PipeWire audio (audio domain)
|
|
- `+pie` - Enable position-independent executable (security domain)
|
|
|
|
**Examples:**
|
|
```bash
|
|
# Build Firefox with Wayland and LTO
|
|
nip build firefox +wayland +lto
|
|
|
|
# Build from specific source
|
|
nip build nginx --source=pkgsrc
|
|
|
|
# Build with verbose output
|
|
nip build bash +lto --verbose
|
|
|
|
# Force rebuild (skip cache)
|
|
nip build firefox +wayland --rebuild
|
|
|
|
# Build but don't install
|
|
nip build test-package --no-install
|
|
```
|
|
|
|
### `nip sources [package]`
|
|
|
|
List available source systems and optionally search for a package.
|
|
|
|
**Usage:**
|
|
```bash
|
|
nip sources [package]
|
|
```
|
|
|
|
**Examples:**
|
|
```bash
|
|
# List all available sources
|
|
nip sources
|
|
|
|
# Search for bash in all sources
|
|
nip sources bash
|
|
|
|
# Check if firefox is available
|
|
nip sources firefox
|
|
```
|
|
|
|
### `nip cache stats`
|
|
|
|
Show build cache statistics.
|
|
|
|
**Usage:**
|
|
```bash
|
|
nip cache stats
|
|
```
|
|
|
|
**Output:**
|
|
- Number of cached builds
|
|
- Total cache size
|
|
- Cache directory location
|
|
|
|
### `nip cache clean`
|
|
|
|
Remove old cached builds (older than 30 days).
|
|
|
|
**Usage:**
|
|
```bash
|
|
nip cache clean
|
|
```
|
|
|
|
### `nip cache clear`
|
|
|
|
Clear all cached builds.
|
|
|
|
**Usage:**
|
|
```bash
|
|
nip cache clear
|
|
```
|
|
|
|
## Variant System
|
|
|
|
### Variant Domains
|
|
|
|
The variant system organizes build options into semantic domains:
|
|
|
|
**Graphics Domain:**
|
|
- `wayland` - Wayland display server support
|
|
- `X` - X11 display server support
|
|
- `vulkan` - Vulkan graphics API
|
|
|
|
**Audio Domain:**
|
|
- `pipewire` - PipeWire audio server
|
|
- `pulseaudio` - PulseAudio sound server
|
|
- `alsa` - ALSA audio support
|
|
|
|
**Optimization Domain:**
|
|
- `lto` - Link-time optimization
|
|
- `pgo` - Profile-guided optimization
|
|
|
|
**Security Domain:**
|
|
- `pie` - Position-independent executable
|
|
- `hardened` - Full hardening
|
|
|
|
### Variant Syntax
|
|
|
|
Variants are specified with the `+` prefix:
|
|
```bash
|
|
nip build <package> +domain=value
|
|
```
|
|
|
|
Multiple variants can be combined:
|
|
```bash
|
|
nip build firefox +wayland +lto +pipewire
|
|
```
|
|
|
|
### Variant Mapping
|
|
|
|
NIP automatically translates variant flags to source-specific configuration:
|
|
|
|
**Nix:** Variant → Nix override attribute
|
|
```
|
|
+wayland → waylandSupport = true
|
|
+lto → enableLTO = true
|
|
```
|
|
|
|
**PKGSRC:** Variant → PKG_OPTIONS flag
|
|
```
|
|
+wayland → wayland
|
|
+pulseaudio → pulseaudio
|
|
```
|
|
|
|
**Gentoo:** Variant → USE flag
|
|
```
|
|
+wayland → wayland
|
|
+lto → lto
|
|
```
|
|
|
|
### Custom Mappings
|
|
|
|
You can define custom variant mappings in `~/.config/nip/variant-mappings.json`:
|
|
|
|
```json
|
|
{
|
|
"firefox": {
|
|
"graphics": {
|
|
"wayland": {
|
|
"nix": "waylandSupport = true",
|
|
"pkgsrc": "wayland",
|
|
"gentoo": "wayland",
|
|
"description": "Wayland support"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Source Systems
|
|
|
|
### Nix
|
|
|
|
**Detection:** Checks for `/nix` directory
|
|
**Packages:** ~100,000+
|
|
**Build Method:** From source with overrides
|
|
**Configuration:** Nix expressions with override attributes
|
|
|
|
**Example:**
|
|
```bash
|
|
nip build firefox +wayland --source=nix
|
|
```
|
|
|
|
### PKGSRC
|
|
|
|
**Detection:** Checks for `/usr/pkgsrc` directory
|
|
**Packages:** ~27,000+
|
|
**Build Method:** Always from source with PKG_OPTIONS
|
|
**Configuration:** mk.conf with PKG_OPTIONS settings
|
|
|
|
**Example:**
|
|
```bash
|
|
nip build nginx --source=pkgsrc
|
|
```
|
|
|
|
### Gentoo Portage
|
|
|
|
**Detection:** Checks for `/usr/bin/emerge` executable
|
|
**Packages:** ~20,000+
|
|
**Build Method:** From source with USE flags
|
|
**Configuration:** package.use with USE flags
|
|
|
|
**Example:**
|
|
```bash
|
|
nip build vim --source=gentoo
|
|
```
|
|
|
|
## Build Caching
|
|
|
|
NIP intelligently caches builds based on variant fingerprints:
|
|
|
|
**Cache Hit:** If you build the same package with the same variants, NIP reuses the cached build instantly.
|
|
|
|
**Cache Miss:** If variants change, NIP performs a fresh build.
|
|
|
|
**Cache Management:**
|
|
```bash
|
|
# View cache statistics
|
|
nip cache stats
|
|
|
|
# Clean old builds (30+ days)
|
|
nip cache clean
|
|
|
|
# Clear all cached builds
|
|
nip cache clear
|
|
```
|
|
|
|
**Cache Location:** `~/.cache/nip/builds/` or `/var/nip/cache/builds/`
|
|
|
|
## Installation
|
|
|
|
Built packages are installed to `/Programs` with the following structure:
|
|
|
|
```
|
|
/Programs/
|
|
└── <package>/
|
|
├── <version>/
|
|
│ └── <cas-hash>/
|
|
│ └── <variant-fingerprint>/
|
|
│ ├── bin/
|
|
│ ├── lib/
|
|
│ └── ...
|
|
└── Current -> <version>/<cas-hash>/<variant-fingerprint>
|
|
```
|
|
|
|
**System Integration:**
|
|
- Executables are symlinked to `/System/Links/Executables/`
|
|
- Libraries are symlinked to `/System/Links/Libraries/`
|
|
|
|
## Troubleshooting
|
|
|
|
### Build Fails
|
|
|
|
1. **Check build log:** Build output is displayed during build
|
|
2. **Try verbose mode:** `nip build <package> --verbose`
|
|
3. **Force rebuild:** `nip build <package> --rebuild`
|
|
4. **Check source availability:** `nip sources`
|
|
|
|
### Package Not Found
|
|
|
|
1. **Search across sources:** `nip sources <package>`
|
|
2. **Try different source:** `nip build <package> --source=<name>`
|
|
3. **Check package name:** Ensure correct spelling
|
|
|
|
### Variant Not Working
|
|
|
|
1. **Check mapping:** Unmapped variants are displayed during build
|
|
2. **Add custom mapping:** Edit `~/.config/nip/variant-mappings.json`
|
|
3. **Use verbose mode:** See exact flags being used
|
|
|
|
### Cache Issues
|
|
|
|
1. **Clear cache:** `nip cache clear`
|
|
2. **Force rebuild:** `nip build <package> --rebuild`
|
|
3. **Check cache stats:** `nip cache stats`
|
|
|
|
## Configuration
|
|
|
|
### Build Configuration
|
|
|
|
Location: `~/.config/nip/build.kdl` or `/etc/nip/build.kdl`
|
|
|
|
```kdl
|
|
build {
|
|
cache-dir "/var/nip/cache"
|
|
keep-work false
|
|
timeout "2h"
|
|
jobs 4
|
|
}
|
|
```
|
|
|
|
### Variant Mappings
|
|
|
|
Location: `~/.config/nip/variant-mappings.json`
|
|
|
|
See "Custom Mappings" section above for format.
|
|
|
|
## Examples
|
|
|
|
### Basic Builds
|
|
|
|
```bash
|
|
# Simple build
|
|
nip build bash
|
|
|
|
# Build with single variant
|
|
nip build firefox +wayland
|
|
|
|
# Build with multiple variants
|
|
nip build firefox +wayland +lto +pipewire
|
|
```
|
|
|
|
### Source Selection
|
|
|
|
```bash
|
|
# Auto-detect source (default)
|
|
nip build nginx
|
|
|
|
# Use specific source
|
|
nip build nginx --source=nix
|
|
nip build nginx --source=pkgsrc
|
|
nip build nginx --source=gentoo
|
|
```
|
|
|
|
### Advanced Options
|
|
|
|
```bash
|
|
# Verbose build
|
|
nip build firefox +wayland --verbose
|
|
|
|
# Force rebuild
|
|
nip build firefox +wayland --rebuild
|
|
|
|
# Build without installing
|
|
nip build test-package --no-install
|
|
|
|
# Keep intermediate files
|
|
nip build firefox --keep-work
|
|
```
|
|
|
|
### Cache Management
|
|
|
|
```bash
|
|
# View cache statistics
|
|
nip cache stats
|
|
|
|
# Clean old builds
|
|
nip cache clean
|
|
|
|
# Clear all cache
|
|
nip cache clear
|
|
```
|
|
|
|
### Package Discovery
|
|
|
|
```bash
|
|
# List all sources
|
|
nip sources
|
|
|
|
# Search for package
|
|
nip sources bash
|
|
nip sources firefox
|
|
nip sources nginx
|
|
```
|
|
|
|
## Tips
|
|
|
|
1. **Use cache:** Let NIP cache builds for instant reuse
|
|
2. **Start simple:** Build without variants first, add variants as needed
|
|
3. **Check sources:** Use `nip sources <package>` to find packages
|
|
4. **Use verbose:** Add `--verbose` when troubleshooting
|
|
5. **Custom mappings:** Add package-specific mappings for better control
|
|
|
|
## See Also
|
|
|
|
- NIP Package Manager Documentation
|
|
- Variant System Documentation
|
|
- Configuration Guide
|
|
- Troubleshooting Guide
|