nip/docs/gentoo-nix-guide.md

12 KiB

Using Nix Packages on Gentoo

Overview

This guide shows Gentoo users how to use NIP to access Nix's vast package repository while keeping their Gentoo system intact. This is perfect for:

  • Accessing packages not in Portage
  • Getting newer versions of software
  • Testing packages before creating ebuilds
  • Using binary packages for faster installation

Why Use Nix on Gentoo?

Advantages:

  • Access to 80,000+ packages from Nixpkgs
  • Binary packages (no compilation needed)
  • Isolated installation (no conflicts with Portage)
  • Multiple versions of the same package
  • Reproducible builds
  • Easy rollback

NIP Integration:

  • Automatic Nix installation
  • Clean GoboLinux-style organization
  • Unified /System/Links/ for all packages
  • Works alongside Portage seamlessly

Quick Start

1. Install NIP

# Clone repository
git clone https://git.maiwald.work/Nexus/NexusToolKit
cd NexusToolKit/nip

# Build and install
./build.sh
sudo ./install.sh

2. Install Your First Nix Package

# NIP will automatically offer to install Nix if needed
nip install firefox --source=nix

# Or explicitly install Nix first
nip bootstrap install nix

3. Verify Installation

# Check Nix is installed
nip bootstrap list

# Check Firefox is installed
nip list
which firefox

Automatic Nix Installation

When you try to install a Nix package, NIP automatically detects if Nix is missing and offers installation options:

$ nip install firefox --source=nix

⚠️  Nix not found

NIP can help you set up Nix:

1. 🚀 Install minimal Nix via NIP (recommended)
   • Lightweight standalone nix-build binary
   • Minimal Nix store
   • ~50MB download, ~100MB installed
   • Isolated in ~/.nip/bootstrap/nix/

2. 📦 Use containerized environment
   • Requires Podman/Docker
   • Completely isolated builds
   • ~200MB download

3. 🔧 Install full Nix manually
   • Follow: https://nixos.org/download.html

4. 🔄 Try a different source
   • nip install firefox --source=gentoo

Choose option (1-4) or 'q' to quit: 1

📦 Installing minimal Nix...
✅ Nix installed successfully

📦 Installing firefox from Nix...
✅ firefox installed to /Programs/Firefox/120.0/

Installation Methods

Best for: Most Gentoo users

nip bootstrap install nix

What you get:

  • Standalone nix-build binary
  • Minimal Nix store
  • Installed to ~/.nip/bootstrap/nix/
  • No system modifications
  • ~100MB total

Advantages:

  • Quick installation
  • No conflicts with Portage
  • Easy to remove
  • Sufficient for most packages

Method 2: Container-Based

Best for: Maximum isolation

# Install Podman
emerge --ask app-containers/podman

# Use container for Nix packages
nip install firefox --source=nix --container

Advantages:

  • Complete isolation
  • No Nix installation needed
  • Rootless with Podman
  • Clean host system

Method 3: Full Nix Installation

Best for: Heavy Nix users

# Install Nix manually
curl -L https://nixos.org/nix/install | sh

# Use with NIP
nip install firefox --source=nix

Advantages:

  • Full Nix functionality
  • Access to all Nix features
  • Can use nix-shell, nix-env, etc.

Common Workflows

Installing Binary Packages

# Install from Nix (binary, fast)
nip install firefox --source=nix
nip install vscode --source=nix
nip install chromium --source=nix

# List installed packages
nip list

Building from Source

# Build from Gentoo (source, customizable)
nip build vim +python+ruby --source=gentoo

# Build from Nix (source, reproducible)
nip build vim --source=nix

Mixing Sources

# System packages from Portage
emerge --ask dev-lang/python

# Development tools from Nix
nip install nodejs --source=nix
nip install rust --source=nix

# Custom builds from Gentoo
nip build ffmpeg +vaapi+lto --source=gentoo

Testing Packages

# Try a package from Nix before creating an ebuild
nip install some-new-tool --source=nix

# If you like it, keep it or create an ebuild
# If not, easily remove it
nip remove some-new-tool

Package Management

Installing Packages

# Install from Nix
nip install <package> --source=nix

# Install specific version (if available)
nip install firefox@120.0 --source=nix

# Install multiple packages
nip install firefox chromium vscode --source=nix

Listing Packages

# List all installed packages
nip list

# List only Nix packages
nip list --source=nix

# Show package details
nip info firefox

Removing Packages

# Remove a package
sudo nip remove firefox

# Remove multiple packages
sudo nip remove firefox chromium vscode

Updating Packages

# Update a package
nip update firefox --source=nix

# Update all packages
nip update --all

Integration with Portage

Coexistence

NIP and Portage work together seamlessly:

# Portage packages go to /usr
emerge --ask firefox

# NIP packages go to /Programs
nip install firefox --source=nix

# Both are accessible via PATH
which firefox  # Shows /System/Links/Executables/firefox

Priority

By default, NIP packages take priority in PATH:

PATH=/System/Links/Executables:/usr/bin:...

To prefer Portage packages, adjust your PATH in ~/.bashrc:

export PATH=/usr/bin:/System/Links/Executables:$PATH

Checking Sources

# See where a package comes from
nip info firefox

# List all sources
nip sources

Directory Structure

/Programs/                          # NIP packages
  ├── Firefox/120.0/                # From Nix
  ├── VSCode/1.85.0/                # From Nix
  └── Vim/9.0/                      # From Gentoo build

/System/Links/                      # Unified symlinks
  ├── Executables/
  │   ├── firefox -> /Programs/Firefox/120.0/bin/firefox
  │   ├── code -> /Programs/VSCode/1.85.0/bin/code
  │   └── vim -> /Programs/Vim/9.0/bin/vim
  ├── Libraries/
  └── Headers/

~/.nip/bootstrap/nix/               # Minimal Nix installation
  ├── bin/nix-build
  ├── store/
  └── config/

/var/nip/                           # NIP data
  ├── cas/                          # Content-addressable storage
  ├── cache/                        # Download cache
  └── db/packages.json              # Package database

Configuration

User Configuration

Edit ~/.nip/config:

# Prefer Nix for binary packages
default-source = "nix"

# Bootstrap preferences
bootstrap-auto-install = true
bootstrap-preferred-method = "recipe"

# Nix-specific settings
nix-binary-cache = true
nix-substituters = "https://cache.nixos.org"

System Configuration

Edit /etc/nip/nip.conf (requires root):

# System-wide settings
programs-dir = "/Programs"
links-dir = "/System/Links"

# Source priorities (lower = tried first)
nix-priority = 10
gentoo-priority = 20

Advanced Usage

Using Nix Channels

# Update Nix channel
nix-channel --update

# List available packages
nix-env -qaP | grep firefox

# Install via nix-env (alternative to NIP)
nix-env -iA nixpkgs.firefox

Nix Expressions

# Build from Nix expression
nip build --source=nix --expr '(import <nixpkgs> {}).firefox'

# Use custom Nix file
nip build --source=nix --file ./my-package.nix

Binary Caching

# Enable binary cache
nip config set nix-binary-cache true

# Use custom cache
nip config set nix-substituters "https://cache.nixos.org https://my-cache.example.com"

Troubleshooting

Nix Not Found

# Check if Nix is installed
nip bootstrap list

# Install Nix
nip bootstrap install nix

# Verify installation
nip bootstrap info nix

Package Not Found

# Update Nix channel
nix-channel --update

# Search for package
nix-env -qaP | grep <package>

# Try different package name
nip install <alternative-name> --source=nix

Permission Issues

# Most operations need root
sudo nip install firefox --source=nix

# Check permissions
ls -la /Programs
ls -la /System/Links

Conflicts with Portage

# Check which package is active
which firefox
nip info firefox

# Remove NIP version if needed
sudo nip remove firefox

# Or remove Portage version
sudo emerge --unmerge firefox

Nix Store Issues

# Check Nix store
nix-store --verify --check-contents

# Repair Nix store
nix-store --repair-path /nix/store/...

# Clean up old packages
nix-collect-garbage

Performance Tips

Use Binary Packages

# Nix provides pre-built binaries
nip install firefox --source=nix  # Fast, binary
nip build firefox --source=gentoo  # Slow, source

Enable Caching

# Enable NIP's binary cache
nip config set binary-cache true

# Enable Nix's binary cache
nip config set nix-binary-cache true

Parallel Operations

# Install multiple packages in parallel
nip install firefox chromium vscode --source=nix --parallel

Security Considerations

Verification

# NIP verifies all downloads with Blake2b checksums
# Nix verifies packages with cryptographic signatures

# Check package integrity
nip verify firefox

Isolation

# Minimal Nix installation is isolated
ls ~/.nip/bootstrap/nix/

# Container builds provide additional isolation
nip install firefox --source=nix --container

Updates

# Keep Nix updated
nip bootstrap update nix

# Update packages
nip update --all --source=nix

Comparison: Portage vs Nix

Feature Portage Nix (via NIP)
Package Count ~20,000 ~80,000
Installation Source Binary
Speed Slow Fast
Customization High (USE flags) Medium
Reproducibility Medium High
Rollback Limited Easy
Isolation System-wide Per-package
Disk Usage Lower Higher

Best Practice: Use both!

  • Portage for system packages and custom builds
  • Nix for quick binary installations and testing

Migration Guide

From Pure Gentoo

# Keep using Portage for system packages
emerge --ask @world

# Add Nix for additional packages
nip install firefox vscode --source=nix

# Gradually migrate packages as needed

From NixOS

# Install NIP on Gentoo
./build.sh && sudo ./install.sh

# Import your Nix packages
nip import-nix-profile

# Continue using familiar Nix commands
nix-env -iA nixpkgs.firefox

Best Practices

1. Use Portage for System Packages

# System essentials via Portage
emerge --ask sys-kernel/gentoo-sources
emerge --ask sys-apps/systemd

2. Use Nix for User Applications

# User applications via Nix
nip install firefox chromium vscode --source=nix

3. Use Gentoo Builds for Optimization

# Performance-critical apps with custom flags
nip build ffmpeg +vaapi+lto+cpu-native --source=gentoo

4. Keep Both Updated

# Update Portage
emerge --sync
emerge --update --deep --newuse @world

# Update Nix
nip bootstrap update nix
nip update --all --source=nix

Examples

Development Environment

# System compiler from Portage
emerge --ask sys-devel/gcc

# Development tools from Nix
nip install nodejs rust python --source=nix

# IDE from Nix
nip install vscode --source=nix

Media Workstation

# Optimized media tools from Gentoo
nip build ffmpeg +vaapi+lto --source=gentoo
nip build obs-studio +pipewire --source=gentoo

# Additional tools from Nix
nip install gimp inkscape --source=nix

Server Setup

# Core services from Portage
emerge --ask nginx postgresql

# Additional services from Nix
nip install grafana prometheus --source=nix

Getting Help

Documentation

Commands

# NIP help
nip --help
nip bootstrap --help

# Nix help
nix-env --help
nix-build --help

Support

Summary

Using Nix on Gentoo via NIP gives you:

Best of both worlds - Portage's customization + Nix's convenience 80,000+ packages - Access to Nixpkgs repository Fast installation - Binary packages, no compilation Clean integration - No conflicts with Portage Easy management - Simple NIP commands Automatic setup - NIP handles Nix installation

Get started:

nip install firefox --source=nix

That's it! NIP handles everything else automatically.