nix-for-dev

Automate zero-input Nix development environment setup with npins pinning.

Updated Jun 15, 2026
One-click install
npx skills add https://github.com/srid/padam --skill nix-for-dev
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: nix-for-dev
Source: https://github.com/srid/padam/tree/main/.claude/skills/nix-for-dev
Command: npx skills add https://github.com/srid/padam --skill nix-for-dev

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This skill helps teams set up a zero-input Nix development environment that boots quickly and remains deterministic by avoiding a large, all-encompassing inputs graph. It champions a clean separation between the user-facing devShell and internal Nix logic, enabling fast iteration of development workflows.

Core Features & Use Cases

  • Zero-inputs principle: Top-level flake.nix declares no inputs and sources are pinned with npins, reducing cold eval time.
  • Deterministic dev shells: Separate default.nix and shell.nix provide fast, reproducible environments across platforms using pinned sources.
  • Language templates and sub-flakes: Supports non-user-facing configurations via sub-flakes and language-specific templates for easy project bootstrapping.

Quick Start

Run the initial setup to pin nixpkgs with npins and start a dev shell with nix develop.

Frequently Asked Questions about nix-for-dev

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make nix develop boot faster with a zero-input flake.nix?

A zero-input flake.nix reduces cold eval time by declaring no top-level inputs and pinning nixpkgs with npins. This setup provides fast, deterministic dev shells by isolating the user-facing environment from internal Nix logic.

What is the best way to separate user-facing devShells from internal Nix logic?

Separating user-facing devShells from internal Nix logic is achieved by using distinct default.nix and shell.nix files for reproducible environments, while routing non-user-facing scenarios through sub-flakes to maintain clean project boundaries.

How does npins pinning work for reproducible Nix development environments?

npins pinning replaces traditional flake inputs to source nixpkgs deterministically. By keeping the top-level flake.nix free of inputs and sourcing pinned dependencies via npins, you get reproducible builds across platforms without a large inputs graph.

Can I use sub-flakes to handle non-user-facing Nix configurations?

Yes, sub-flakes support non-user-facing configurations by isolating internal Nix logic from the primary user-facing devShell. This layout keeps the top-level flake.nix zero-input while managing language-specific templates and internal workflows separately.

Do I need to pin nixpkgs with npins before starting a Nix dev shell?

Yes, running the initial setup to pin nixpkgs with npins is required before starting a dev shell with nix develop. This ensures the zero-input Nix environment boots quickly and remains deterministic across different platforms.

Why does my Nix flake eval slowly and how can I avoid a large inputs graph?

Nix flake eval slows down due to a large, all-encompassing inputs graph. You can avoid this by adopting a zero-inputs principle where the top-level flake.nix declares no inputs and sources are pinned with npins for fast iteration.