nip/docs/build-examples.md

656 lines
10 KiB
Markdown

# NIP Build System - Examples
## Basic Examples
### Simple Build
Build a package with default settings:
```bash
nip build bash
```
### Build with Single Variant
```bash
nip build firefox +wayland
```
### Build with Multiple Variants
```bash
nip build firefox +wayland +lto +pipewire
```
## Source Selection Examples
### Auto-Detect Source (Default)
```bash
nip build nginx
```
NIP automatically selects the best available source (priority: Nix > PKGSRC > Gentoo).
### Specify Source System
```bash
# Use Nix
nip build firefox --source=nix
# Use PKGSRC
nip build nginx --source=pkgsrc
# Use Gentoo
nip build vim --source=gentoo
```
## Variant Examples
### Graphics Variants
```bash
# Wayland support
nip build firefox +wayland
# X11 support
nip build firefox +X
# Vulkan graphics
nip build mesa +vulkan
# Multiple graphics options
nip build firefox +wayland +vulkan
```
### Audio Variants
```bash
# PipeWire audio
nip build firefox +pipewire
# PulseAudio
nip build firefox +pulseaudio
# ALSA
nip build mpd +alsa
# Multiple audio options
nip build firefox +pipewire +alsa
```
### Optimization Variants
```bash
# Link-time optimization
nip build firefox +lto
# Profile-guided optimization
nip build gcc +pgo
# Both optimizations
nip build firefox +lto +pgo
```
### Security Variants
```bash
# Position-independent executable
nip build nginx +pie
# Full hardening
nip build openssh +hardened
# Multiple security options
nip build nginx +pie +hardened
```
### Combined Variants
```bash
# Modern desktop application
nip build firefox +wayland +vulkan +pipewire +lto +pie
# Optimized server
nip build nginx +lto +pie +hardened
# Development tools
nip build gcc +lto +pgo
```
## Advanced Options
### Verbose Mode
See detailed build output:
```bash
nip build firefox +wayland --verbose
```
### Force Rebuild
Skip cache and rebuild from scratch:
```bash
nip build firefox +wayland --rebuild
```
### Build Without Installing
Build but don't install (useful for testing):
```bash
nip build test-package --no-install
```
### Keep Work Files
Keep intermediate build files for debugging:
```bash
nip build firefox --keep-work
```
### Parallel Jobs
Specify number of parallel build jobs:
```bash
nip build firefox --jobs=8
```
### Combined Advanced Options
```bash
nip build firefox +wayland +lto --verbose --rebuild --jobs=8
```
## Package Discovery Examples
### List All Sources
```bash
nip sources
```
Output:
```
📚 Available Package Sources (by priority):
1. 🔵 Nix (nixpkgs)
Status: ✅ Available
Packages: ~100,000+
2. 🟢 PKGSRC (NetBSD)
Status: ❌ Not installed
Install: https://www.pkgsrc.org/
3. 🟣 Gentoo Portage
Status: ❌ Not installed
Install: https://www.gentoo.org/
```
### Search for Package
```bash
# Search for bash
nip sources bash
# Search for firefox
nip sources firefox
# Search for nginx
nip sources nginx
```
## Cache Management Examples
### View Cache Statistics
```bash
nip cache stats
```
Output:
```
📊 Build Cache Statistics
Cached Builds: 15
Total Size: 2.3 MB
Cache Directory: /home/user/.cache/nip/builds
Retention Policy: 30 days
```
### Clean Old Builds
Remove builds older than 30 days:
```bash
nip cache clean
```
### Clear All Cache
Remove all cached builds:
```bash
nip cache clear
```
## Real-World Scenarios
### Scenario 1: Modern Desktop Browser
Build Firefox with modern desktop features:
```bash
nip build firefox +wayland +vulkan +pipewire +lto
```
This enables:
- Wayland display server (native Wayland, no XWayland)
- Vulkan graphics acceleration
- PipeWire audio (modern audio server)
- Link-time optimization (better performance)
### Scenario 2: Optimized Web Server
Build NGINX with security and performance:
```bash
nip build nginx +lto +pie +hardened --source=nix
```
This enables:
- Link-time optimization (better performance)
- Position-independent executable (security)
- Full hardening (additional security measures)
- Uses Nix for reproducible builds
### Scenario 3: Development Environment
Build GCC with optimizations:
```bash
nip build gcc +lto +pgo
```
This enables:
- Link-time optimization
- Profile-guided optimization (best performance)
### Scenario 4: Multimedia Workstation
Build media applications with full codec support:
```bash
# Video player with hardware acceleration
nip build mpv +wayland +vulkan +pipewire
# Audio workstation
nip build ardour +pipewire +lto
# Image editor
nip build gimp +wayland
```
### Scenario 5: Server Infrastructure
Build server components with security focus:
```bash
# Web server
nip build nginx +pie +hardened +lto
# Database
nip build postgresql +pie +hardened
# SSH server
nip build openssh +hardened
```
### Scenario 6: Testing Different Configurations
Test a package with different variants:
```bash
# Test with Wayland
nip build firefox +wayland --no-install
# Test with X11
nip build firefox +X --no-install
# Choose the one that works best
nip build firefox +wayland
```
### Scenario 7: Cross-Source Comparison
Try the same package from different sources:
```bash
# Build from Nix
nip build vim --source=nix
# Build from PKGSRC
nip build vim --source=pkgsrc
# Build from Gentoo
nip build vim --source=gentoo
```
### Scenario 8: Debugging Build Issues
Debug a failing build:
```bash
# First attempt
nip build problematic-package +feature
# If it fails, try verbose mode
nip build problematic-package +feature --verbose
# Try without variants
nip build problematic-package --verbose
# Try different source
nip build problematic-package --source=nix --verbose
# Keep work files for inspection
nip build problematic-package --keep-work --verbose
```
## Package-Specific Examples
### Web Browsers
```bash
# Firefox - Modern desktop
nip build firefox +wayland +vulkan +pipewire +lto
# Chromium - X11 with optimizations
nip build chromium +X +lto
# Brave - Wayland
nip build brave +wayland +pipewire
```
### Web Servers
```bash
# NGINX - Optimized and hardened
nip build nginx +lto +pie +hardened
# Apache - With SSL
nip build apache +ssl +lto
# Caddy - Modern web server
nip build caddy +lto
```
### Development Tools
```bash
# GCC - Optimized compiler
nip build gcc +lto +pgo
# LLVM/Clang - With all targets
nip build llvm +lto
# Rust - Optimized
nip build rust +lto
```
### Text Editors
```bash
# Vim - Full features
nip build vim +X +python +ruby +lto
# Emacs - Wayland native
nip build emacs +wayland +lto
# Neovim - Optimized
nip build neovim +lto
```
### Multimedia Applications
```bash
# VLC - Full codec support
nip build vlc +wayland +pipewire
# MPV - Hardware acceleration
nip build mpv +wayland +vulkan +pipewire
# Blender - Optimized
nip build blender +wayland +vulkan +lto
```
### System Utilities
```bash
# Bash - Optimized shell
nip build bash +lto
# Coreutils - Optimized
nip build coreutils +lto
# Git - With all features
nip build git +lto
```
## Workflow Examples
### Daily Development Workflow
```bash
# Morning: Update and build tools
nip sources
nip build gcc +lto +pgo
nip build rust +lto
# During development: Build dependencies
nip build libfoo +lto
nip build libbar +wayland
# Testing: Build without installing
nip build myproject --no-install
# Final: Build and install
nip build myproject +lto
```
### System Setup Workflow
```bash
# 1. Check available sources
nip sources
# 2. Build essential tools
nip build bash +lto
nip build coreutils +lto
nip build git +lto
# 3. Build desktop environment
nip build sway +wayland
nip build waybar +wayland
# 4. Build applications
nip build firefox +wayland +vulkan +pipewire +lto
nip build alacritty +wayland
# 5. Check cache
nip cache stats
```
### Maintenance Workflow
```bash
# Weekly: Clean old builds
nip cache clean
# Monthly: Review cache
nip cache stats
# As needed: Clear cache
nip cache clear
# Rebuild important packages
nip build firefox +wayland +lto --rebuild
```
## Tips and Tricks
### Tip 1: Use Cache Effectively
```bash
# First build (slow)
nip build firefox +wayland +lto
# Subsequent builds (instant)
nip build firefox +wayland +lto
```
### Tip 2: Test Before Installing
```bash
# Test configuration
nip build mypackage +experimental --no-install
# If successful, install
nip build mypackage +experimental
```
### Tip 3: Combine with Other NIP Commands
```bash
# Build and verify
nip build firefox +wayland
nip verify firefox
# Build and list
nip build bash +lto
nip list | grep bash
```
### Tip 4: Use Verbose for Learning
```bash
# See exactly what NIP does
nip build firefox +wayland --verbose
```
This shows:
- Source detection
- Variant translation
- Build commands
- Grafting process
- Symlink creation
### Tip 5: Parallel Builds for Speed
```bash
# Use all CPU cores
nip build firefox --jobs=$(nproc)
# Or specify number
nip build firefox --jobs=8
```
## Common Patterns
### Pattern 1: Build with Defaults, Add Variants Later
```bash
# Start simple
nip build firefox
# Add variants incrementally
nip build firefox +wayland
nip build firefox +wayland +lto
nip build firefox +wayland +lto +pipewire
```
### Pattern 2: Try Multiple Sources
```bash
# Try each source
for source in nix pkgsrc gentoo; do
nip build mypackage --source=$source --no-install
done
```
### Pattern 3: Batch Build
```bash
# Build multiple packages
for pkg in bash vim git; do
nip build $pkg +lto
done
```
### Pattern 4: Conditional Variants
```bash
# Desktop system
if [ "$DESKTOP" = "wayland" ]; then
nip build firefox +wayland +vulkan +pipewire
else
nip build firefox +X +pulseaudio
fi
```
## Quick Reference
### Most Common Commands
```bash
# Basic build
nip build <package>
# Build with variants
nip build <package> +variant1 +variant2
# Specify source
nip build <package> --source=nix
# Verbose mode
nip build <package> --verbose
# Force rebuild
nip build <package> --rebuild
# Search for package
nip sources <package>
# Cache management
nip cache stats
nip cache clean
nip cache clear
```
### Most Common Variants
```bash
+wayland # Wayland display server
+X # X11 display server
+vulkan # Vulkan graphics
+pipewire # PipeWire audio
+pulseaudio # PulseAudio
+lto # Link-time optimization
+pie # Position-independent executable
+hardened # Full hardening
```
## See Also
- User Guide: `source-build-guide.md`
- Help Reference: `build-system-help.md`
- Configuration: `build-configuration.md`
- Troubleshooting: `build-troubleshooting.md`
Happy building! 🚀