7.7 KiB
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:
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:
# 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:
nip sources [package]
Examples:
# 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:
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:
nip cache clean
nip cache clear
Clear all cached builds.
Usage:
nip cache clear
Variant System
Variant Domains
The variant system organizes build options into semantic domains:
Graphics Domain:
wayland- Wayland display server supportX- X11 display server supportvulkan- Vulkan graphics API
Audio Domain:
pipewire- PipeWire audio serverpulseaudio- PulseAudio sound serveralsa- ALSA audio support
Optimization Domain:
lto- Link-time optimizationpgo- Profile-guided optimization
Security Domain:
pie- Position-independent executablehardened- Full hardening
Variant Syntax
Variants are specified with the + prefix:
nip build <package> +domain=value
Multiple variants can be combined:
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:
{
"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:
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:
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:
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:
# 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
- Check build log: Build output is displayed during build
- Try verbose mode:
nip build <package> --verbose - Force rebuild:
nip build <package> --rebuild - Check source availability:
nip sources
Package Not Found
- Search across sources:
nip sources <package> - Try different source:
nip build <package> --source=<name> - Check package name: Ensure correct spelling
Variant Not Working
- Check mapping: Unmapped variants are displayed during build
- Add custom mapping: Edit
~/.config/nip/variant-mappings.json - Use verbose mode: See exact flags being used
Cache Issues
- Clear cache:
nip cache clear - Force rebuild:
nip build <package> --rebuild - Check cache stats:
nip cache stats
Configuration
Build Configuration
Location: ~/.config/nip/build.kdl or /etc/nip/build.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
# 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
# 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
# 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
# View cache statistics
nip cache stats
# Clean old builds
nip cache clean
# Clear all cache
nip cache clear
Package Discovery
# List all sources
nip sources
# Search for package
nip sources bash
nip sources firefox
nip sources nginx
Tips
- Use cache: Let NIP cache builds for instant reuse
- Start simple: Build without variants first, add variants as needed
- Check sources: Use
nip sources <package>to find packages - Use verbose: Add
--verbosewhen troubleshooting - Custom mappings: Add package-specific mappings for better control
See Also
- NIP Package Manager Documentation
- Variant System Documentation
- Configuration Guide
- Troubleshooting Guide