devenv ecosystem

<pattern name="version_specification"> <description>Specify language version (available for some languages)</description> <example> languages.python.version = "3.11.3"; languages.ruby.version = "3.2.1"; languages.rust.channel = "stable"; </example> </pattern>

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "devenv ecosystem" with this command: npx skills add takeokunn/nixos-configuration/takeokunn-nixos-configuration-devenv-ecosystem

<pattern name="version_specification"> <description>Specify language version (available for some languages)</description> <example> languages.python.version = "3.11.3"; languages.ruby.version = "3.2.1"; languages.rust.channel = "stable"; </example> </pattern>

<pattern name="package_override"> <description>Use custom package instead of default</description> <example> languages.go.package = pkgs.go_1_21; languages.java.jdk.package = pkgs.jdk17; </example> </pattern>

<pattern name="version_file"> <description>Read version from file (Ruby, Python)</description> <example> languages.ruby.versionFile = "./.ruby-version"; languages.python.versionFile = "./.python-version"; </example> </pattern>

<pattern name="dev_tooling"> <description>Configure LSP, debugger, linter, formatter (devenv 1.8+)</description> <example> languages.rust.dev = { lsp.enable = true; debugger.enable = true; linter.enable = true; formatter.enable = true; }; </example> </pattern>

</common_patterns>

<language name="rust"> <example> languages.rust = { enable = true; channel = "stable"; # or "nightly", "beta" components = [ "rustc" "cargo" "clippy" "rustfmt" "rust-analyzer" ]; targets = [ "wasm32-unknown-unknown" ]; }; </example> <output_pattern> outputs.rust-app = config.languages.rust.import ./rust-app {}; </output_pattern> </language>

<language name="go"> <example> languages.go = { enable = true; package = pkgs.go_1_22; }; </example> <output_pattern> outputs.go-app = config.languages.go.import ./go-app {}; </output_pattern> </language>

<language name="c_cpp"> <example> languages.c.enable = true; languages.cplusplus.enable = true; </example> </language>

<language name="zig"> <example> languages.zig = { enable = true; package = pkgs.zig; zls.package = pkgs.zls; }; </example> </language>

<language name="nim"> <example> languages.nim = { enable = true; package = pkgs.nim; }; </example> </language>

<language name="odin"> <example> languages.odin = { enable = true; package = pkgs.odin; }; </example> </language>

<language name="v"> <example> languages.v = { enable = true; package = pkgs.vlang; }; </example> </language>

<language name="python"> <example> languages.python = { enable = true; version = "3.12"; uv.enable = true; uv.sync.enable = true; }; </example> <poetry_example> languages.python = { enable = true; poetry = { enable = true; install.enable = true; install.allExtras = true; }; }; </poetry_example> <output_pattern> outputs.python-app = config.languages.python.import ./python-app {}; </output_pattern> </language>

<language name="ruby"> <example> languages.ruby = { enable = true; version = "3.3.0"; bundler.enable = true; }; </example> </language>

<language name="php"> <example> languages.php = { enable = true; package = pkgs.php83; extensions = [ "opcache" "redis" ]; }; </example> </language>

<language name="perl"> <example> languages.perl.enable = true; </example> </language>

<language name="lua"> <example> languages.lua.enable = true; </example> </language>

<language name="java"> <example> languages.java = { enable = true; jdk.package = pkgs.jdk21; maven.enable = true; gradle.enable = true; }; </example> </language>

<language name="kotlin"> <example> languages.kotlin.enable = true; </example> </language>

<language name="scala"> <example> languages.scala = { enable = true; package = pkgs.scala_3; sbt.enable = true; }; </example> </language>

<language name="clojure"> <example> languages.clojure.enable = true; </example> </language>

<language name="haskell"> <example> languages.haskell = { enable = true; languageServer = pkgs.haskell-language-server; stack = { enable = true; args = [ "--no-nix" "--system-ghc" "--no-install-ghc" ]; }; }; </example> </language>

<language name="ocaml"> <example> languages.ocaml = { enable = true; packages = pkgs.ocaml-ng.ocamlPackages_5_1; }; </example> </language>

<language name="elixir"> <example> languages.elixir.enable = true; </example> </language>

<language name="erlang"> <example> languages.erlang.enable = true; </example> </language>

<language name="elm"> <example> languages.elm.enable = true; </example> </language>

<language name="purescript"> <example> languages.purescript = { enable = true; package = pkgs.purescript; }; </example> </language>

<language name="gleam"> <example> languages.gleam.enable = true; </example> </language>

<language name="idris"> <example> languages.idris = { enable = true; package = pkgs.idris2; }; </example> </language>

<language name="lean4"> <example> languages.lean4 = { enable = true; package = pkgs.lean4; }; </example> </language>

<language name="unison"> <example> languages.unison.enable = true; </example> </language>

<language name="javascript"> <example> languages.javascript = { enable = true; package = pkgs.nodejs_22; npm.enable = true; npm.install.enable = true; }; </example> <pnpm_example> languages.javascript = { enable = true; pnpm.enable = true; pnpm.install.enable = true; }; </pnpm_example> <bun_example> languages.javascript = { enable = true; bun.enable = true; bun.install.enable = true; }; </bun_example> <yarn_example> languages.javascript = { enable = true; yarn.enable = true; yarn.install.enable = true; }; </yarn_example> <corepack_example> languages.javascript = { enable = true; corepack.enable = true; }; </corepack_example> </language>

<language name="typescript"> <example> languages.typescript.enable = true; </example> </language>

<language name="deno"> <example> languages.deno.enable = true; </example> </language>

<language name="nix"> <example> languages.nix = { enable = true; lsp.package = pkgs.nil; # or pkgs.nixd }; </example> </language>

<language name="swift"> <example> languages.swift.enable = true; </example> </language>

<language name="crystal"> <example> languages.crystal.enable = true; </example> </language>

<language name="dart"> <example> languages.dart.enable = true; </example> </language>

<language name="r"> <example> languages.r.enable = true; </example> </language>

<language name="julia"> <example> languages.julia.enable = true; </example> </language>

<language name="fortran"> <example> languages.fortran.enable = true; </example> </language>

<language name="pascal"> <example> languages.pascal = { enable = true; lazarus.enable = true; }; </example> </language>

<language name="raku"> <example> languages.raku.enable = true; </example> </language>

<language name="racket"> <example> languages.racket.enable = true; </example> </language>

<language name="standardml"> <example> languages.standardml.enable = true; </example> </language>

<language name="solidity"> <example> languages.solidity = { enable = true; package = pkgs.solc; }; </example> </language>

<language name="terraform"> <example> languages.terraform.enable = true; </example> </language>

<language name="opentofu"> <example> languages.opentofu.enable = true; </example> </language>

<language name="ansible"> <example> languages.ansible = { enable = true; package = pkgs.ansible; }; </example> </language>

<language name="helm"> <example> languages.helm = { enable = true; languageServer.enable = true; }; </example> </language>

<language name="cue"> <example> languages.cue = { enable = true; package = pkgs.cue; }; </example> </language>

<language name="jsonnet"> <example> languages.jsonnet.enable = true; </example> </language>

<language name="typst"> <example> languages.typst = { enable = true; fontPaths = [ "${pkgs.roboto}/share/fonts/truetype" ]; }; </example> </language>

<language name="texlive"> <example> languages.texlive.enable = true; </example> </language>

<language name="gawk"> <example> languages.gawk.enable = true; </example> </language>

<language name="shell"> <example> languages.shell.enable = true; </example> </language>

<language name="robotframework"> <example> languages.robotframework.enable = true; </example> </language>

<language name="vala"> <example> languages.vala.enable = true; </example> </language>

<language name="dotnet"> <example> languages.dotnet.enable = true; </example> </language>

<decision_tree name="language_selection"> What type of project are you building? Use Rust, Go, Zig, or C/C++ Use JavaScript/TypeScript, Python, Ruby, Go, or Rust Use JavaScript/TypeScript with npm/pnpm/bun Use Python with uv or poetry Use Haskell, OCaml, Elixir, or Gleam Use Java, Kotlin, or Scala with gradle/maven/sbt Use Terraform, OpenTofu, Ansible, or Nix </decision_tree>

<decision_tree name="package_manager_selection"> Which JavaScript/TypeScript package manager to use? Match existing lock file (package-lock.json=npm, pnpm-lock.yaml=pnpm, yarn.lock=yarn, bun.lockb=bun) Use pnpm or bun Use npm (most widely supported) Use pnpm or yarn with workspaces Use corepack.enable with packageManager in package.json </decision_tree>

<decision_tree name="devenv_vs_flakes"> Should you use devenv or pure Nix flakes? Use devenv - services.* is simpler Use devenv - git-hooks integration built-in Use devenv - process-compose integration Use devenv - languages.* handles versions Use flakes - devenv adds overhead Use flakes - devenv is for dev environments </decision_tree>

<service name="mysql"> <example> services.mysql = { enable = true; package = pkgs.mysql80; initialDatabases = [{ name = "myapp"; }]; }; </example> </service>

<service name="mongodb"> <example> services.mongodb = { enable = true; }; </example> </service>

<service name="redis"> <example> services.redis = { enable = true; port = 6379; }; </example> </service>

<service name="memcached"> <example> services.memcached = { enable = true; }; </example> </service>

<service name="minio"> <example> services.minio = { enable = true; }; </example> </service>

<service name="elasticsearch"> <example> services.elasticsearch = { enable = true; }; </example> </service>

<service name="opensearch"> <example> services.opensearch = { enable = true; }; </example> </service>

<service name="kafka"> <example> services.kafka = { enable = true; }; </example> </service>

<service name="caddy"> <example> services.caddy = { enable = true; }; </example> </service>

<service name="varnish"> <example> services.varnish = { enable = true; vcl = '' vcl 4.0; backend default { .host = "127.0.0.1"; .port = "8080"; } ''; }; </example> </service>

<service name="mailpit"> <example> services.mailpit.enable = true; </example> </service>

<decision_tree name="service_selection"> What type of storage/service do you need? Use postgres or mysql Use mongodb Use redis or memcached Use minio Use elasticsearch or opensearch Use rabbitmq or kafka Use nginx or caddy Use mailhog or mailpit </decision_tree>

# Linters
eslint.enable = true;
clippy.enable = true;
shellcheck.enable = true;

# Security
detect-private-keys.enable = true;
check-merge-conflicts.enable = true;

# Git hygiene
check-case-conflicts.enable = true;
editorconfig-checker.enable = true;

}; </example>

<custom_hook> git-hooks.hooks.my-custom-hook = { enable = true; name = "my-custom-hook"; entry = "${pkgs.bash}/bin/bash -c 'echo Running custom hook'"; files = "\.nix$"; pass_filenames = true; }; </custom_hook>

<common_hooks> <hook name="nixfmt-rfc-style">Nix code formatter (RFC style)</hook> <hook name="prettier">JavaScript/TypeScript/CSS/HTML formatter</hook> <hook name="black">Python code formatter</hook> <hook name="rustfmt">Rust code formatter</hook> <hook name="ormolu">Haskell code formatter</hook> <hook name="gofmt">Go code formatter</hook> <hook name="eslint">JavaScript/TypeScript linter</hook> <hook name="clippy">Rust linter</hook> <hook name="shellcheck">Shell script linter</hook> <hook name="yamllint">YAML linter</hook> <hook name="actionlint">GitHub Actions linter</hook> <hook name="hadolint">Dockerfile linter</hook> <hook name="markdownlint">Markdown linter</hook> <hook name="detect-private-keys">Prevent committing private keys</hook> <hook name="check-merge-conflicts">Prevent committing merge conflicts</hook> <hook name="check-case-conflicts">Detect case conflicts in filenames</hook> <hook name="editorconfig-checker">Check editorconfig compliance</hook> <hook name="treefmt">Universal formatter via treefmt</hook> </common_hooks>

# With description
deploy = {
  exec = "kubectl apply -f k8s/";
  description = "Deploy to Kubernetes";
};

# Using packages
migrate = {
  exec = "${pkgs.dbmate}/bin/dbmate up";
  description = "Run database migrations";
};

}; </example>

<advanced_example> processes = { web = { exec = "npm run dev"; process-compose = { depends_on.api.condition = "process_healthy"; readiness_probe = { http_get = { host = "localhost"; port = 3000; }; }; }; }; api = { exec = "cargo run"; process-compose = { readiness_probe = { http_get = { host = "localhost"; port = 8080; path = "/health"; }; }; }; }; }; </advanced_example>

<dotenv_example> dotenv.enable = true; dotenv.filename = ".env.local"; </dotenv_example>

outputs = {
  rust-app = config.languages.rust.import ./rust-app {};
  python-app = config.languages.python.import ./python-app {};
  go-app = config.languages.go.import ./go-app {};
};

} </example>

profiles = {
  "python-3.11".config = {
    languages.python.version = "3.11";
  };
  "python-3.10".config = {
    languages.python.version = "3.10";
  };
};

} </example> <usage>devenv shell --profile python-3.11</usage>

profiles = {
  backend.module = {
    languages.rust.enable = true;
    services.postgres.enable = true;
    services.redis.enable = true;
  };

  frontend.module = {
    languages.javascript.enable = true;
    languages.typescript.enable = true;
  };

  fullstack.extends = [ "backend" "frontend" ];
};

} </example>

  user."developer".module = {
    packages = [ pkgs.gh ];
  };
};

} </example>

languages = {
  javascript = {
    enable = true;
    package = pkgs.nodejs_22;
    pnpm.enable = true;
  };
  typescript.enable = true;
};

services = {
  postgres = {
    enable = true;
    initialDatabases = [{ name = "app_dev"; }];
  };
  redis.enable = true;
};

processes = {
  frontend.exec = "pnpm dev";
  api.exec = "pnpm api:dev";
};

scripts = {
  db-migrate.exec = "pnpm db:migrate";
  db-seed.exec = "pnpm db:seed";
};

git-hooks.hooks = {
  prettier.enable = true;
  eslint.enable = true;
};

} </example>

packages = [ pkgs.nixfmt-rfc-style ];

git-hooks.hooks = {
  nixfmt-rfc-style.enable = true;
  editorconfig-checker.enable = true;
};

} </example>

<decision_tree name="configuration_approach"> What type of project are you setting up? Use minimal_config pattern Use full_stack pattern Use nix_project pattern Use profiles with team modules </decision_tree>

<anti_patterns>

Hardcoding specific package versions instead of using version options Use languages..version or languages..package with nixpkgs packages

<best_practices>

Use languages.*.enable instead of adding language packages directly to packages list

<context7_integration> <library_id>/cachix/devenv</library_id> <trust_score>9.7</trust_score> 1354 <usage_patterns> Fetch specific language configuration options Fetch service configuration details Fetch available pre-commit hooks Fetch packaging patterns Fetch profile configuration (1.9+) </usage_patterns> </context7_integration>

<error_escalation>

Missing optional configuration attribute Note in output, suggest improvement

Service configuration incomplete or enterShell too slow Document issue, suggest refactoring approach

Configuration fails to evaluate or services fail to start Debug with devenv info, present options to user

Security issue in configuration (secrets exposed, unsafe permissions) Block operation, require explicit user acknowledgment

</error_escalation>

<related_agents> Finding existing devenv configurations and patterns Evaluating devenv architecture and service dependencies Reviewing devenv configuration for security issues </related_agents>

<related_skills> Nix language fundamentals, flakes, Home Manager (devenv uses Nix) Symbol operations for navigating devenv configurations Fetch latest devenv documentation </related_skills>

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

php ecosystem

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

openclaw-version-monitor

监控 OpenClaw GitHub 版本更新,获取最新版本发布说明,翻译成中文, 并推送到 Telegram 和 Feishu。用于:(1) 定时检查版本更新 (2) 推送版本更新通知 (3) 生成中文版发布说明

Archived SourceRecently Updated
Coding

ask-claude

Delegate a task to Claude Code CLI and immediately report the result back in chat. Supports persistent sessions with full context memory. Safe execution: no data exfiltration, no external calls, file operations confined to workspace. Use when the user asks to run Claude, delegate a coding task, continue a previous Claude session, or any task benefiting from Claude Code's tools (file editing, code analysis, bash, etc.).

Archived SourceRecently Updated
Coding

ai-dating

This skill enables dating and matchmaking workflows. Use it when a user asks to make friends, find a partner, run matchmaking, or provide dating preferences/profile updates. The skill should execute `dating-cli` commands to complete profile setup, task creation/update, match checking, contact reveal, and review.

Archived SourceRecently Updated