Claude-skill-registry ellies-nix-environment
Nix environment patterns for Ellie's projects. Use when (1) a tool or command is not available on the system, or (2) setting up a new project that needs a development environment. Provides patterns for ad-hoc tool execution and flake-based devShells with direnv.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ellies-nix-environment" ~/.claude/skills/majiayu000-claude-skill-registry-ellies-nix-environment && rm -rf "$T"
manifest:
skills/data/ellies-nix-environment/SKILL.mdsource content
Ellie's Nix Environment
When a Tool Isn't Available
If a command fails because a tool isn't installed, use
nix run to execute it:
nix run nixpkgs#<tool> -- <args>
Examples:
nix run nixpkgs#python3 -- script.py nix run nixpkgs#jq -- '.field' file.json nix run nixpkgs#ffmpeg -- -i input.mp4 output.gif nix run nixpkgs#ripgrep -- "pattern" .
Do not suggest installing tools globally. Use
nix run for one-off commands.
Setting Up a New Project
When a project needs a development environment, create a flake with direnv:
1. Create flake.nix
flake.nix{ description = "Project description"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ # Add project dependencies here ]; }; }); }
2. Create .envrc
.envrcuse flake .
3. Activate direnv
direnv allow
4. Add to .gitignore
.gitignore.direnv/
Rust Projects
For Rust projects, use rust-overlay to get the toolchain:
{ description = "Rust project"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; rust = pkgs.rust-bin.nightly.latest.default.override { extensions = [ "rust-src" "rust-analyzer" ]; }; in { devShells.default = pkgs.mkShell { buildInputs = [ rust ]; }; }); }