nix-profile-manager

Expert guidance for agents to manage local Nix profiles for installing tools and dependencies. Covers flakes, profile management, package searching, and registry configuration.

ypares/agent-skills43 installsMITSynced Aug 22

Works with

Claude CodeCursorCodex CLIGitHub CopilotGemini CLI
---
name: nix-profile-manager
description: Expert guidance for agents to manage local Nix profiles for installing tools and dependencies. Covers flakes, profile management, package searching, and registry configuration.
license: MIT
---

# Nix Profile Manager for Agents

## Overview

This skill enables agents to maintain a local Nix profile in a user-provided directory, allowing dynamic installation of tools without requiring system-wide package management or sudo access.

## Quick Start: Setting Up a Local Profile

Users should provide a directory in their `PATH` for the agent to manage, and ensure the `AGENT_PROFILE` env var contains this directory so the agent knows where it is.

Then the agent just does:

```bash
nix profile add --profile "$AGENT_PROFILE" "nixpkgs#git"
```

The `--profile` flag tells Nix to store the profile metadata in that location.
The `bin` dir created by Nix in the profile must be in the PATH.

NOTE: on older Nix versions, the `add` sub-command was called `install`. Keep this in mind if you get errors saying that "add" does not exist.

## Core Concepts

### Profiles

A **profile** is a directory containing:
- `manifest.json` - list of installed packages and their flake references
- `bin`, `lib`, `share`, etc. - folders with symlinks to binaries, libs, docs in the Nix store

When you run `nix profile add`, Nix updates the manifest and recreates symlinks.

### Flakes

A **flake** is a standardized Nix package collection with:
- A `flake.nix` file defining inputs and outputs
- Deterministic versioning via `flake.lock`
- Multiple output schemes (packages, overlays, modules, etc.)

**Common flakes:**
- `nixpkgs` - Standard package library (the default registry), usually an alias for `github:NixOS/nixpkgs/nixpkgs-unstable`
- Custom flakes from GitHub (e.g., `github:user/repo`)

### Packages vs. Flakes

- **Package**: A single tool (e.g., `git`, `python311`)
- **Flake**: A collection of packages, accessed as `<flake>#<package>`

IMPORTANT: In some flakes (like `nixpkgs`) packages can be nested: `<flake>#<scope>.<package>`

## Essential Commands

### Search for Packages

```bash
# Search in nixpkgs flake:
nix search nixpkgs git

# Search in specific (fully qualified) flake
nix search "github:user/repo[/branch]" <package-name>

# Or get a more detailed JSON output
nix search nixpkgs python3 --json | jq '.[].pname'
```

### Manage Profile

```bash
# Add package
nix profile add --profile <profile_path> "<flake>#<package>"

# List installed packages
nix profile list --profile <profile_path>

# Remove by index or element number
nix profile remove --profile <path>/profile 0

# Upgrade packages
nix profile upgrade --profile <profile_path> <package_name>
nix profile upgrade --profile <profile_path> --all  # All packages installed in this profile
```

### Registry Management

```bash
# List available flake aliases
nix registry list

# Add custom registry entry (user-level)
nix registry add myflake github:user/repo/branch
```

## General Workflow

```bash
# Determine profile path:
echo $AGENT_PROFILE  # If not defined, ask the user which profile to use!!

# Search for the package
nix search nixpkgs git

# Add it
nix profile add --profile "$AGENT_PROFILE" "nixpkgs#git"

# Just use it!
tool-cmd ...
```

## Important Details

- **Profile path `bin` sub-folder should be in PATH**: The directory containing the profile must be in `$PATH` for linked binaries to be accessible
- **Flake references are immutable**: `nixpkgs#git` resolves to the current nixpkgs version; use `github:user/repo/ref#package` to pin to specific refs
- **Profile locking**: Only one agent should modify a profile at a time; locking is not automatic
- **Store links don't expire**: Nix store paths remain valid even if the flake changes; profiles maintain old package paths if needed

## Troubleshooting

**Package not found:**
- Ensure flake name is correct: `nix registry list` shows available aliases
- Search with `nix search <flake> <partial-name>` to find exact package name

**Command not in PATH after install:**
- Check profile directory is in `$PATH`: `echo $PATH`
- Verify $AGENT_PROFILE was created: `ls -la $AGENT_PROFILE` (adjust path as needed)

**Permission denied:**
- Local profiles DO NOT require sudo. Report to user in case of permission problems

## References

- `references/flakes.md` - In-depth flake concepts and GitHub references
- `references/package-search.md` - Advanced package discovery techniques
- `references/profile-internals.md` - Profile structure and manifest format
- `references/registry.md` - Custom registry configuration and pinning

## For Agent Implementation

When implementing profile management in an agent:

1. **Accept profile path as environment variable or parameter** - e.g., `AGENT_PROFILE` or function arg
2. **Always search before installing** - verify package exists and name is exact
3. **Use `--json` output for parsing** - more reliable than text output
4. **Handle errors gracefully** - packages may not exist in all flakes
5. **Notify about profile modifications** - help users track what was installed

More Performance skills

seo-audit

coreyhaines31/marketingskills

When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," or "indexing issues." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema. For AI search optimization, see ai-seo.

195.1k

competitor-profiling

coreyhaines31/marketingskills

When the user wants to research, profile, or analyze competitors from their URLs. Also use when the user mentions 'competitor profile,' 'competitor research,' 'competitor analysis,' 'profile this competitor,' 'analyze competitor,' 'competitive intelligence,' 'competitor deep dive,' 'who are my competitors,' 'competitor landscape,' 'competitor dossier,' 'competitive audit,' or 'research these competitors.' Input is a list of competitor URLs. Output is structured competitor profile markdown files. For creating comparison/alternative pages from profiles, see competitors. For sales-specific battle cards, see sales-enablement.

65.8k

vercel-optimize

vercel-labs/agent-skills

Use for Vercel cost and performance optimization on deployed projects, especially Next.js, SvelteKit, Nuxt, and limited Astro apps. Collect Vercel metrics, usage, project config, and code scan results first; investigate only metric-backed candidates; produce ranked recommendations grounded in verified files and version-aware Vercel/framework docs. Trigger for Vercel bill reduction, slow or expensive routes, caching opportunities, Function Invocations, Build Minutes, Fast Data Transfer, Core Web Vitals, Bot Management, Fluid compute, or cost breakdown requests.

59.3k

← All Performance skills

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY