├── .cargo └── config.toml ├── .devcontainer.json ├── .envrc ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── enhancement.md │ └── question.md ├── renovate.json └── workflows │ ├── auto-tag-latest.yml │ ├── build.yml │ ├── buildtest.yml │ ├── bump-version.yml │ ├── containers.yml │ ├── generate.yml │ ├── pin.yml │ ├── publish-flake.yml │ ├── release.yml │ ├── test.yml │ └── update-latest-version.yml ├── .gitignore ├── .gitpod.yml ├── CLAUDE.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── RELEASE.md ├── SECURITY.md ├── _redirects ├── build_cloudflare.sh ├── containers ├── devcontainer │ ├── Dockerfile │ ├── nix-entrypoint.sh │ └── nix.conf └── devenv │ └── Dockerfile ├── default.nix ├── devenv-cache-core ├── Cargo.toml └── src │ ├── db.rs │ ├── error.rs │ ├── file.rs │ ├── lib.rs │ └── time.rs ├── devenv-eval-cache ├── Cargo.toml ├── migrations │ ├── 20240906130404_init.sql │ └── 20241210011111_create-env-input.sql └── src │ ├── bin │ └── main.rs │ ├── command.rs │ ├── db.rs │ ├── internal_log.rs │ ├── lib.rs │ └── op.rs ├── devenv-generate ├── Cargo.toml └── src │ └── main.rs ├── devenv-run-tests ├── Cargo.toml └── src │ └── main.rs ├── devenv-tasks ├── Cargo.toml ├── migrations │ └── 20250507000000_init.sql └── src │ ├── lib.rs │ ├── main.rs │ ├── task_cache.rs │ └── ui.rs ├── devenv.lock ├── devenv.nix ├── devenv.yaml ├── devenv ├── Cargo.toml ├── direnvrc ├── init │ ├── .envrc │ ├── .gitignore │ ├── devenv.nix │ └── devenv.yaml └── src │ ├── cli.rs │ ├── cnix.rs │ ├── config.rs │ ├── devenv.rs │ ├── flake.tmpl.nix │ ├── lib.rs │ ├── log.rs │ ├── main.rs │ └── util.rs ├── docs ├── .nav.yml ├── ad-hoc-developer-environments.md ├── assets │ ├── devenv-preview.tar.gz │ ├── extra.css │ ├── favicon.svg │ ├── github-dark.min.css │ ├── images │ │ ├── caching.gif │ │ ├── cachix.webp │ │ ├── chasm.webp │ │ ├── nixcon.webp │ │ ├── process-compose.png │ │ ├── tasks.gif │ │ └── thailand.jpg │ ├── logo.webp │ ├── output.css │ ├── stackoverflow-light.min.css │ └── top-level.css ├── automatic-shell-activation.md ├── basics.md ├── binary-caching.md ├── blog │ ├── .authors.yml │ ├── index.md │ └── posts │ │ ├── devenv-is-switching-its-nix-implementation-to-tvix.md │ │ ├── devenv-v0.2.md │ │ ├── devenv-v0.3.md │ │ ├── devenv-v0.4.md │ │ ├── devenv-v0.5.md │ │ ├── devenv-v0.6-generating-containers-and-instant-shell-activation.md │ │ ├── devenv-v1.0-rewrite-in-rust.md │ │ ├── devenv-v1.1-outputs.md │ │ ├── devenv-v1.2-tasks.md │ │ ├── devenv-v1.3-instant-developer-environments-with-nix-caching.md │ │ ├── devenv-v1.4-generating-nix-developer-environments-using-ai.md │ │ ├── devenv-v1.5-overlays-and-performance.md │ │ ├── devenv-v1.6-extensible-ad-hoc-nix-environments.md │ │ └── hello-world.md ├── common-patterns.md ├── community │ ├── contributing.md │ └── get-involved.md ├── composing-using-imports.md ├── containers.md ├── devenv.schema.json ├── editor-support │ ├── .nav.yml │ ├── intellij.md │ ├── vscode.md │ └── zed.md ├── examples.md ├── files-and-variables.md ├── garbage-collection.md ├── getting-started.md ├── git-hooks.md ├── guides │ ├── .nav.yml │ ├── profiles.md │ ├── using-with-flake-parts.md │ └── using-with-flakes.md ├── index.md ├── individual-docs │ ├── languages │ │ ├── ansible.md │ │ ├── c.md │ │ ├── clojure.md │ │ ├── cplusplus.md │ │ ├── crystal.md │ │ ├── cue.md │ │ ├── dart.md │ │ ├── deno.md │ │ ├── dotnet.md │ │ ├── elixir.md │ │ ├── elm.md │ │ ├── erlang.md │ │ ├── fortran.md │ │ ├── gawk.md │ │ ├── gleam.md │ │ ├── go.md │ │ ├── haskell.md │ │ ├── idris.md │ │ ├── java.md │ │ ├── javascript.md │ │ ├── jsonnet.md │ │ ├── julia.md │ │ ├── kotlin.md │ │ ├── lean4.md │ │ ├── lua.md │ │ ├── nim.md │ │ ├── nix.md │ │ ├── ocaml.md │ │ ├── odin.md │ │ ├── opentofu.md │ │ ├── pascal.md │ │ ├── perl.md │ │ ├── php.md │ │ ├── purescript.md │ │ ├── python.md │ │ ├── r.md │ │ ├── racket.md │ │ ├── raku.md │ │ ├── robotframework.md │ │ ├── ruby.md │ │ ├── rust.md │ │ ├── scala.md │ │ ├── shell.md │ │ ├── solidity.md │ │ ├── standardml.md │ │ ├── swift.md │ │ ├── terraform.md │ │ ├── texlive.md │ │ ├── typescript.md │ │ ├── typst.md │ │ ├── unison.md │ │ ├── v.md │ │ ├── vala.md │ │ └── zig.md │ ├── process-managers │ │ ├── hivemind.md │ │ ├── honcho.md │ │ ├── mprocs.md │ │ ├── overmind.md │ │ └── process-compose.md │ └── services │ │ ├── adminer.md │ │ ├── blackfire.md │ │ ├── caddy.md │ │ ├── cassandra.md │ │ ├── clickhouse.md │ │ ├── cockroachdb.md │ │ ├── couchdb.md │ │ ├── dynamodb-local.md │ │ ├── elasticmq.md │ │ ├── elasticsearch.md │ │ ├── httpbin.md │ │ ├── influxdb.md │ │ ├── kafka-connect.md │ │ ├── kafka.md │ │ ├── keycloak.md │ │ ├── mailhog.md │ │ ├── mailpit.md │ │ ├── meilisearch.md │ │ ├── memcached.md │ │ ├── minio.md │ │ ├── mongodb.md │ │ ├── mysql.md │ │ ├── nginx.md │ │ ├── opensearch.md │ │ ├── opentelemetry-collector.md │ │ ├── postgres.md │ │ ├── prometheus.md │ │ ├── rabbitmq.md │ │ ├── redis.md │ │ ├── sqld.md │ │ ├── tailscale.md │ │ ├── temporal.md │ │ ├── tideways.md │ │ ├── trafficserver.md │ │ ├── typesense.md │ │ ├── varnish.md │ │ ├── vault.md │ │ └── wiremock.md ├── inputs.md ├── integrations │ ├── .nav.yml │ ├── android.md │ ├── codespaces-devcontainer.md │ ├── delta.md │ ├── devenv-container.md │ ├── difftastic.md │ ├── dotenv.md │ ├── github-actions.md │ └── wordpress.md ├── javascript │ ├── extra.js │ └── highlight.min.js ├── languages.md ├── outputs.md ├── overlays.md ├── overrides │ ├── home.html │ └── main.html ├── packages.md ├── processes.md ├── reference │ ├── options.md │ └── yaml-options.md ├── scripts.md ├── services.md ├── snippets │ ├── languages-all.md │ └── services-all.md ├── supported-languages │ ├── ansible.md │ ├── c.md │ ├── clojure.md │ ├── cplusplus.md │ ├── crystal.md │ ├── cue.md │ ├── dart.md │ ├── deno.md │ ├── dotnet.md │ ├── elixir.md │ ├── elm.md │ ├── erlang.md │ ├── fortran.md │ ├── gawk.md │ ├── gleam.md │ ├── go.md │ ├── haskell.md │ ├── idris.md │ ├── java.md │ ├── javascript.md │ ├── jsonnet.md │ ├── julia.md │ ├── kotlin.md │ ├── lean4.md │ ├── lua.md │ ├── nim.md │ ├── nix.md │ ├── ocaml.md │ ├── odin.md │ ├── opentofu.md │ ├── pascal.md │ ├── perl.md │ ├── php.md │ ├── purescript.md │ ├── python.md │ ├── r.md │ ├── racket.md │ ├── raku.md │ ├── robotframework.md │ ├── ruby.md │ ├── rust.md │ ├── scala.md │ ├── shell.md │ ├── solidity.md │ ├── standardml.md │ ├── swift.md │ ├── terraform.md │ ├── texlive.md │ ├── typescript.md │ ├── typst.md │ ├── unison.md │ ├── v.md │ ├── vala.md │ └── zig.md ├── supported-process-managers │ ├── hivemind.md │ ├── honcho.md │ ├── mprocs.md │ ├── overmind.md │ └── process-compose.md ├── supported-services │ ├── adminer.md │ ├── blackfire.md │ ├── caddy.md │ ├── cassandra.md │ ├── clickhouse.md │ ├── cockroachdb.md │ ├── couchdb.md │ ├── dynamodb-local.md │ ├── elasticmq.md │ ├── elasticsearch.md │ ├── httpbin.md │ ├── influxdb.md │ ├── kafka.md │ ├── keycloak.md │ ├── mailhog.md │ ├── mailpit.md │ ├── meilisearch.md │ ├── memcached.md │ ├── minio.md │ ├── mongodb.md │ ├── mysql.md │ ├── nginx.md │ ├── opensearch.md │ ├── opentelemetry-collector.md │ ├── postgres.md │ ├── prometheus.md │ ├── rabbitmq.md │ ├── redis.md │ ├── sqld.md │ ├── tailscale.md │ ├── temporal.md │ ├── tideways.md │ ├── trafficserver.md │ ├── typesense.md │ ├── varnish.md │ ├── vault.md │ └── wiremock.md ├── tasks.md └── tests.md ├── examples ├── .gitignore ├── android │ ├── .patch.sh │ ├── devenv.nix │ └── devenv.yaml ├── aws-vault │ └── devenv.nix ├── caddy-php │ └── devenv.nix ├── clickhouse │ ├── .test.sh │ └── devenv.nix ├── cockroachdb │ ├── devenv.nix │ └── devenv.yaml ├── compose │ ├── devenv.nix │ ├── devenv.yaml │ ├── projectA │ │ └── devenv.nix │ └── projectB │ │ ├── devenv.nix │ │ └── devenv.yaml ├── couchdb │ └── devenv.nix ├── dynamodb-local │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── elasticmq │ ├── .test.sh │ └── devenv.nix ├── fly.io │ ├── .test.sh │ ├── README.md │ ├── devenv.nix │ ├── devenv.yaml │ ├── fly.toml │ └── hello.py ├── gleam │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── go │ ├── default.nix │ ├── devenv.nix │ └── devenv.yaml ├── hivemind │ └── devenv.nix ├── httpbin │ ├── .test.sh │ └── devenv.nix ├── imports │ ├── .test.sh │ ├── devenv.nix │ ├── devenv.yaml │ ├── file.nix │ └── folder │ │ └── devenv.nix ├── influxdb │ ├── .test.sh │ └── devenv.nix ├── javascript-bun │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ └── package.json ├── javascript-yarn │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ └── package.json ├── javascript │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ └── package.json ├── jsonnet │ ├── .test.sh │ └── devenv.nix ├── lean4 │ ├── .gitignore │ ├── .test.sh │ └── devenv.nix ├── mailpit │ ├── .test.sh │ └── devenv.nix ├── meilisearch │ └── devenv.nix ├── minio │ ├── .test.sh │ └── devenv.nix ├── mkcert │ └── devenv.nix ├── modern-c │ ├── README.md │ └── devenv.nix ├── mongodb │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── mysql │ ├── .test.sh │ └── devenv.nix ├── nginx │ └── devenv.nix ├── nur │ ├── .envrc │ ├── devenv.nix │ └── devenv.yaml ├── opentelemetry-collector │ ├── .test.sh │ └── devenv.nix ├── overlays │ ├── devenv.nix │ ├── devenv.yaml │ └── subflake │ │ └── flake.nix ├── overmind │ └── devenv.nix ├── phoenix │ ├── .gitignore │ ├── .setup.sh │ ├── .test.sh │ ├── README.md │ └── devenv.nix ├── postgres-timescale │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── postgres │ ├── .test.sh │ └── devenv.nix ├── process-compose │ └── devenv.nix ├── python-django │ ├── .gitignore │ ├── README.md │ ├── devenv.nix │ ├── devenv.yaml │ ├── manage.py │ ├── myapp │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── migrations │ │ │ └── __init__.py │ │ └── tests.py │ ├── myproject │ │ ├── __init__.py │ │ ├── asgi.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ ├── poetry.lock │ └── pyproject.toml ├── python-poetry │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ ├── devenv.yaml │ ├── poetry.lock │ └── pyproject.toml ├── python-venv │ ├── .gitignore │ ├── .test.sh │ ├── README.md │ └── devenv.nix ├── python │ ├── .test.sh │ ├── devenv.nix │ ├── devenv.yaml │ └── requirements.txt ├── r │ └── devenv.nix ├── rabbitmq │ ├── .test.sh │ └── devenv.nix ├── racket │ ├── .patch.sh │ └── devenv.nix ├── ruby │ ├── .ruby-version │ ├── .test.sh │ ├── Gemfile │ ├── Gemfile.lock │ ├── devenv.nix │ └── devenv.yaml ├── rubyonrails │ ├── .gitignore │ ├── .setup.sh │ ├── .test.sh │ ├── README.md │ ├── devenv.nix │ └── devenv.yaml ├── rust-wasm-cross │ ├── .test.js │ ├── .test.sh │ ├── Cargo.lock │ ├── Cargo.toml │ ├── devenv.nix │ ├── devenv.yaml │ └── src │ │ └── lib.rs ├── rust │ ├── .test.sh │ ├── app │ │ ├── Cargo.lock │ │ ├── Cargo.toml │ │ └── src │ │ │ └── main.rs │ ├── devenv.nix │ └── devenv.yaml ├── scala │ └── devenv.nix ├── scripts │ ├── README.md │ └── devenv.nix ├── shell │ ├── .test.sh │ └── devenv.nix ├── simple-remote │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── simple │ ├── .envrc │ ├── .gitignore │ ├── devenv.nix │ └── devenv.yaml ├── solidity │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── starship │ ├── devenv.nix │ └── starship.toml ├── supported-languages │ ├── .envrc │ ├── .patch.sh │ ├── devenv.nix │ └── devenv.yaml ├── temporal │ ├── .test.sh │ └── devenv.nix ├── terraform │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── texlive │ ├── .test.sh │ └── devenv.nix ├── trafficserver │ ├── .test.sh │ └── devenv.nix ├── vala │ └── devenv.nix ├── varnish │ ├── .test.sh │ └── devenv.nix ├── vault │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml └── wiremock │ └── devenv.nix ├── filterOptions.nix ├── flake-module.nix ├── flake.lock ├── flake.nix ├── http-client-tls ├── Cargo.toml └── src │ └── http_client_tls.rs ├── logos ├── .DS_Store ├── devenv-dark-bg.svg ├── devenv-github.png ├── devenv-horizontal-dark-bg.svg ├── devenv-horizontal-light-bg.svg ├── devenv-light-bg.svg ├── devenv-light-horizontal.png ├── devenv-light-vertical.png └── favicons │ ├── .DS_Store │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ └── favicon.ico ├── mkdocs.yml ├── nix-conf-parser ├── Cargo.toml └── src │ └── lib.rs ├── package-lock.json ├── package.json ├── package.nix ├── postcss.config.js ├── requirements.in ├── requirements.txt ├── shell.nix ├── src ├── devenv-devShell.nix ├── modules │ ├── cachix.nix │ ├── containers.nix │ ├── debug.nix │ ├── files.nix │ ├── flake.nix │ ├── info.nix │ ├── integrations │ │ ├── android.nix │ │ ├── aws-vault.nix │ │ ├── delta.nix │ │ ├── devcontainer.nix │ │ ├── difftastic.nix │ │ ├── dotenv.nix │ │ ├── git-hooks.nix │ │ ├── hostctl.nix │ │ ├── mkcert.nix │ │ └── starship.nix │ ├── languages │ │ ├── ansible.nix │ │ ├── c.nix │ │ ├── clojure.nix │ │ ├── cplusplus.nix │ │ ├── crystal.nix │ │ ├── cue.nix │ │ ├── dart.nix │ │ ├── deno.nix │ │ ├── dotnet.nix │ │ ├── elixir.nix │ │ ├── elm.nix │ │ ├── erlang.nix │ │ ├── fortran.nix │ │ ├── gawk.nix │ │ ├── gleam.nix │ │ ├── go.nix │ │ ├── haskell.nix │ │ ├── idris.nix │ │ ├── java.nix │ │ ├── javascript.nix │ │ ├── jsonnet.nix │ │ ├── julia.nix │ │ ├── kotlin.nix │ │ ├── lean4.nix │ │ ├── lua.nix │ │ ├── nim.nix │ │ ├── nix.nix │ │ ├── ocaml.nix │ │ ├── odin.nix │ │ ├── opentofu.nix │ │ ├── pascal.nix │ │ ├── perl.nix │ │ ├── php.nix │ │ ├── purescript.nix │ │ ├── python.nix │ │ ├── r.nix │ │ ├── racket.nix │ │ ├── raku.nix │ │ ├── robotframework.nix │ │ ├── ruby.nix │ │ ├── rust.nix │ │ ├── scala.nix │ │ ├── shell.nix │ │ ├── solidity.nix │ │ ├── standardml.nix │ │ ├── swift.nix │ │ ├── terraform.nix │ │ ├── texlive.nix │ │ ├── typescript.nix │ │ ├── typst.nix │ │ ├── unison.nix │ │ ├── v.nix │ │ ├── vala.nix │ │ └── zig.nix │ ├── latest-version │ ├── lib.nix │ ├── outputs.nix │ ├── process-managers │ │ ├── hivemind.nix │ │ ├── honcho.nix │ │ ├── mprocs.nix │ │ ├── overmind.nix │ │ └── process-compose.nix │ ├── processes.nix │ ├── scripts.nix │ ├── services │ │ ├── adminer.nix │ │ ├── blackfire.nix │ │ ├── caddy.nix │ │ ├── cassandra.nix │ │ ├── clickhouse.nix │ │ ├── cockroachdb.nix │ │ ├── couchdb.nix │ │ ├── dynamodb-local.nix │ │ ├── elasticmq.nix │ │ ├── elasticsearch.nix │ │ ├── httpbin.nix │ │ ├── influxdb.nix │ │ ├── kafka-connect.nix │ │ ├── kafka.nix │ │ ├── keycloak.nix │ │ ├── mailhog.nix │ │ ├── mailpit.nix │ │ ├── meilisearch.nix │ │ ├── memcached.nix │ │ ├── minio.nix │ │ ├── mongodb.nix │ │ ├── mysql.nix │ │ ├── nginx.nix │ │ ├── opensearch.nix │ │ ├── opentelemetry-collector.nix │ │ ├── postgres.nix │ │ ├── prometheus.nix │ │ ├── rabbitmq.nix │ │ ├── redis.nix │ │ ├── sqld.nix │ │ ├── tailscale.nix │ │ ├── temporal.nix │ │ ├── tideways.nix │ │ ├── trafficserver │ │ │ ├── default.nix │ │ │ ├── ip_allow.json │ │ │ ├── logging.json │ │ │ └── update.sh │ │ ├── typesense.nix │ │ ├── varnish.nix │ │ ├── vault.nix │ │ └── wiremock.nix │ ├── tasks.nix │ ├── tests.nix │ ├── top-level.nix │ └── update-check.nix └── python-wrapper.nix ├── tailwind.config.js ├── templates ├── flake-parts │ ├── .envrc │ ├── .gitignore │ └── flake.nix ├── simple │ ├── .envrc │ ├── .gitignore │ └── flake.nix └── terraform │ ├── .envrc │ ├── .gitignore │ └── flake.nix ├── tests ├── .gitignore ├── clean │ ├── devenv.nix │ └── devenv.yaml ├── cli-options │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── cli │ ├── .test.sh │ ├── devenv.nix │ └── devenv.yaml ├── direnv │ ├── .test.sh │ └── devenv.nix ├── dotenv │ ├── .setup.sh │ ├── .test.sh │ └── devenv.nix ├── exit-code │ ├── .test.sh │ └── devenv.nix ├── files │ ├── .test.sh │ └── devenv.nix ├── git-hooks-all-disabled │ ├── .setup.sh │ └── devenv.nix ├── git-hooks-no-python-leak │ └── devenv.nix ├── gitignore │ ├── .setup.sh │ ├── .test.sh │ └── devenv.nix ├── glibcLocales │ └── devenv.nix ├── impure │ ├── devenv.nix │ └── devenv.yaml ├── javascript-directory │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ └── directory │ │ └── package.json ├── javascript-pnpm │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ └── package.json ├── kafka-connect │ ├── .test.sh │ └── devenv.nix ├── kafka │ ├── .test.sh │ └── devenv.nix ├── keycloak-certs │ ├── .test.sh │ ├── README.md │ ├── certs │ │ ├── ssl-cert.crt │ │ └── ssl-cert.key │ ├── devenv.nix │ └── realms ├── keycloak │ ├── .test.sh │ ├── devenv.nix │ └── realms │ │ ├── master.json │ │ └── test.json ├── macos-custom-apple-sdk │ └── devenv.nix ├── macos-no-default-sdk │ └── devenv.nix ├── meilisearch │ └── devenv.nix ├── mysql │ ├── .test.sh │ └── devenv.nix ├── outputs │ └── devenv.nix ├── perl │ └── devenv.nix ├── postgres-pghost │ ├── .test.sh │ └── devenv.nix ├── postgresql-customdbuser │ ├── .test.sh │ ├── devenv.nix │ └── testinitdb.sql ├── postgresql-customperdbinit │ ├── .test.sh │ └── devenv.nix ├── postgresql-localhost │ ├── .test.sh │ └── devenv.nix ├── prometheus │ ├── .test.sh │ └── devenv.nix ├── python-directory │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ ├── devenv.yaml │ └── directory │ │ └── pyproject.toml ├── python-native-libs-poetry │ ├── .test.sh │ ├── devenv.nix │ └── subdir │ │ ├── poetry.lock │ │ └── pyproject.toml ├── python-native-libs-uv │ ├── .test.sh │ └── devenv.nix ├── python-native-libs │ ├── .test.sh │ └── devenv.nix ├── python-uv-sync │ ├── .gitignore │ ├── .test.sh │ ├── devenv.nix │ ├── devenv.yaml │ └── directory │ │ ├── pyproject.toml │ │ └── uv.lock ├── redis-socket │ ├── .test.sh │ └── devenv.nix ├── rust │ └── devenv.nix ├── sqld │ ├── .test.sh │ └── devenv.nix ├── tasks │ ├── .gitignore │ └── devenv.nix ├── unversioned-devenv-nix │ ├── .gitignore │ ├── .patch.sh │ └── .test.sh └── up-uses-shell │ └── devenv.nix └── xtask ├── Cargo.toml └── src ├── lib.rs ├── main.rs ├── manpage.rs └── shell_completion.rs /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [alias] 2 | xtask = "run --package xtask --" 3 | -------------------------------------------------------------------------------- /.devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "customizations": { 3 | "vscode": { 4 | "extensions": [ 5 | "jnoortheen.nix-ide" 6 | ] 7 | } 8 | }, 9 | "image": "ghcr.io/cachix/devenv/devcontainer:latest", 10 | "overrideCommand": false, 11 | "updateContentCommand": "devenv test" 12 | } 13 | -------------------------------------------------------------------------------- /.envrc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # ^ for code highlighting 3 | # Used by https://direnv.net 4 | set -euo pipefail 5 | 6 | # External users should eval `devenv direnvrc` or use `source_url` to load this file 7 | source_env ./devenv/direnvrc 8 | 9 | # Use our own last built devenv/nix in CLI 10 | log_status "building dev devenv..." 11 | nix build --print-out-paths --accept-flake-config || log_status "nix build failed, using previous build" 12 | PATH_add "result/bin" 13 | 14 | log_status "evaluating shell..." 15 | use devenv 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve devenv 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To reproduce** 14 | Please provide an [Short, Self Contained, Correct (Compilable), Example](http://sscce.org) by [creating a gist](https://gist.github.com/) using `devenv.nix`, `devenv.yaml`, and optionally `devenv.lock`. 15 | 16 | Make sure to include full logs and what you expected to happen. 17 | 18 | **Version** 19 | 20 | Paste the output of `$ devenv version` here or tell us if you're using flakes. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/enhancement.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Enhancement 3 | about: What would you like devenv to do? 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question 4 | title: '' 5 | labels: question 6 | assignees: '' 7 | 8 | --- 9 | 10 | See https://devenv.sh/community/get-involved/ for how to get in contact with the community. 11 | 12 | Feel free to also post a question here. 13 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ], 6 | "nix": { 7 | "enabled": true 8 | }, 9 | "lockFileMaintenance": { 10 | "enabled": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/workflows/auto-tag-latest.yml: -------------------------------------------------------------------------------- 1 | name: "Latest tag" 2 | on: 3 | push: 4 | tags: 5 | - v** 6 | jobs: 7 | latest-tag: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - name: Update 'latest' git tag 12 | uses: EndBug/latest-tag@latest 13 | -------------------------------------------------------------------------------- /.github/workflows/buildtest.yml: -------------------------------------------------------------------------------- 1 | name: "Build & Test" 2 | 3 | on: 4 | pull_request: 5 | paths-ignore: 6 | - "docs/**" 7 | - "mkdocs.yml" 8 | - "requirements.in" 9 | - "requirements.txt" 10 | 11 | concurrency: 12 | group: ${{ github.workflow }}-${{ github.ref }} 13 | cancel-in-progress: true 14 | 15 | jobs: 16 | build: 17 | uses: ./.github/workflows/build.yml 18 | secrets: inherit 19 | 20 | test: 21 | needs: build 22 | uses: ./.github/workflows/test.yml 23 | secrets: inherit 24 | -------------------------------------------------------------------------------- /.github/workflows/publish-flake.yml: -------------------------------------------------------------------------------- 1 | name: "Publish a flake to flakestry" 2 | on: 3 | push: 4 | tags: 5 | - "v?[0-9]+.[0-9]+.[0-9]+" 6 | - "v?[0-9]+" 7 | workflow_dispatch: 8 | inputs: 9 | tag: 10 | description: "The existing tag to publish" 11 | type: "string" 12 | required: true 13 | jobs: 14 | publish-flake: 15 | runs-on: ubuntu-latest 16 | permissions: 17 | id-token: "write" 18 | contents: "read" 19 | steps: 20 | - uses: flakestry/flakestry-publish@main 21 | with: 22 | version: "${{ inputs.tag || github.ref_name }}" -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: "Release" 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags: 8 | - v* 9 | workflow_dispatch: 10 | 11 | concurrency: 12 | group: "release" 13 | cancel-in-progress: false 14 | 15 | jobs: 16 | build: 17 | uses: ./.github/workflows/build.yml 18 | secrets: inherit 19 | 20 | test: 21 | needs: build 22 | uses: ./.github/workflows/test.yml 23 | secrets: inherit 24 | 25 | pin: 26 | needs: build 27 | if: startsWith(github.ref, 'refs/tags/v') 28 | uses: ./.github/workflows/pin.yml 29 | secrets: inherit 30 | 31 | containers: 32 | needs: build 33 | uses: ./.github/workflows/containers.yml 34 | secrets: inherit 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Nix & devenv 2 | result 3 | .env 4 | .env.* 5 | .devenv* 6 | .direnv* 7 | /.cache 8 | /.pre-commit-config.yaml 9 | man 10 | 11 | # mkdocs 12 | site/ 13 | 14 | # examples 15 | examples/rust/app/target 16 | 17 | # Rust 18 | target 19 | 20 | # JavaScript 21 | /node_modules 22 | 23 | **/.claude/settings.local.json 24 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - command: | 3 | cachix use devenv 4 | nix build --accept-flake-config 5 | ./result/bin/devenv shell true 6 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | ### Release on GitHub 2 | 3 | - Update `devenv_nix` if necessary and run all tests 4 | - Tag a new release using https://github.com/cachix/devenv/releases/new 5 | 6 | ### Release on nixpkgs 7 | 8 | - Sync the `package.nix` in nixpkgs with [./package.nix](./package.nix) and bump `devenv_nix` if necessary 9 | 10 | ### After nixpkgs release 11 | 12 | - Write a blog post 13 | -------------------------------------------------------------------------------- /_redirects: -------------------------------------------------------------------------------- 1 | /blog/2023/03/20/devenv-10-rewrite-in-rust/ /blog/2024/03/20/devenv-10-rewrite-in-rust/ 301 2 | /blog/2024/10/22/devenv-is-switching-nix-implementation-to-tvix/ /blog/2024/10/22/devenv-is-switching-its-nix-implementation-to-tvix/ 301 3 | /pre-commit-hooks/ /git-hooks/ 301 4 | /roadmap/ /blog/2024/10/22/devenv-is-switching-its-nix-implementation-to-tvix/ 302 5 | -------------------------------------------------------------------------------- /build_cloudflare.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -xe 4 | pip install -r requirements.txt 5 | mkdocs build 6 | cp _redirects site/ 7 | -------------------------------------------------------------------------------- /containers/devcontainer/nix.conf: -------------------------------------------------------------------------------- 1 | experimental-features = nix-command flakes 2 | filter-syscalls = false 3 | max-jobs = auto 4 | sandbox = false 5 | trusted-users = root vscode 6 | -------------------------------------------------------------------------------- /containers/devenv/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nixos/nix:latest@sha256:3bb728719e2c4e478df4c50b80f93adbe27d5c561d1417c3a2306eb914d910da 2 | 3 | ARG CACHIX_VERSION=v1 4 | ARG DEVENV_VERSION=latest 5 | 6 | # https://github.com/NixOS/nix/issues/5258 7 | RUN echo "filter-syscalls = false" >> /etc/nix/nix.conf 8 | 9 | # Use devenv cache for faster installation 10 | RUN nix-env -iA cachix -f https://cachix.org/api/$CACHIX_VERSION/install && cachix use devenv 11 | 12 | RUN nix-env -if https://github.com/cachix/devenv/tarball/$DEVENV_VERSION 13 | 14 | # Remove devenv cache and cachix for cleaner image 15 | RUN cachix remove devenv && nix-env -e cachix 16 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | (import 2 | ( 3 | let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in 4 | fetchTarball { 5 | url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; 6 | sha256 = lock.nodes.flake-compat.locked.narHash; 7 | } 8 | ) 9 | { src = ./.; } 10 | ).defaultNix 11 | -------------------------------------------------------------------------------- /devenv-cache-core/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! # devenv-cache-core 2 | //! 3 | //! Core utilities for file tracking and caching in devenv. 4 | //! 5 | //! This library provides shared functionality that can be used by both 6 | //! the task cache and eval cache implementations, including: 7 | //! 8 | //! - File hashing and change detection 9 | //! - SQLite database utilities 10 | //! - Time conversion utilities 11 | //! - Common error types 12 | 13 | pub mod db; 14 | pub mod error; 15 | pub mod file; 16 | pub mod time; 17 | 18 | // Re-export common types for convenience 19 | pub use db::Database; 20 | pub use error::{CacheError, CacheResult}; 21 | pub use file::{compute_file_hash, compute_string_hash, TrackedFile}; 22 | -------------------------------------------------------------------------------- /devenv-eval-cache/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "devenv-eval-cache" 3 | version.workspace = true 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | blake3.workspace = true 9 | futures.workspace = true 10 | lazy_static.workspace = true 11 | miette.workspace = true 12 | regex.workspace = true 13 | serde.workspace = true 14 | serde_json.workspace = true 15 | serde_repr.workspace = true 16 | sqlx.workspace = true 17 | thiserror.workspace = true 18 | tokio.workspace = true 19 | tracing.workspace = true 20 | devenv-cache-core.workspace = true 21 | 22 | [dev-dependencies] 23 | tempfile.workspace = true 24 | -------------------------------------------------------------------------------- /devenv-eval-cache/migrations/20241210011111_create-env-input.sql: -------------------------------------------------------------------------------- 1 | -- Rename table for file inputs 2 | ALTER TABLE file_path 3 | RENAME TO file_input; 4 | 5 | ALTER TABLE cmd_input_path 6 | RENAME COLUMN file_path_id TO file_input_id; 7 | 8 | CREATE TABLE env_input ( 9 | id INTEGER NOT NULL PRIMARY KEY, 10 | cached_cmd_id INTEGER NOT NULL, 11 | name TEXT NOT NULL, 12 | content_hash CHAR(64) NOT NULL, 13 | updated_at INTEGER NOT NULL DEFAULT (strftime ('%s', 'now')), 14 | FOREIGN KEY (cached_cmd_id) REFERENCES cached_cmd (id) ON DELETE CASCADE, 15 | UNIQUE (cached_cmd_id, name) 16 | ); 17 | -------------------------------------------------------------------------------- /devenv-eval-cache/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod command; 2 | pub mod db; 3 | pub mod internal_log; 4 | pub mod op; 5 | 6 | pub use command::{ 7 | supports_eval_caching, CachedCommand, EnvInputDesc, FileInputDesc, Input, Output, 8 | }; 9 | -------------------------------------------------------------------------------- /devenv-generate/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "devenv-generate" 3 | version.workspace = true 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | devenv.workspace = true 9 | http-client-tls.workspace = true 10 | 11 | binaryornot.workspace = true 12 | clap = { workspace = true, features = ["derive"] } 13 | dialoguer.workspace = true 14 | indoc.workspace = true 15 | miette.workspace = true 16 | reqwest.workspace = true 17 | serde.workspace = true 18 | serde_json.workspace = true 19 | tokio = { workspace = true, features = ["full"] } 20 | tokio-tar.workspace = true 21 | tracing.workspace = true 22 | tokio-util.workspace = true 23 | similar.workspace = true 24 | -------------------------------------------------------------------------------- /devenv-run-tests/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "devenv-run-tests" 3 | version.workspace = true 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | clap.workspace = true 9 | devenv.workspace = true 10 | tempfile.workspace = true 11 | tokio.workspace = true 12 | miette.workspace = true 13 | -------------------------------------------------------------------------------- /devenv-tasks/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "devenv-tasks" 3 | version.workspace = true 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | clap.workspace = true 9 | console.workspace = true 10 | eyre.workspace = true 11 | miette.workspace = true 12 | petgraph.workspace = true 13 | serde.workspace = true 14 | serde_json.workspace = true 15 | tempfile.workspace = true 16 | thiserror.workspace = true 17 | tokio.workspace = true 18 | tracing.workspace = true 19 | sqlx.workspace = true 20 | blake3.workspace = true 21 | walkdir = "2.4.0" 22 | devenv-cache-core.workspace = true 23 | shell-escape.workspace = true 24 | 25 | [dev-dependencies] 26 | pretty_assertions.workspace = true 27 | -------------------------------------------------------------------------------- /devenv.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=./docs/devenv.schema.json 2 | inputs: 3 | nixpkgs: 4 | url: github:NixOS/nixpkgs/nixpkgs-unstable 5 | fenix: 6 | url: github:nix-community/fenix 7 | inputs: 8 | nixpkgs: 9 | follows: nixpkgs 10 | nix: 11 | url: github:domenkozar/nix/devenv-2.24 12 | devenv: 13 | url: path:.?dir=src/modules 14 | -------------------------------------------------------------------------------- /devenv/init/.envrc: -------------------------------------------------------------------------------- 1 | export DIRENV_WARN_TIMEOUT=20s 2 | 3 | eval "$(devenv direnvrc)" 4 | 5 | # The use_devenv function supports passing flags to the devenv command 6 | # For example: use devenv --impure --option services.postgres.enable:bool true 7 | use devenv 8 | -------------------------------------------------------------------------------- /devenv/init/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # direnv 6 | .direnv 7 | 8 | # pre-commit 9 | .pre-commit-config.yaml 10 | -------------------------------------------------------------------------------- /devenv/init/devenv.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://devenv.sh/devenv.schema.json 2 | inputs: 3 | nixpkgs: 4 | url: github:cachix/devenv-nixpkgs/rolling 5 | 6 | # If you're using non-OSS software, you can set allowUnfree to true. 7 | # allowUnfree: true 8 | 9 | # If you're willing to use a package that's vulnerable 10 | # permittedInsecurePackages: 11 | # - "openssl-1.1.1w" 12 | 13 | # If you have more than one devenv you can merge them 14 | #imports: 15 | # - ./backend 16 | -------------------------------------------------------------------------------- /devenv/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod cli; 2 | pub(crate) mod cnix; 3 | pub mod config; 4 | mod devenv; 5 | pub mod log; 6 | mod util; 7 | 8 | pub use cli::{default_system, GlobalOptions}; 9 | pub use devenv::{Devenv, DevenvOptions, ProcessOptions, DIRENVRC, DIRENVRC_VERSION}; 10 | pub use devenv_tasks as tasks; 11 | -------------------------------------------------------------------------------- /docs/assets/devenv-preview.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/devenv-preview.tar.gz -------------------------------------------------------------------------------- /docs/assets/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/assets/images/caching.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/caching.gif -------------------------------------------------------------------------------- /docs/assets/images/cachix.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/cachix.webp -------------------------------------------------------------------------------- /docs/assets/images/chasm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/chasm.webp -------------------------------------------------------------------------------- /docs/assets/images/nixcon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/nixcon.webp -------------------------------------------------------------------------------- /docs/assets/images/process-compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/process-compose.png -------------------------------------------------------------------------------- /docs/assets/images/tasks.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/tasks.gif -------------------------------------------------------------------------------- /docs/assets/images/thailand.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/images/thailand.jpg -------------------------------------------------------------------------------- /docs/assets/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/assets/logo.webp -------------------------------------------------------------------------------- /docs/blog/.authors.yml: -------------------------------------------------------------------------------- 1 | authors: 2 | domenkozar: 3 | name: Domen Kožar 4 | description: Maintainer 5 | avatar: https://github.com/domenkozar.png 6 | sandydoo: 7 | name: Sander 8 | description: Maintainer 9 | avatar: https://github.com/sandydoo.png 10 | -------------------------------------------------------------------------------- /docs/blog/index.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/docs/blog/index.md -------------------------------------------------------------------------------- /docs/community/get-involved.md: -------------------------------------------------------------------------------- 1 | Join our community on [Discord](https://discord.gg/naMgvexb6q) or [Matrix](https://matrix.to/#/!plrRoZsBTUYBWzvzIq:matrix.org?via=matrix.org) to get help using devenv. 2 | -------------------------------------------------------------------------------- /docs/editor-support/.nav.yml: -------------------------------------------------------------------------------- 1 | nav: 2 | - VSCode: vscode.md 3 | - PhpStorm/Intellij/PyCharm: intellij.md 4 | - Zed: zed.md 5 | -------------------------------------------------------------------------------- /docs/editor-support/intellij.md: -------------------------------------------------------------------------------- 1 | It is recommend to use [automatic shell activation](../automatic-shell-activation.md) with the plugin [Devenv.​sh Support](https://plugins.jetbrains.com/plugin/23136-devenv-sh-support). 2 | 3 | There's first-class support for PHP development. 4 | -------------------------------------------------------------------------------- /docs/editor-support/vscode.md: -------------------------------------------------------------------------------- 1 | It's best to use [automatic shell activation](../automatic-shell-activation.md) with [direnv extension](https://marketplace.visualstudio.com/items?itemName=mkhl.direnv). 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/editor-support/zed.md: -------------------------------------------------------------------------------- 1 | Upvote [Zed issue for direnv support](https://github.com/zed-industries/zed/issues/4977). 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/examples.md: -------------------------------------------------------------------------------- 1 | There are a few examples [in the devenv repository](https://github.com/cachix/devenv/tree/main/examples). 2 | 3 | [The devenv project itself uses devenv, which serves as an example](https://github.com/cachix/devenv/blob/main/devenv.nix). 4 | 5 | If you're searching for an example but can't find it, [let us know](https://github.com/cachix/devenv/issues/12). 6 | -------------------------------------------------------------------------------- /docs/garbage-collection.md: -------------------------------------------------------------------------------- 1 | # Garbage collection 2 | 3 | `devenv` involves optimizing disk space utilization through the creation of garbage collection roots for each activated developer environment, which is especially beneficial when switching between branches. 4 | 5 | This is based on the premise that disk space is inexpensive and can be better utilized by creating a root for each environment. The garbage collection process can be initiated by running the command `devenv gc` when it is deemed necessary to free up space. 6 | 7 | Running ``devenv gc`` will go through everything you've built so far 8 | and delete anything that's currently not the latest successful invocation 9 | of any ``devenv`` command per folder. 10 | -------------------------------------------------------------------------------- /docs/guides/.nav.yml: -------------------------------------------------------------------------------- 1 | nav: 2 | - Profiles: profiles.md 3 | - Using with Flakes: using-with-flakes.md 4 | - Using with flake.parts: using-with-flake-parts.md 5 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | template: home.html 3 | title: Fast, Declarative, Reproducible, and Composable Developer Environments 4 | --- 5 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/ansible.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/c.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/clojure.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/cplusplus.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/crystal.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/cue.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/dart.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/deno.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/dotnet.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/elixir.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/elm.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/erlang.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/fortran.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/gawk.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/gleam.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/go.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/haskell.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/idris.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/java.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/javascript.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/jsonnet.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/julia.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/kotlin.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/lean4.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/lua.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/nim.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/nix.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/ocaml.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/odin.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/opentofu.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/pascal.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/perl.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/php.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/purescript.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/python.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/r.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/racket.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/raku.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/robotframework.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/ruby.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/rust.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/scala.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/shell.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/solidity.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/standardml.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/swift.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/terraform.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/texlive.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/typescript.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/typst.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/unison.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/v.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/vala.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/languages/zig.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/process-managers/hivemind.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/process-managers/honcho.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/process-managers/mprocs.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/process-managers/overmind.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/process-managers/process-compose.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/adminer.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/blackfire.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/caddy.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/cassandra.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/clickhouse.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/cockroachdb.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/couchdb.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/dynamodb-local.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/elasticmq.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/elasticsearch.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/httpbin.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/influxdb.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/kafka-connect.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/kafka.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/keycloak.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/mailhog.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/mailpit.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/meilisearch.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/memcached.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/minio.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/mongodb.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/mysql.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/nginx.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/opensearch.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/opentelemetry-collector.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/postgres.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/prometheus.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/rabbitmq.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/redis.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/sqld.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/tailscale.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/temporal.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/tideways.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/trafficserver.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/typesense.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/varnish.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/vault.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/individual-docs/services/wiremock.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [comment]: # (Please add your documentation on top of this line) 4 | 5 | @AUTOGEN_OPTIONS@ 6 | -------------------------------------------------------------------------------- /docs/integrations/.nav.yml: -------------------------------------------------------------------------------- 1 | nav: 2 | - .env: dotenv.md 3 | - Android: android.md 4 | - Wordpress: wordpress.md 5 | - GitHub Actions: github-actions.md 6 | - Devenv Container: devenv-container.md 7 | - Codespaces / devcontainer: codespaces-devcontainer.md 8 | - Difftastic: difftastic.md 9 | - Delta: delta.md 10 | -------------------------------------------------------------------------------- /docs/integrations/codespaces-devcontainer.md: -------------------------------------------------------------------------------- 1 | To get started using [Codespaces](https://github.com/features/codespaces), flip a toggle: 2 | 3 | 4 | ```nix title="devenv.nix" 5 | { pkgs, ... }: 6 | 7 | { 8 | devcontainer.enable = true; 9 | } 10 | ``` 11 | 12 | Run ``devenv shell``. You should see an autogenerated `.devcontainer.json` file. 13 | 14 | 15 | Commit `.devcontainer.json` to the Git repository and push it. 16 | -------------------------------------------------------------------------------- /docs/integrations/delta.md: -------------------------------------------------------------------------------- 1 | To get started using [Delta, a syntax-highlighting pager for git, diff, and grep output](https://dandavison.github.io/delta/), flip a toggle: 2 | 3 | ```nix title="devenv.nix" 4 | { pkgs, ... }: 5 | 6 | { 7 | delta.enable = true; 8 | } 9 | ``` 10 | -------------------------------------------------------------------------------- /docs/integrations/difftastic.md: -------------------------------------------------------------------------------- 1 | To get started using [Difftastic, a structural diff that understands syntax for over 30 languages](https://difftastic.wilfred.me.uk/), flip a toggle: 2 | 3 | 4 | ```nix title="devenv.nix" 5 | { pkgs, ... }: 6 | 7 | { 8 | difftastic.enable = true; 9 | } 10 | ``` 11 | 12 | When you run `devenv shell` using `git diff`, you should see the following output: 13 | 14 | 15 | ![Screenshot of difftastic and JS](https://github.com/Wilfred/difftastic/raw/master/img/js.png) 16 | -------------------------------------------------------------------------------- /docs/integrations/dotenv.md: -------------------------------------------------------------------------------- 1 | [.env](https://github.com/motdotla/dotenv) files were introduced by Heroku in 2012. 2 | 3 | If you have a `.env`, you'll see instructions how to enable integration: 4 | 5 | ```nix title="devenv.nix" 6 | { 7 | dotenv.enable = true; 8 | 9 | # Optionally, you can choose which filename to load. 10 | # 11 | # dotenv.filename = ".env.production"; 12 | # or 13 | # dotenv.filename = [ ".env.production" ".env.development" ] 14 | } 15 | ``` 16 | 17 | When the developer environment is loaded, environment variables from `.env` will be loaded 18 | and set into `config.env`. 19 | 20 | Variables from `.env` are set using `lib.mkDefault`, meaning that any existing `env` variables set in `devenv.nix` will have priority over them. 21 | -------------------------------------------------------------------------------- /docs/javascript/extra.js: -------------------------------------------------------------------------------- 1 | document$.subscribe(() => { 2 | highlightCodeOnHomePage(); 3 | }); 4 | 5 | target$.subscribe(() => { 6 | highlightCodeOnHomePage(); 7 | }); 8 | 9 | function highlightCodeOnHomePage() { 10 | if (document.location.pathname === '/') { 11 | hljs.highlightAll(); 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /docs/supported-languages/ansible.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.ansible\.enable 7 | 8 | Whether to enable tools for Ansible development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.ansible\.package 28 | 29 | 30 | 31 | The Ansible package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.ansible ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/c.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.c\.enable 7 | 8 | 9 | 10 | Whether to enable tools for C development\. 11 | 12 | 13 | 14 | *Type:* 15 | boolean 16 | 17 | 18 | 19 | *Default:* 20 | ` false ` 21 | 22 | 23 | 24 | *Example:* 25 | ` true ` 26 | 27 | 28 | 29 | ## languages\.c\.debugger 30 | 31 | An optional debugger package to use with c\. 32 | The default is ` gdb `, if supported on the current system\. 33 | 34 | 35 | 36 | *Type:* 37 | null or package 38 | 39 | 40 | 41 | *Default:* 42 | ` pkgs.gdb ` 43 | -------------------------------------------------------------------------------- /docs/supported-languages/clojure.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.clojure\.enable 7 | 8 | Whether to enable tools for Clojure development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/cplusplus.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.cplusplus\.enable 7 | 8 | Whether to enable tools for C++ development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/crystal.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.crystal\.enable 7 | 8 | Whether to enable Enable tools for Crystal development… 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/cue.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.cue\.enable 7 | 8 | Whether to enable tools for Cue development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.cue\.package 28 | 29 | 30 | 31 | The CUE package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.cue ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/dart.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.dart\.enable 7 | 8 | Whether to enable tools for Dart development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.dart\.package 28 | 29 | 30 | 31 | The Dart package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.dart ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/deno.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.deno\.enable 7 | 8 | Whether to enable tools for Deno development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.deno\.package 28 | 29 | 30 | 31 | Which package of Deno to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.deno ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/dotnet.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.dotnet\.enable 7 | 8 | Whether to enable tools for \.NET development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.dotnet\.package 28 | 29 | 30 | 31 | The \.NET SDK package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.dotnet-sdk ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/elixir.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.elixir\.enable 7 | 8 | Whether to enable tools for Elixir development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.elixir\.package 28 | 29 | 30 | 31 | Which Elixir package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.elixir ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/elm.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.elm\.enable 7 | 8 | Whether to enable tools for Elm development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/erlang.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.erlang\.enable 7 | 8 | Whether to enable tools for Erlang development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.erlang\.package 28 | 29 | 30 | 31 | Which package of Erlang to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.erlang ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/fortran.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.fortran\.enable 7 | 8 | Whether to enable tools for Fortran Development… 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.fortran\.package 28 | 29 | 30 | 31 | The Fortran package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.gfortran ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/gawk.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.gawk\.enable 7 | 8 | Whether to enable tools for GNU Awk development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/gleam.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.gleam\.enable 7 | 8 | Whether to enable tools for Gleam development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.gleam\.package 28 | 29 | 30 | 31 | The Gleam package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.gleam ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/idris.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.idris\.enable 7 | 8 | Whether to enable tools for Idris development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.idris\.package 28 | 29 | 30 | 31 | The Idris package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.idris2 ` 42 | 43 | 44 | 45 | *Example:* 46 | ` pkgs.idris ` 47 | -------------------------------------------------------------------------------- /docs/supported-languages/jsonnet.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.jsonnet\.enable 7 | 8 | Whether to enable tools for jsonnet development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/julia.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.julia\.enable 7 | 8 | Whether to enable tools for Julia development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.julia\.package 28 | 29 | 30 | 31 | The Julia package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.julia-bin ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/kotlin.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.kotlin\.enable 7 | 8 | Whether to enable tools for Kotlin development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/lean4.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.lean4\.enable 7 | 8 | Whether to enable tools for lean4 development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.lean4\.package 28 | 29 | 30 | 31 | The lean4 package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.lean4 ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/lua.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.lua\.enable 7 | 8 | Whether to enable tools for Lua development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.lua\.package 28 | 29 | 30 | 31 | The Lua package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.lua ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/nim.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.nim\.enable 7 | 8 | Whether to enable tools for Nim development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.nim\.package 28 | 29 | 30 | 31 | The Nim package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.nim ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/nix.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.nix\.enable 7 | 8 | Whether to enable tools for Nix development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.nix\.lsp\.package 28 | 29 | 30 | 31 | The LSP package to use 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.nil ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/ocaml.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.ocaml\.enable 7 | 8 | Whether to enable tools for OCaml development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.ocaml\.packages 28 | 29 | 30 | 31 | The package set of OCaml to use 32 | 33 | 34 | 35 | *Type:* 36 | attribute set 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.ocaml-ng.ocamlPackages_4_12 ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/opentofu.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.opentofu\.enable 7 | 8 | Whether to enable tools for OpenTofu development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.opentofu\.package 28 | 29 | 30 | 31 | The OpenTofu package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.opentofu ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/pascal.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.pascal\.enable 7 | 8 | Whether to enable tools for Pascal development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.pascal\.lazarus\.enable 28 | 29 | 30 | 31 | Whether to enable lazarus graphical IDE for the FreePascal language\. 32 | 33 | 34 | 35 | *Type:* 36 | boolean 37 | 38 | 39 | 40 | *Default:* 41 | ` false ` 42 | 43 | 44 | 45 | *Example:* 46 | ` true ` 47 | -------------------------------------------------------------------------------- /docs/supported-languages/perl.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.perl\.enable 7 | 8 | Whether to enable tools for Perl development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.perl\.packages 28 | 29 | 30 | 31 | Perl packages to include 32 | 33 | 34 | 35 | *Type:* 36 | list of string 37 | 38 | 39 | 40 | *Default:* 41 | ` [ ] ` 42 | 43 | 44 | 45 | *Example:* 46 | 47 | ``` 48 | [ 49 | "Mojolicious" 50 | ] 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/supported-languages/purescript.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.purescript\.enable 7 | 8 | Whether to enable tools for PureScript development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.purescript\.package 28 | 29 | 30 | 31 | The PureScript package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.purescript ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/racket.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.racket\.enable 7 | 8 | Whether to enable tools for Racket development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.racket\.package 28 | 29 | 30 | 31 | The Racket package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.racket-minimal ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/raku.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.raku\.enable 7 | 8 | Whether to enable tools for Raku development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/robotframework.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.robotframework\.enable 7 | 8 | Whether to enable tools for Robot Framework development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.robotframework\.python 28 | 29 | 30 | 31 | The Python package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.python3 ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/shell.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.shell\.enable 7 | 8 | Whether to enable tools for shell development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/standardml.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.standardml\.enable 7 | 8 | Whether to enable tools for Standard ML development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.standardml\.package 28 | 29 | 30 | 31 | The Standard ML package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.mlton ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/swift.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.swift\.enable 7 | 8 | Whether to enable tools for Swift development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.swift\.package 28 | 29 | 30 | 31 | The Swift package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.swift ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/typescript.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.typescript\.enable 7 | 8 | Whether to enable tools for TypeScript development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | -------------------------------------------------------------------------------- /docs/supported-languages/unison.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.unison\.enable 7 | 8 | Whether to enable tools for Unison development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.unison\.package 28 | 29 | 30 | 31 | Which package of Unison to use 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.unison-ucm ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/v.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.v\.enable 7 | 8 | Whether to enable tools for V development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.v\.package 28 | 29 | 30 | 31 | The V package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.vlang ` 42 | -------------------------------------------------------------------------------- /docs/supported-languages/vala.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.vala\.enable 7 | 8 | Whether to enable tools for Vala development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.vala\.package 28 | 29 | 30 | 31 | The Vala package to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.vala ` 42 | 43 | 44 | 45 | *Example:* 46 | ` pkgs.vala_0_54 ` 47 | -------------------------------------------------------------------------------- /docs/supported-languages/zig.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## languages\.zig\.enable 7 | 8 | Whether to enable tools for Zig development\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## languages\.zig\.package 28 | 29 | 30 | 31 | Which package of Zig to use\. 32 | 33 | 34 | 35 | *Type:* 36 | package 37 | 38 | 39 | 40 | *Default:* 41 | ` pkgs.zig ` 42 | -------------------------------------------------------------------------------- /docs/supported-process-managers/hivemind.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## process\.managers\.hivemind\.package 7 | 8 | The hivemind package to use\. 9 | 10 | 11 | 12 | *Type:* 13 | package 14 | 15 | 16 | 17 | *Default:* 18 | ` pkgs.hivemind ` 19 | -------------------------------------------------------------------------------- /docs/supported-process-managers/honcho.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## process\.managers\.honcho\.package 7 | 8 | The honcho package to use\. 9 | 10 | 11 | 12 | *Type:* 13 | package 14 | 15 | 16 | 17 | *Default:* 18 | ` pkgs.honcho ` 19 | -------------------------------------------------------------------------------- /docs/supported-process-managers/mprocs.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## process\.managers\.mprocs\.package 7 | 8 | The mprocs package to use\. 9 | 10 | 11 | 12 | *Type:* 13 | package 14 | 15 | 16 | 17 | *Default:* 18 | ` pkgs.mprocs ` 19 | 20 | 21 | 22 | ## process\.managers\.mprocs\.settings 23 | 24 | 25 | 26 | Top-level mprocs\.yaml options 27 | 28 | https://github\.com/pvolok/mprocs?tab=readme-ov-file\#config 29 | 30 | 31 | 32 | *Type:* 33 | YAML value 34 | 35 | 36 | 37 | *Default:* 38 | ` { } ` 39 | -------------------------------------------------------------------------------- /docs/supported-process-managers/overmind.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## process\.managers\.overmind\.package 7 | 8 | The overmind package to use\. 9 | 10 | 11 | 12 | *Type:* 13 | package 14 | 15 | 16 | 17 | *Default:* 18 | ` pkgs.overmind ` 19 | -------------------------------------------------------------------------------- /docs/supported-services/tailscale.md: -------------------------------------------------------------------------------- 1 | [comment]: # (Do not edit this file as it is autogenerated. Go to docs/individual-docs if you want to make edits.) 2 | 3 | 4 | [comment]: # (Please add your documentation on top of this line) 5 | 6 | ## services\.tailscale\.funnel\.enable 7 | 8 | Whether to enable Tailscale funnel\. 9 | 10 | 11 | 12 | *Type:* 13 | boolean 14 | 15 | 16 | 17 | *Default:* 18 | ` false ` 19 | 20 | 21 | 22 | *Example:* 23 | ` true ` 24 | 25 | 26 | 27 | ## services\.tailscale\.funnel\.target 28 | 29 | 30 | 31 | Target host or host:port for Tailscale funnel 32 | 33 | 34 | 35 | *Type:* 36 | string 37 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | devenv.lock 2 | -------------------------------------------------------------------------------- /examples/android/.patch.sh: -------------------------------------------------------------------------------- 1 | echo "{ pkgs, lib, ... }: {" > devenv.local.nix 2 | echo " android.enable = lib.mkForce (pkgs.stdenv.isLinux && !pkgs.stdenv.isAarch64);" >> devenv.local.nix 3 | echo "}" >> devenv.local.nix 4 | 5 | -------------------------------------------------------------------------------- /examples/android/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | android.enable = true; 5 | android.android-studio.enable = false; 6 | } 7 | -------------------------------------------------------------------------------- /examples/android/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true -------------------------------------------------------------------------------- /examples/aws-vault/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # Since Terraform adopted a non-free license (BSL 1.1) in August 2023, 5 | # using terraform instead of opentofu now requires adding `allowUnfree: true` to `devenv.yaml` 6 | languages.opentofu.enable = true; 7 | 8 | aws-vault = { 9 | enable = true; 10 | profile = "aws-profile"; 11 | awscliWrapper.enable = true; 12 | opentofuWrapper.enable = true; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /examples/caddy-php/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, ... }: 2 | 3 | { 4 | languages.php = { 5 | enable = true; 6 | version = "8.1"; 7 | ini = '' 8 | memory_limit = 256M 9 | ''; 10 | fpm.pools.web = { 11 | settings = { 12 | "pm" = "dynamic"; 13 | "pm.max_children" = 5; 14 | "pm.start_servers" = 2; 15 | "pm.min_spare_servers" = 1; 16 | "pm.max_spare_servers" = 5; 17 | }; 18 | }; 19 | }; 20 | 21 | services.caddy.enable = true; 22 | services.caddy.virtualHosts."http://localhost:8000" = { 23 | extraConfig = '' 24 | root * public 25 | php_fastcgi unix/${config.languages.php.fpm.pools.web.socket} 26 | file_server 27 | ''; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /examples/clickhouse/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -xe 3 | 4 | wait_for_port 9000 5 | sleep 2 6 | clickhouse-client --query "SELECT 1" -------------------------------------------------------------------------------- /examples/clickhouse/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.clickhouse = { 5 | enable = true; 6 | config = '' 7 | # http_port: 8123 8 | ''; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /examples/cockroachdb/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.cockroachdb = { 5 | enable = pkgs.stdenv.isLinux; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /examples/cockroachdb/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true -------------------------------------------------------------------------------- /examples/compose/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | enterTest = '' 3 | pushd projectB 4 | devenv shell python -- --version 5 | devenv shell cargo -- --version 6 | popd 7 | ''; 8 | } 9 | -------------------------------------------------------------------------------- /examples/compose/devenv.yaml: -------------------------------------------------------------------------------- 1 | imports: 2 | - ./projectA 3 | - ./projectB -------------------------------------------------------------------------------- /examples/compose/projectA/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | languages.python.enable = true; 3 | } 4 | -------------------------------------------------------------------------------- /examples/compose/projectB/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | languages.rust.enable = true; 3 | } 4 | -------------------------------------------------------------------------------- /examples/compose/projectB/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | root: 3 | url: ../ 4 | flake: false 5 | imports: 6 | - root/projectA 7 | -------------------------------------------------------------------------------- /examples/couchdb/devenv.nix: -------------------------------------------------------------------------------- 1 | { ... }: 2 | { 3 | services.couchdb.enable = true; 4 | } 5 | -------------------------------------------------------------------------------- /examples/dynamodb-local/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | export AWS_DEFAULT_REGION=fakeRegion 5 | export AWS_ACCESS_KEY_ID=fakeMyKeyId 6 | export AWS_SECRET_ACCESS_KEY=fakeSecretAccessKey 7 | 8 | wait_for_port 8000 9 | 10 | aws dynamodb list-tables --endpoint-url http://localhost:8000 11 | -------------------------------------------------------------------------------- /examples/dynamodb-local/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.dynamodb-local.enable = true; 5 | packages = [ 6 | pkgs.awscli2 7 | ]; 8 | } 9 | -------------------------------------------------------------------------------- /examples/dynamodb-local/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true 2 | -------------------------------------------------------------------------------- /examples/elasticmq/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | wait_for_port 9325 60 5 | 6 | QUEUE_NAME=$(curl http://localhost:9325/statistics/queues -s | jq .[].name -r) 7 | 8 | if [[ "$QUEUE_NAME" != "test-queue" ]]; then 9 | echo "The queue is not created" 10 | exit 1 11 | fi 12 | -------------------------------------------------------------------------------- /examples/elasticmq/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = [ 5 | pkgs.jq 6 | ]; 7 | 8 | services.elasticmq.enable = true; 9 | services.elasticmq.settings = '' 10 | queues { 11 | test-queue {} 12 | } 13 | ''; 14 | } 15 | -------------------------------------------------------------------------------- /examples/fly.io/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | if [ "$(uname -s)" == "Linux" ]; then 3 | devenv container shell 4 | devenv container processes 5 | fi -------------------------------------------------------------------------------- /examples/fly.io/README.md: -------------------------------------------------------------------------------- 1 | Login: 2 | 3 | ``` 4 | flyctl auth login 5 | ``` 6 | 7 | Create an app: 8 | 9 | ``` 10 | flyctl apps create simple-python-app 11 | ``` 12 | 13 | Allocate ipv4: 14 | 15 | ``` 16 | flyctl ips allocate-v4 17 | ``` 18 | 19 | Copy the container to fly.io registry: 20 | 21 | ``` 22 | devenv container processes --copy 23 | ``` 24 | 25 | Create a volume for `devenv` state: 26 | 27 | ``` 28 | fly volumes create devenv_state --region ams --size 1 29 | ``` 30 | 31 | Deploy your app: 32 | 33 | ``` 34 | flyctl deploy 35 | ``` -------------------------------------------------------------------------------- /examples/fly.io/devenv.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, lib, ... }: 2 | 3 | let 4 | pythonPackages = config.languages.python.package.pkgs; 5 | in 6 | { 7 | languages.python.enable = true; 8 | 9 | packages = [ pythonPackages.flask ] 10 | ++ lib.optionals (!config.container.isBuilding) [ pkgs.flyctl ]; 11 | 12 | processes.serve.exec = "flask --app hello run"; 13 | 14 | containers.processes.name = "simple-python-app"; 15 | containers.processes.registry = "docker://registry.fly.io/"; 16 | containers.processes.defaultCopyArgs = [ 17 | "--dest-creds" 18 | "x:\"$(${pkgs.flyctl}/bin/flyctl auth token)\"" 19 | ]; 20 | } 21 | -------------------------------------------------------------------------------- /examples/fly.io/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nix2container: 3 | url: github:nlewo/nix2container 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | mk-shell-bin: 8 | url: github:rrbutani/nix-mk-shell-bin -------------------------------------------------------------------------------- /examples/fly.io/fly.toml: -------------------------------------------------------------------------------- 1 | app = "simple-python-app" 2 | 3 | [build] 4 | image = "registry.fly.io/simple-python-app:latest" 5 | 6 | [[services]] 7 | internal_port = 5000 8 | protocol = "tcp" 9 | 10 | [[services.ports]] 11 | handlers = ["tls", "http"] 12 | port = "443" 13 | 14 | [mounts] 15 | source="devenv_state" 16 | destination="/.devenv/state" -------------------------------------------------------------------------------- /examples/fly.io/hello.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | 3 | app = Flask(__name__) 4 | 5 | 6 | @app.route("/") 7 | def hello_world(): 8 | return "

Hello, World!

" 9 | -------------------------------------------------------------------------------- /examples/gleam/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | rm -rf test_proj 5 | gleam --version 6 | gleam new test_proj 7 | 8 | # These are currently too flaky to run in CI 9 | # cd test_proj 10 | # gleam test 11 | -------------------------------------------------------------------------------- /examples/gleam/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # https://devenv.sh/languages/ 5 | languages.gleam.enable = true; 6 | 7 | enterShell = '' 8 | gleam --version 9 | ''; 10 | 11 | # See full reference at https://devenv.sh/reference/options/ 12 | } 13 | -------------------------------------------------------------------------------- /examples/gleam/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs: 3 | url: github:NixOS/nixpkgs/nixpkgs-unstable 4 | -------------------------------------------------------------------------------- /examples/go/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, name, version, ... }: 2 | pkgs.buildGoApplication { 3 | pname = name; 4 | version = version; 5 | 6 | src = builtins.path { 7 | path = ./.; 8 | name = "source"; 9 | }; 10 | 11 | ## remember to call 'gomod2nix' to generate this file 12 | modules = ./gomod2nix.toml; 13 | } 14 | -------------------------------------------------------------------------------- /examples/go/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, inputs, ... }: 2 | 3 | { 4 | packages = [ pkgs.git pkgs.gomod2nix ]; 5 | 6 | languages.go.enable = true; 7 | 8 | git-hooks.hooks = { 9 | govet = { 10 | enable = true; 11 | pass_filenames = false; 12 | }; 13 | gotest.enable = true; 14 | golangci-lint = { 15 | enable = true; 16 | pass_filenames = false; 17 | }; 18 | }; 19 | 20 | outputs = 21 | let 22 | name = "my-app"; 23 | version = "1.0.0"; 24 | in 25 | { app = import ./default.nix { inherit pkgs name version; }; }; 26 | 27 | # See full reference at https://devenv.sh/reference/options/ 28 | } 29 | -------------------------------------------------------------------------------- /examples/go/devenv.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://devenv.sh/devenv.schema.json 2 | inputs: 3 | gomod: 4 | url: github:nix-community/gomod2nix 5 | overlays: 6 | - default 7 | # If you're using non-OSS software, you can set allowUnfree to true. 8 | # allowUnfree: true 9 | -------------------------------------------------------------------------------- /examples/hivemind/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | process.manager.implementation = "hivemind"; 5 | processes.foo.exec = "echo foo; sleep inf"; 6 | processes.bar.exec = "echo bar; sleep inf"; 7 | } 8 | -------------------------------------------------------------------------------- /examples/httpbin/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euxo pipefail 3 | 4 | for port in 8080 8081; do 5 | wait_for_port "$port" 6 | curl -vf "http://127.0.0.1:$port/headers" 7 | done 8 | -------------------------------------------------------------------------------- /examples/httpbin/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = [ pkgs.curl ]; 5 | 6 | services.httpbin = { 7 | enable = true; 8 | bind = [ "127.0.0.1:8080" "127.0.0.1:8081" ]; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /examples/imports/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | env | grep "FILE=1" 3 | env | grep "FOLDER=1" -------------------------------------------------------------------------------- /examples/imports/devenv.nix: -------------------------------------------------------------------------------- 1 | { } 2 | -------------------------------------------------------------------------------- /examples/imports/devenv.yaml: -------------------------------------------------------------------------------- 1 | imports: 2 | - ./file.nix 3 | - ./folder/ -------------------------------------------------------------------------------- /examples/imports/file.nix: -------------------------------------------------------------------------------- 1 | { 2 | env.FILE = "1"; 3 | } 4 | -------------------------------------------------------------------------------- /examples/imports/folder/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | env.FOLDER = "1"; 3 | } 4 | -------------------------------------------------------------------------------- /examples/influxdb/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | wait_for_port 8087 60 5 | 6 | influx --port 8087 --execute "CREATE DATABASE devenv" 7 | DATABASES=$(influx --port 8087 --execute "SHOW DATABASES" | grep devenv) 8 | 9 | if [[ "$DATABASES" != "devenv" ]]; then 10 | echo "The influxdb database was not created" 11 | exit 1 12 | fi 13 | -------------------------------------------------------------------------------- /examples/javascript-bun/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # JavaScript runtimes 6 | node_modules/ 7 | package-lock.json 8 | pnpm-lock.yaml 9 | yarn.lock 10 | bun.lockb 11 | -------------------------------------------------------------------------------- /examples/javascript-bun/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | node -e "require('axios')" 6 | -------------------------------------------------------------------------------- /examples/javascript-bun/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.javascript = { 5 | enable = true; 6 | bun = { 7 | enable = true; 8 | install.enable = true; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /examples/javascript-bun/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.4.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # JavaScript runtimes 6 | node_modules/ 7 | package-lock.json 8 | pnpm-lock.yaml 9 | yarn.lock 10 | bun.lockb 11 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | node -e "require('axios')" 6 | -------------------------------------------------------------------------------- /examples/javascript-yarn/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.javascript = { 5 | enable = true; 6 | yarn = { 7 | enable = true; 8 | install.enable = true; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /examples/javascript-yarn/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.4.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /examples/javascript/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # JavaScript runtimes 6 | node_modules/ 7 | package-lock.json 8 | pnpm-lock.yaml 9 | yarn.lock 10 | bun.lockb 11 | -------------------------------------------------------------------------------- /examples/javascript/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | node -e "require('axios')" 6 | -------------------------------------------------------------------------------- /examples/javascript/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.javascript = { 5 | enable = true; 6 | npm = { 7 | enable = true; 8 | install.enable = true; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /examples/javascript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.4.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /examples/jsonnet/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | jsonnet --version 5 | -------------------------------------------------------------------------------- /examples/jsonnet/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.jsonnet.enable = true; 5 | enterShell = '' 6 | jsonnet --version 7 | ''; 8 | } 9 | -------------------------------------------------------------------------------- /examples/lean4/.gitignore: -------------------------------------------------------------------------------- 1 | test_proj -------------------------------------------------------------------------------- /examples/lean4/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | rm -rf test_proj 5 | lake new test_proj 6 | cd test_proj 7 | lake exe test_proj -------------------------------------------------------------------------------- /examples/lean4/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.lean4.enable = true; 5 | } 6 | -------------------------------------------------------------------------------- /examples/mailpit/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | wait_for_port 1025 5 | 6 | sendmail john@example.com </dev/null; do sleep 0.5; done" 7 | curl -s "$endpoint" | grep "Server" 8 | -------------------------------------------------------------------------------- /examples/overlays/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = [ 5 | # from the rust-overlay 6 | pkgs.rust-bin.stable.latest.default 7 | 8 | # from subflake 9 | pkgs.hello2 10 | ]; 11 | 12 | overlays = [ 13 | (final: prev: { 14 | hello = prev.hello.overrideAttrs (old: { 15 | name = "hello-2.0.0"; 16 | }); 17 | }) 18 | ]; 19 | 20 | enterTest = '' 21 | which hello | grep "2.0.0" 22 | ''; 23 | } 24 | -------------------------------------------------------------------------------- /examples/overlays/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true 2 | inputs: 3 | subflake: 4 | url: path:./subflake 5 | overlays: 6 | - default 7 | rust-overlay: 8 | url: github:oxalica/rust-overlay 9 | overlays: 10 | - default -------------------------------------------------------------------------------- /examples/overlays/subflake/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | outputs = { ... }: { 3 | overlays.default = self: super: { 4 | hello2 = self.hello; 5 | }; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /examples/overmind/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | process.manager.implementation = "overmind"; 5 | processes.foo.exec = "echo foo; sleep inf"; 6 | processes.bar.exec = "echo bar; sleep inf"; 7 | } 8 | -------------------------------------------------------------------------------- /examples/phoenix/.gitignore: -------------------------------------------------------------------------------- 1 | hello/ 2 | -------------------------------------------------------------------------------- /examples/phoenix/.setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | mix local.hex --force 5 | mix local.rebar --force 6 | mix archive.install --force hex phx_new 7 | 8 | if [ ! -d "hello" ]; then 9 | echo y | mix phx.new --install hello 10 | sed -i -e "s/hostname: \"localhost\"/socket_dir: System.get_env(\"PGHOST\")/" ./hello/config/dev.exs 11 | fi 12 | 13 | pushd hello 14 | mix deps.get 15 | popd 16 | -------------------------------------------------------------------------------- /examples/phoenix/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | pushd hello 5 | wait_for_port 4000 60 6 | mix ecto.create 7 | curl -s http://localhost:4000/ | grep "Phoenix Framework" 8 | popd 9 | -------------------------------------------------------------------------------- /examples/phoenix/README.md: -------------------------------------------------------------------------------- 1 | Based on [the official tutorial](https://hexdocs.pm/phoenix/installation.html). 2 | 3 | ```shell-session 4 | $ devenv shell 5 | $ mix local.hex --force 6 | $ mix local.rebar --force 7 | $ mix archive.install hex phx_new 8 | $ mix phx.new --install hello 9 | $ sed -i.bak -e "s/hostname: \"localhost\"/socket_dir: System.get_env(\"PGHOST\")/" \ 10 | ./hello/config/dev.exs && rm ./hello/config/dev.exs.bak 11 | $ devenv up 12 | $ cd hello && mix ecto.create 13 | ``` 14 | -------------------------------------------------------------------------------- /examples/phoenix/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | # Install Phoenix dependencies: 4 | 5 | # mix local.hex 6 | # mix local.rebar 7 | # mix archive.install hex phx_new 8 | # 9 | # Follow the instructions from https://hexdocs.pm/phoenix/up_and_running.html 10 | # Run `mix phx.new hello --install` to create a new Phoenix project 11 | { 12 | packages = [ 13 | pkgs.git 14 | ] ++ lib.optionals pkgs.stdenv.isLinux [ pkgs.inotify-tools ]; 15 | 16 | languages.elixir.enable = true; 17 | 18 | services.postgres = { 19 | enable = true; 20 | initialScript = '' 21 | CREATE ROLE postgres WITH LOGIN PASSWORD 'postgres' SUPERUSER; 22 | ''; 23 | initialDatabases = [{ name = "hello_dev"; }]; 24 | }; 25 | 26 | processes.phoenix.exec = "cd hello && mix phx.server"; 27 | } 28 | -------------------------------------------------------------------------------- /examples/postgres-timescale/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | timeout 20 bash -c 'until psql -c "SELECT 1" mydb; do sleep 0.5; done' 5 | -------------------------------------------------------------------------------- /examples/postgres-timescale/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.postgres = { 5 | enable = true; 6 | package = pkgs.postgresql_15; 7 | initialDatabases = [{ name = "mydb"; }]; 8 | extensions = extensions: [ 9 | extensions.postgis 10 | extensions.timescaledb 11 | ]; 12 | settings.shared_preload_libraries = "timescaledb"; 13 | initialScript = "CREATE EXTENSION IF NOT EXISTS timescaledb;"; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /examples/postgres-timescale/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true 2 | -------------------------------------------------------------------------------- /examples/postgres/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | echo $PGHOST 5 | 6 | timeout 20 bash -c 'until psql -c "SELECT 1" mydb 2>/dev/null; do sleep 0.5; done' -------------------------------------------------------------------------------- /examples/postgres/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = [ pkgs.coreutils ]; 5 | services.postgres = { 6 | enable = true; 7 | extensions = extensions: [ extensions.postgis ]; 8 | 9 | initialDatabases = [{ name = "mydb"; }]; 10 | 11 | initialScript = '' 12 | CREATE EXTENSION IF NOT EXISTS postgis; 13 | ''; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /examples/python-django/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ -------------------------------------------------------------------------------- /examples/python-django/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-python: 3 | url: github:cachix/nixpkgs-python 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /examples/python-django/myapp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/examples/python-django/myapp/__init__.py -------------------------------------------------------------------------------- /examples/python-django/myapp/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MyAppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'myapp' 7 | -------------------------------------------------------------------------------- /examples/python-django/myapp/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/examples/python-django/myapp/migrations/__init__.py -------------------------------------------------------------------------------- /examples/python-django/myapp/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | class Test(TestCase): 4 | def test(self): 5 | self.assertEqual(1, 1) 6 | -------------------------------------------------------------------------------- /examples/python-django/myproject/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/examples/python-django/myproject/__init__.py -------------------------------------------------------------------------------- /examples/python-django/myproject/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for myproject project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /examples/python-django/myproject/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for myproject project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /examples/python-django/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "myproject" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Rowan Molony "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.10" 10 | Django = "^4.2.15" 11 | django-environ = "^0.9.0" 12 | psycopg2-binary = "^2.9.5" 13 | 14 | 15 | [build-system] 16 | requires = ["poetry-core"] 17 | build-backend = "poetry.core.masonry.api" 18 | -------------------------------------------------------------------------------- /examples/python-poetry/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Devenv 3 | .devenv* 4 | devenv.local.nix 5 | 6 | -------------------------------------------------------------------------------- /examples/python-poetry/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -exu 3 | 4 | POETRY_VENV="$PWD/.venv" 5 | [ -d "$POETRY_VENV" ] 6 | [ "$(poetry env info --path)" = "$POETRY_VENV" ] 7 | [ "$(command -v python)" = "$POETRY_VENV/bin/python" ] 8 | python --version 9 | poetry --version 10 | poetry run python -c "import os; print(os.environ['LD_LIBRARY_PATH'])" 11 | poetry run python -c 'import numpy' 12 | python -c 'import numpy' 13 | python -c 'import pjsua2' 14 | -------------------------------------------------------------------------------- /examples/python-poetry/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: 2 | 3 | { 4 | packages = [ 5 | # A python dependency outside of poetry. 6 | config.languages.python.package.pkgs.pjsua2 7 | pkgs.zlib 8 | ]; 9 | 10 | languages.python = { 11 | enable = true; 12 | poetry = { 13 | enable = true; 14 | install = { 15 | enable = true; 16 | installRootPackage = false; 17 | onlyInstallRootPackage = false; 18 | compile = false; 19 | quiet = false; 20 | groups = [ ]; 21 | ignoredGroups = [ ]; 22 | onlyGroups = [ ]; 23 | extras = [ ]; 24 | allExtras = false; 25 | verbosity = "no"; 26 | }; 27 | activate.enable = true; 28 | package = pkgs.poetry; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /examples/python-poetry/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-python: 3 | url: github:cachix/nixpkgs-python 4 | -------------------------------------------------------------------------------- /examples/python-poetry/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["poetry-core"] 3 | build-backend = "poetry.core.masonry.api" 4 | 5 | [tool.poetry] 6 | name = "python-poetry" 7 | version = "0.2.0" 8 | description = "" 9 | authors = [ 10 | "Bob van der Linden ", 11 | "Matthias Thym " 12 | ] 13 | readme = "README.md" 14 | 15 | [tool.poetry.dependencies] 16 | python = "^3.10" 17 | numpy = "^1.24.1" 18 | -------------------------------------------------------------------------------- /examples/python-venv/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Devenv 3 | .devenv* 4 | devenv.local.nix 5 | 6 | -------------------------------------------------------------------------------- /examples/python-venv/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | [ "$(command -v python)" = "$DEVENV_STATE/venv/bin/python" ] 4 | [ "$VIRTUAL_ENV" = "$DEVENV_STATE/venv" ] 5 | python --version -------------------------------------------------------------------------------- /examples/python-venv/README.md: -------------------------------------------------------------------------------- 1 | # python-venv 2 | 3 | ```console 4 | $ devenv shell 5 | (devenv)$ command -V pip 6 | .../.devenv/state/venv/bin/pip 7 | (devenv)$ pip install numpy 8 | ``` 9 | -------------------------------------------------------------------------------- /examples/python-venv/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.python.enable = true; 5 | languages.python.venv.enable = true; 6 | } 7 | -------------------------------------------------------------------------------- /examples/python/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | python --version | grep "3.11.3" 4 | python -c "import requests;print(requests)" -------------------------------------------------------------------------------- /examples/python/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.python = { 5 | enable = true; 6 | version = "3.11.3"; 7 | 8 | venv.enable = true; 9 | venv.requirements = ./requirements.txt; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /examples/python/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-python: 3 | url: github:cachix/nixpkgs-python 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /examples/python/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | -------------------------------------------------------------------------------- /examples/r/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.r = { 5 | enable = true; 6 | radian = { 7 | enable = true; 8 | package = pkgs.python312Packages.radian; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /examples/rabbitmq/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | timeout 20 bash -c 'until rabbitmqctl -q status 2>/dev/null; do sleep 0.5; done' -------------------------------------------------------------------------------- /examples/rabbitmq/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.rabbitmq = { 5 | enable = true; 6 | managementPlugin = { enable = true; }; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /examples/racket/.patch.sh: -------------------------------------------------------------------------------- 1 | cat > devenv.local.nix << EOF 2 | { pkgs, lib, config, ... }: { 3 | # racket on macOS is broken 4 | languages.racket.enable = lib.mkForce ( 5 | !(builtins.elem pkgs.stdenv.system config.languages.racket.package.meta.badPlatforms) 6 | ); 7 | } 8 | EOF 9 | -------------------------------------------------------------------------------- /examples/racket/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: 2 | 3 | let 4 | cfg = config.languages.racket; 5 | in 6 | { 7 | languages.racket = { 8 | enable = true; 9 | # Use package with bundled packages (Racket Full distribution ) 10 | # Shell completion files are only available in Racket Full distribution 11 | package = pkgs.racket; 12 | }; 13 | 14 | packages = [ 15 | pkgs.bash-completion 16 | ]; 17 | 18 | enterShell = lib.optionalString cfg.enable '' 19 | # Check if everything works as expected 20 | racket --version 21 | # Enable bash completion in devenv shell for `raco` 22 | source ${cfg.package}/share/racket/pkgs/shell-completion/racket-completion.bash 23 | ''; 24 | } 25 | -------------------------------------------------------------------------------- /examples/ruby/.ruby-version: -------------------------------------------------------------------------------- 1 | 3.2.1 -------------------------------------------------------------------------------- /examples/ruby/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | ruby --version | grep "$(cat .ruby-version)" 4 | ruby -e "puts RUBY_VERSION" | grep "$(cat .ruby-version)" 5 | ruby -e "require 'puma'" 6 | bundle --version 7 | bundle exec ruby -e "puts RUBY_VERSION" | grep "$(cat .ruby-version)" 8 | -------------------------------------------------------------------------------- /examples/ruby/Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | 5 | ruby "3.2.1" 6 | 7 | gem "rails" 8 | gem "puma" 9 | -------------------------------------------------------------------------------- /examples/ruby/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-ruby: 3 | url: github:bobvanderlinden/nixpkgs-ruby 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | clean: 8 | enabled: true -------------------------------------------------------------------------------- /examples/rubyonrails/.gitignore: -------------------------------------------------------------------------------- 1 | blog/ 2 | -------------------------------------------------------------------------------- /examples/rubyonrails/.setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | gem install rails 5 | 6 | if [ ! -d "blog" ]; then 7 | rails new blog --database=postgresql --force 8 | fi 9 | 10 | pushd blog 11 | bundle 12 | popd 13 | -------------------------------------------------------------------------------- /examples/rubyonrails/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | wait_for_processes 5 | 6 | pushd blog 7 | rails db:create 8 | popd 9 | 10 | wait_for_port 3000 11 | curl -s http://localhost:3000/ | grep "version" 12 | 13 | # make sure puma was compiled with ssl 14 | ruby -rpuma -e 'exit 1 unless Puma.ssl?' 15 | -------------------------------------------------------------------------------- /examples/rubyonrails/README.md: -------------------------------------------------------------------------------- 1 | Based on [the official tutorial](https://guides.rubyonrails.org/getting_started.html). 2 | 3 | ```shell-session 4 | $ devenv shell 5 | $ rails new blog -d=postgresql 6 | $ devenv up 7 | $ cd blog && rails db:create 8 | ``` -------------------------------------------------------------------------------- /examples/rubyonrails/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | # Create a new Rails project: 4 | # 5 | # gem install rails 6 | # rails new blog --database=postgresql --force 7 | # cd blog 8 | # bundle 9 | { 10 | languages.ruby.enable = true; 11 | languages.ruby.version = "3.2.2"; 12 | 13 | packages = [ 14 | pkgs.openssl 15 | pkgs.libyaml 16 | pkgs.git 17 | pkgs.curl 18 | pkgs.redis 19 | ]; 20 | 21 | services.postgres.enable = true; 22 | 23 | processes.rails = { 24 | exec = "cd blog && rails server"; 25 | process-compose.depends_on.postgres.condition = "process_healthy"; 26 | }; 27 | 28 | enterShell = '' 29 | export PATH="$DEVENV_ROOT/blog/bin:$PATH" 30 | ''; 31 | } 32 | -------------------------------------------------------------------------------- /examples/rubyonrails/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-ruby: 3 | url: github:bobvanderlinden/nixpkgs-ruby 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs -------------------------------------------------------------------------------- /examples/rust-wasm-cross/.test.js: -------------------------------------------------------------------------------- 1 | import("./pkg/app.js").then((app) => app.main()); 2 | -------------------------------------------------------------------------------- /examples/rust-wasm-cross/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | cargo --version 4 | rustc --version 5 | 6 | [[ "$CARGO_INSTALL_ROOT" == "$DEVENV_STATE/cargo-install" ]] 7 | echo "$PATH" | grep -- "$CARGO_INSTALL_ROOT/bin" 8 | 9 | wasm-pack build ./. --target nodejs 10 | 11 | node .test.js 12 | -------------------------------------------------------------------------------- /examples/rust-wasm-cross/Cargo.toml: -------------------------------------------------------------------------------- 1 | [lib] 2 | crate-type = ["cdylib", "rlib"] 3 | 4 | [package] 5 | name = "app" 6 | version = "0.1.0" 7 | edition = "2021" 8 | 9 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 10 | 11 | [dependencies] 12 | wasm-bindgen = "0.2.84" 13 | 14 | [profile.release] 15 | # Tell `rustc` to optimize for small code size. 16 | opt-level = "s" 17 | 18 | [workspace] 19 | -------------------------------------------------------------------------------- /examples/rust-wasm-cross/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.rust = { 5 | enable = true; 6 | # https://devenv.sh/reference/options/#languagesrustchannel 7 | channel = "stable"; 8 | 9 | targets = [ "wasm32-unknown-unknown" ]; 10 | 11 | components = [ "rustc" "cargo" "clippy" "rustfmt" "rust-analyzer" "rust-std" ]; 12 | }; 13 | 14 | git-hooks.hooks = { 15 | clippy = { 16 | enable = true; 17 | settings.offline = false; 18 | extraPackages = [ pkgs.openssl ]; 19 | }; 20 | rustfmt.enable = true; 21 | }; 22 | git-hooks.settings.rust.cargoManifestPath = "./Cargo.toml"; 23 | 24 | packages = [ 25 | pkgs.wasm-pack 26 | pkgs.binaryen # use a newer version of wasm-opt 27 | pkgs.nodejs 28 | ]; 29 | } 30 | -------------------------------------------------------------------------------- /examples/rust-wasm-cross/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | fenix: 3 | url: github:nix-community/fenix 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /examples/rust/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | cargo --version 4 | rustc --version 5 | 6 | [[ "$CARGO_INSTALL_ROOT" == "$DEVENV_STATE/cargo-install" ]] 7 | echo "$PATH" | grep -- "$CARGO_INSTALL_ROOT/bin" 8 | 9 | cd app 10 | cargo run 11 | -------------------------------------------------------------------------------- /examples/rust/app/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "app" 7 | version = "0.1.0" 8 | -------------------------------------------------------------------------------- /examples/rust/app/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "app" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | 10 | 11 | [workspace] -------------------------------------------------------------------------------- /examples/rust/app/src/main.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | println!("Hello, from devenv!"); 3 | } 4 | -------------------------------------------------------------------------------- /examples/rust/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.rust = { 5 | enable = true; 6 | # https://devenv.sh/reference/options/#languagesrustchannel 7 | channel = "nightly"; 8 | 9 | components = [ "rustc" "cargo" "clippy" "rustfmt" "rust-analyzer" ]; 10 | }; 11 | 12 | git-hooks.hooks = { 13 | rustfmt.enable = true; 14 | clippy.enable = true; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /examples/rust/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | fenix: 3 | url: github:nix-community/fenix 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /examples/scala/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.java.jdk.package = pkgs.jdk11; 5 | languages.scala.enable = true; 6 | } 7 | -------------------------------------------------------------------------------- /examples/scripts/README.md: -------------------------------------------------------------------------------- 1 | Load the project: 2 | 3 | ``` 4 | $ devenv shell 5 | ``` 6 | 7 | Once in a shell, script `gitversion` is available in your `$PATH`: 8 | 9 | ``` 10 | $ gitversion 11 | hello git git version 2.36.2 12 | ``` -------------------------------------------------------------------------------- /examples/shell/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | bash-language-server --version 4 | bats --version 5 | shellcheck --version 6 | shfmt --version 7 | -------------------------------------------------------------------------------- /examples/shell/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.shell.enable = true; 5 | enterShell = '' 6 | bash-language-server --version 7 | bats --version 8 | shellcheck --version 9 | shfmt --version 10 | ''; 11 | } 12 | -------------------------------------------------------------------------------- /examples/simple-remote/.test.sh: -------------------------------------------------------------------------------- 1 | env | grep GREET 2 | env | grep GREET2 -------------------------------------------------------------------------------- /examples/simple-remote/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | env.GREET2 = "Hello from Nix!"; 5 | } 6 | -------------------------------------------------------------------------------- /examples/simple-remote/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | simple: 3 | url: github:cachix/devenv 4 | flake: false 5 | imports: 6 | - simple/examples/simple -------------------------------------------------------------------------------- /examples/simple/.envrc: -------------------------------------------------------------------------------- 1 | source_url "https://raw.githubusercontent.com/cachix/devenv/95f329d49a8a5289d31e0982652f7058a189bfca/direnvrc" "sha256-d+8cBpDfDBj41inrADaJt+bDWhOktwslgoP5YiGJ1v0=" 2 | 3 | use devenv -------------------------------------------------------------------------------- /examples/simple/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # direnv 6 | .direnv 7 | 8 | # pre-commit 9 | .pre-commit-config.yaml 10 | -------------------------------------------------------------------------------- /examples/simple/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # https://devenv.sh/basics/ 5 | env.GREET = "devenv"; 6 | 7 | # https://devenv.sh/packages/ 8 | packages = [ pkgs.git ]; 9 | 10 | # https://devenv.sh/scripts/ 11 | scripts.hello.exec = "echo hello from $GREET"; 12 | 13 | enterShell = '' 14 | hello 15 | git --version 16 | ''; 17 | 18 | # https://devenv.sh/languages/ 19 | # languages.nix.enable = true; 20 | 21 | # https://devenv.sh/git-hooks/ 22 | # git-hooks.hooks.shellcheck.enable = true; 23 | 24 | # https://devenv.sh/processes/ 25 | # processes.ping.exec = "ping localhost"; 26 | 27 | # See full reference at https://devenv.sh/reference/options/ 28 | } 29 | -------------------------------------------------------------------------------- /examples/simple/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs: 3 | url: github:NixOS/nixpkgs/nixpkgs-unstable 4 | -------------------------------------------------------------------------------- /examples/solidity/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | solc --version 4 | forge --version 5 | chisel --version 6 | anvil --version 7 | -------------------------------------------------------------------------------- /examples/solidity/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | { 3 | languages.solidity = { 4 | enable = true; 5 | foundry.enable = true; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /examples/solidity/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | foundry: 3 | url: github:shazow/foundry.nix 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /examples/starship/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | starship.enable = true; 5 | 6 | # You can change `enableConfig` to true to override Starship default values. 7 | # By default, it looks for a configuration file next to your `devenv.yaml`. 8 | #starship.config.enable = true; 9 | # If you don't want to place your configuration file next to your `devenv.yaml`, 10 | # change `config.path` to point to the Starship configuration file you want to use. 11 | #starship.config.path = ~/.config/custom_starship.toml; 12 | 13 | # With `enableConfig` set to `false`, Starship will still look for a configuration 14 | # file in '~/.config/starship.toml'. 15 | } 16 | -------------------------------------------------------------------------------- /examples/starship/starship.toml: -------------------------------------------------------------------------------- 1 | # Replace the '❯' symbol in the prompt with '➜' 2 | [character] # The name of the module we are configuring is 'character' 3 | success_symbol = '[➜](bold green)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green' 4 | -------------------------------------------------------------------------------- /examples/supported-languages/.envrc: -------------------------------------------------------------------------------- 1 | source_url "https://raw.githubusercontent.com/cachix/devenv/95f329d49a8a5289d31e0982652f7058a189bfca/direnvrc" "sha256-d+8cBpDfDBj41inrADaJt+bDWhOktwslgoP5YiGJ1v0=" 2 | 3 | use devenv -------------------------------------------------------------------------------- /examples/supported-languages/.patch.sh: -------------------------------------------------------------------------------- 1 | cat > devenv.local.nix << EOF 2 | { pkgs, lib, ... }: { 3 | # ARM is not supported. 4 | languages.unison.enable = lib.mkForce (!(pkgs.stdenv.isLinux && pkgs.stdenv.isAarch64)); 5 | languages.standardml.enable = lib.mkForce (!pkgs.stdenv.isAarch64); 6 | # https://github.com/NixOS/nixpkgs/issues/297019 7 | languages.purescript.enable = lib.mkForce (!pkgs.stdenv.isAarch64); 8 | android.enable = lib.mkForce (pkgs.stdenv.isLinux && !pkgs.stdenv.isAarch64); 9 | # Doesn't build on macOS or ARM. 10 | languages.odin.enable = lib.mkForce (!(pkgs.stdenv.isDarwin || (pkgs.stdenv.isLinux && pkgs.stdenv.isAarch64))); 11 | # macOS is broken. 12 | languages.racket.enable = lib.mkForce (!pkgs.stdenv.isDarwin); 13 | } 14 | EOF 15 | -------------------------------------------------------------------------------- /examples/supported-languages/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true -------------------------------------------------------------------------------- /examples/temporal/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | services.temporal = { 4 | enable = true; 5 | 6 | port = 17233; 7 | 8 | namespaces = [ "mynamespace" ]; 9 | 10 | state = { 11 | ephemeral = false; 12 | sqlite-pragma = { 13 | journal_mode = "wal"; 14 | }; 15 | }; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /examples/terraform/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | terraform --version | grep "1.8.4" 4 | -------------------------------------------------------------------------------- /examples/terraform/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | languages.terraform = { 5 | enable = true; 6 | version = "1.8.4"; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /examples/terraform/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-terraform: 3 | url: github:stackbuilders/nixpkgs-terraform 4 | -------------------------------------------------------------------------------- /examples/texlive/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | which latexmk 5 | -------------------------------------------------------------------------------- /examples/texlive/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | # https://nixos.org/manual/nixpkgs/stable/#sec-language-texlive 5 | languages.texlive = { 6 | enable = true; 7 | 8 | # Choose a base package set. 9 | base = pkgs.texliveSmall; 10 | 11 | # Add extra packages to the base set. 12 | packages = [ "latexmk" ]; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /examples/trafficserver/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euxo pipefail 3 | 4 | # This might help if Traffic Server crashes early 5 | onExit() { 6 | local logdir f 7 | logdir="$(traffic_layout info --json | jq -r .LOGDIR)" 8 | for f in "$logdir"/*; do 9 | cat "$f" 10 | done 11 | } 12 | 13 | trap onExit EXIT 14 | 15 | wait_for_port 8080 16 | curl -vf --max-time 60 http://localhost:8080/nocache/32 17 | -------------------------------------------------------------------------------- /examples/trafficserver/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = [ pkgs.curl pkgs.jq ]; 5 | 6 | services.trafficserver = { 7 | enable = true; 8 | remap = "map / http://127.0.0.1 @plugin=generator.so"; 9 | records.proxy.config = { 10 | proxy_name = "devenv.test"; 11 | http.server_ports = "8080 8080:ipv6"; 12 | 13 | diags.logfile.filename = "stdout"; 14 | error.logfile.filename = "stderr"; 15 | 16 | admin.user_id = "#-1"; 17 | }; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /examples/vala/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | packages = with pkgs; [ 5 | # Check Vala code files for code-style errors 6 | # vala-lint 7 | ]; 8 | 9 | languages = { 10 | vala = { 11 | enable = pkgs.stdenv.isLinux; 12 | # This is the default package for Vala for the configured channel (see nixpkgs input in devenv.yaml) 13 | # It can be configured to use a specific version 14 | # Take a look [here](https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=vala) to find out which versions are available 15 | package = pkgs.vala; 16 | }; 17 | }; 18 | 19 | enterShell = '' 20 | echo "This development environment uses $(vala --version)." 21 | ''; 22 | } 23 | -------------------------------------------------------------------------------- /examples/varnish/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | wait_for_port 6081 5 | 6 | caddy=$(curl http://localhost:8001) 7 | varnish=$(curl http://localhost:6081) 8 | 9 | if [[ "$caddy" == "$varnish" ]]; then 10 | echo "Everything running"; 11 | else 12 | echo "Caddy response does not match Varnish"; 13 | echo "Caddy response: ${caddy}" 14 | echo "Varnish response: ${varnish}" 15 | exit 1 16 | fi 17 | -------------------------------------------------------------------------------- /examples/varnish/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | services.varnish = { 4 | enable = true; 5 | package = pkgs.varnish; 6 | vcl = '' 7 | vcl 4.0; 8 | 9 | backend default { 10 | .host = "127.0.0.1"; 11 | .port = "8001"; 12 | } 13 | ''; 14 | }; 15 | 16 | services.caddy.enable = true; 17 | services.caddy.virtualHosts.":8001" = { 18 | extraConfig = '' 19 | respond "Hello, world!" 20 | ''; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /examples/vault/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -x 3 | 4 | # vault status and store its exit status 5 | check_vault_status() { 6 | echo "Waiting for service to become available..." 7 | VAULT_OUTPUT=$(vault status 2>&1) 8 | VAULT_EXIT_STATUS=$? 9 | } 10 | 11 | # Continuously check vault status until it returns successfully (up to a maximum of 100 times) 12 | # shellcheck disable=SC2034 13 | for i in $(seq 1 20); do 14 | check_vault_status 15 | if [ $VAULT_EXIT_STATUS -eq 0 ]; then 16 | echo "Service is up..." 17 | break 18 | else 19 | sleep 1 20 | fi 21 | done 22 | 23 | # Print the captured output when vault status succeeds 24 | echo "Startup complete..." 25 | vault version 26 | echo "$VAULT_OUTPUT" 27 | 28 | # Exit the script 29 | exit "$VAULT_EXIT_STATUS" 30 | -------------------------------------------------------------------------------- /examples/vault/devenv.nix: -------------------------------------------------------------------------------- 1 | { ... }: 2 | { 3 | services.vault.enable = true; 4 | } 5 | -------------------------------------------------------------------------------- /examples/vault/devenv.yaml: -------------------------------------------------------------------------------- 1 | allowUnfree: true 2 | -------------------------------------------------------------------------------- /examples/wiremock/devenv.nix: -------------------------------------------------------------------------------- 1 | { ... }: 2 | 3 | { 4 | services.wiremock = { 5 | enable = true; 6 | mappings = [ 7 | { 8 | request = { 9 | method = "GET"; 10 | url = "/"; 11 | }; 12 | response = { 13 | status = 200; 14 | headers."Content-Type" = "text/plain"; 15 | body = "Hello World!"; 16 | }; 17 | } 18 | ]; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /http-client-tls/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "http-client-tls" 3 | version = "0.1.0" 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [lib] 8 | path = "src/http_client_tls.rs" 9 | 10 | [dependencies] 11 | eyre.workspace = true 12 | rustls.workspace = true 13 | rustls-platform-verifier.workspace = true 14 | -------------------------------------------------------------------------------- /http-client-tls/src/http_client_tls.rs: -------------------------------------------------------------------------------- 1 | use eyre::WrapErr; 2 | use rustls::{crypto::aws_lc_rs, ClientConfig}; 3 | use rustls_platform_verifier::BuilderVerifierExt; 4 | use std::sync::{Arc, LazyLock}; 5 | 6 | static RUSTLS_TLS_CONFIG: LazyLock = LazyLock::new(|| { 7 | let provider = Arc::new(aws_lc_rs::default_provider()); 8 | ClientConfig::builder_with_provider(provider) 9 | .with_safe_default_protocol_versions() 10 | .wrap_err("Failed to set default TLS protocol versions") 11 | .expect("TLS configuration is required for HTTPS connections") 12 | .with_platform_verifier() 13 | .with_no_client_auth() 14 | }); 15 | 16 | pub fn tls_config() -> ClientConfig { 17 | RUSTLS_TLS_CONFIG.clone() 18 | } 19 | -------------------------------------------------------------------------------- /logos/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/.DS_Store -------------------------------------------------------------------------------- /logos/devenv-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/devenv-github.png -------------------------------------------------------------------------------- /logos/devenv-light-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/devenv-light-horizontal.png -------------------------------------------------------------------------------- /logos/devenv-light-vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/devenv-light-vertical.png -------------------------------------------------------------------------------- /logos/favicons/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/.DS_Store -------------------------------------------------------------------------------- /logos/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /logos/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /logos/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /logos/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /logos/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /logos/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cachix/devenv/b6be42d9e6f6053be1d180e4a4fb95e0aa9a8424/logos/favicons/favicon.ico -------------------------------------------------------------------------------- /nix-conf-parser/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "nix-conf-parser" 3 | version = "0.0.1" 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | indexmap.workspace = true 9 | miette.workspace = true 10 | thiserror.workspace = true 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "autoprefixer": "^10.4.19", 4 | "postcss": "^8.4.38", 5 | "tailwindcss": "^3.4.3", 6 | "tailwindcss-base-font-size": "^1.0.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'postcss-import': {}, 4 | 'tailwindcss/nesting': {}, 5 | tailwindcss: {}, 6 | autoprefixer: {}, 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | mkdocs 2 | mkdocs-material 3 | mkdocs-material[imaging] 4 | mkdocs-include-markdown-plugin 5 | mkdocs-rss-plugin 6 | mkdocs-markdownextradata-plugin 7 | mkdocs-awesome-nav 8 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | (import 2 | ( 3 | let 4 | lock = builtins.fromJSON (builtins.readFile ./flake.lock); 5 | nodeName = lock.nodes.root.inputs.flake-compat; 6 | in 7 | fetchTarball { 8 | url = lock.nodes.${nodeName}.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz"; 9 | sha256 = lock.nodes.${nodeName}.locked.narHash; 10 | } 11 | ) 12 | { src = ./.; } 13 | ).shellNix 14 | -------------------------------------------------------------------------------- /src/modules/debug.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | { 3 | options.devenv = { 4 | debug = lib.mkEnableOption "debug mode of devenv enterShell script"; 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /src/modules/flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | outputs = { ... }: { 3 | modules = ./.; 4 | isTmpDir = true; 5 | hasIsTesting = true; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /src/modules/info.nix: -------------------------------------------------------------------------------- 1 | { lib, config, ... }: 2 | 3 | let 4 | renderSection = section: lib.concatStringsSep "\n" (builtins.map (entry: "- ${entry}") section); 5 | in 6 | { 7 | options = { 8 | info = lib.mkOption { 9 | type = lib.types.lines; 10 | internal = true; 11 | }; 12 | 13 | infoSections = lib.mkOption { 14 | type = lib.types.attrsOf (lib.types.listOf lib.types.str); 15 | default = { }; 16 | description = 17 | "Information about the environment"; 18 | }; 19 | }; 20 | 21 | 22 | config = { 23 | info = lib.concatStringsSep "\n\n" (lib.mapAttrsToList (name: section: if (section != [ ]) then "# ${name}\n${renderSection section}" else "") config.infoSections); 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /src/modules/integrations/delta.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: 2 | 3 | { 4 | options.delta.enable = lib.mkOption { 5 | type = lib.types.bool; 6 | default = false; 7 | description = "Integrate delta into git: https://dandavison.github.io/delta/."; 8 | }; 9 | 10 | config = lib.mkIf config.delta.enable { 11 | packages = [ pkgs.delta ]; 12 | 13 | env.GIT_PAGER = "delta"; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /src/modules/integrations/difftastic.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: 2 | 3 | { 4 | options.difftastic.enable = lib.mkOption { 5 | type = lib.types.bool; 6 | default = false; 7 | description = "Integrate difftastic into git: https://difftastic.wilfred.me.uk/."; 8 | }; 9 | 10 | config = lib.mkIf config.difftastic.enable { 11 | packages = [ pkgs.difftastic ]; 12 | 13 | env.GIT_EXTERNAL_DIFF = "difft"; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /src/modules/languages/ansible.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.ansible; 5 | in 6 | { 7 | options.languages.ansible = { 8 | enable = lib.mkEnableOption "tools for Ansible development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.ansible; 13 | defaultText = lib.literalExpression "pkgs.ansible"; 14 | description = "The Ansible package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = with pkgs; [ 20 | ansible-lint 21 | cfg.package 22 | ]; 23 | }; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /src/modules/languages/clojure.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.clojure; 5 | in 6 | { 7 | options.languages.clojure = { 8 | enable = lib.mkEnableOption "tools for Clojure development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | (clojure.override { 14 | jdk = config.languages.java.jdk.package; 15 | }) 16 | clojure-lsp 17 | ]; 18 | languages.java.enable = true; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /src/modules/languages/cplusplus.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.cplusplus; 5 | in 6 | { 7 | options.languages.cplusplus = { 8 | enable = lib.mkEnableOption "tools for C++ development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | cmake 14 | clang 15 | ccls 16 | ]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /src/modules/languages/crystal.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.crystal; 5 | in 6 | { 7 | options.languages.crystal = { 8 | enable = lib.mkEnableOption "Enable tools for Crystal development."; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | # enable compiler tooling by default to expose things like cc 13 | languages.c.enable = lib.mkDefault true; 14 | 15 | packages = [ 16 | pkgs.crystal 17 | pkgs.shards 18 | ]; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /src/modules/languages/cue.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.cue; 5 | in 6 | { 7 | options.languages.cue = { 8 | enable = lib.mkEnableOption "tools for Cue development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.cue; 13 | defaultText = lib.literalExpression "pkgs.cue"; 14 | description = "The CUE package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/dart.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.dart; 5 | in 6 | { 7 | options.languages.dart = { 8 | enable = lib.mkEnableOption "tools for Dart development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.dart; 13 | defaultText = lib.literalExpression "pkgs.dart"; 14 | description = "The Dart package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/deno.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.deno; 5 | in 6 | { 7 | options.languages.deno = { 8 | enable = lib.mkEnableOption "tools for Deno development"; 9 | package = lib.mkOption { 10 | type = lib.types.package; 11 | description = "Which package of Deno to use."; 12 | default = pkgs.deno; 13 | defaultText = lib.literalExpression "pkgs.deno"; 14 | }; 15 | }; 16 | 17 | config = lib.mkIf cfg.enable { 18 | packages = [ 19 | cfg.package 20 | ]; 21 | 22 | env.DENO_INSTALL_ROOT = config.env.DEVENV_STATE + "/deno"; 23 | env.DENO_DIR = config.env.DENO_INSTALL_ROOT + "/cache"; 24 | 25 | enterShell = '' 26 | export PATH="$PATH:$DENO_INSTALL_ROOT/bin" 27 | ''; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /src/modules/languages/elm.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.elm; 5 | in 6 | { 7 | options.languages.elm = { 8 | enable = lib.mkEnableOption "tools for Elm development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | elmPackages.elm 14 | elmPackages.elm-format 15 | elmPackages.elm-test 16 | elmPackages.elm-language-server 17 | elm2nix 18 | ]; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /src/modules/languages/erlang.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.erlang; 5 | rebar3 = pkgs.rebar3.overrideAttrs (oldAttrs: { 6 | buildInputs = [ cfg.package ]; 7 | }); 8 | in 9 | { 10 | options.languages.erlang = { 11 | enable = lib.mkEnableOption "tools for Erlang development"; 12 | 13 | package = lib.mkOption { 14 | type = lib.types.package; 15 | description = "Which package of Erlang to use."; 16 | default = pkgs.erlang_27; 17 | defaultText = lib.literalExpression "pkgs.erlang"; 18 | }; 19 | }; 20 | 21 | config = lib.mkIf cfg.enable 22 | { 23 | packages = [ 24 | cfg.package 25 | pkgs.erlang-ls 26 | rebar3 27 | ]; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /src/modules/languages/fortran.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.fortran; 5 | in 6 | { 7 | options.languages.fortran = { 8 | enable = lib.mkEnableOption "tools for Fortran Development."; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.gfortran; 13 | defaultText = lib.literalExpression "pkgs.gfortran"; 14 | description = "The Fortran package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = with pkgs; [ 20 | fortran-fpm 21 | fortran-language-server 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/languages/gawk.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.gawk; 5 | in 6 | { 7 | options.languages.gawk = { 8 | enable = lib.mkEnableOption "tools for GNU Awk development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | gawk 14 | gawkextlib.gawkextlib 15 | ]; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /src/modules/languages/gleam.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.gleam; 5 | in 6 | { 7 | options.languages.gleam = { 8 | enable = lib.mkEnableOption "tools for Gleam development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.gleam; 13 | description = "The Gleam package to use."; 14 | defaultText = lib.literalExpression "pkgs.gleam"; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | languages.erlang.enable = true; 20 | 21 | packages = [ 22 | cfg.package 23 | ]; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /src/modules/languages/idris.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let cfg = config.languages.idris; 4 | in { 5 | options.languages.idris = { 6 | enable = lib.mkEnableOption "tools for Idris development"; 7 | 8 | package = lib.mkOption { 9 | type = lib.types.package; 10 | default = pkgs.idris2; 11 | defaultText = lib.literalExpression "pkgs.idris2"; 12 | description = '' 13 | The Idris package to use. 14 | ''; 15 | example = lib.literalExpression "pkgs.idris"; 16 | }; 17 | }; 18 | 19 | config = lib.mkIf cfg.enable { 20 | packages = [ 21 | cfg.package 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/languages/jsonnet.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.jsonnet; 5 | in 6 | { 7 | options.languages.jsonnet = { 8 | enable = lib.mkEnableOption "tools for jsonnet development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | go-jsonnet 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /src/modules/languages/julia.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.julia; 5 | in 6 | { 7 | options.languages.julia = { 8 | enable = lib.mkEnableOption "tools for Julia development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.julia-bin; 13 | defaultText = lib.literalExpression "pkgs.julia-bin"; 14 | description = "The Julia package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/kotlin.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.kotlin; 5 | in 6 | { 7 | options.languages.kotlin = { 8 | enable = lib.mkEnableOption "tools for Kotlin development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | kotlin 14 | gradle 15 | ]; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /src/modules/languages/lean4.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let cfg = config.languages.lean4; 4 | in { 5 | options.languages.lean4 = { 6 | enable = lib.mkEnableOption "tools for lean4 development"; 7 | 8 | package = lib.mkOption { 9 | type = lib.types.package; 10 | default = pkgs.lean4; 11 | defaultText = lib.literalExpression "pkgs.lean4"; 12 | description = '' 13 | The lean4 package to use. 14 | ''; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/lua.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.lua; 5 | in 6 | { 7 | options.languages.lua = { 8 | enable = lib.mkEnableOption "tools for Lua development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.lua; 13 | defaultText = lib.literalExpression "pkgs.lua"; 14 | description = "The Lua package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | pkgs.lua-language-server 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/languages/nim.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.nim; 5 | in 6 | { 7 | options.languages.nim = { 8 | enable = lib.mkEnableOption "tools for Nim development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.nim; 13 | defaultText = lib.literalExpression "pkgs.nim"; 14 | description = "The Nim package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | pkgs.nimlangserver 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/languages/opentofu.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.opentofu; 5 | in 6 | { 7 | options.languages.opentofu = { 8 | enable = lib.mkEnableOption "tools for OpenTofu development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.opentofu; 13 | defaultText = lib.literalExpression "pkgs.opentofu"; 14 | description = "The OpenTofu package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = with pkgs; [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/pascal.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.pascal; 5 | in 6 | { 7 | options.languages.pascal = { 8 | enable = lib.mkEnableOption "tools for Pascal development"; 9 | 10 | lazarus = { 11 | enable = lib.mkEnableOption "lazarus graphical IDE for the FreePascal language"; 12 | }; 13 | }; 14 | 15 | config = lib.mkIf cfg.enable { 16 | packages = with pkgs; [ 17 | fpc 18 | ] ++ lib.optional (cfg.lazarus.enable && pkgs.stdenv.isLinux) pkgs.lazarus; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /src/modules/languages/perl.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.perl; 5 | in 6 | { 7 | options.languages.perl = { 8 | enable = lib.mkEnableOption "tools for Perl development"; 9 | packages = lib.mkOption 10 | { 11 | type = lib.types.listOf lib.types.str; 12 | description = "Perl packages to include"; 13 | default = [ ]; 14 | example = [ "Mojolicious" ]; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = with pkgs; [ 20 | (perl.withPackages (p: (with builtins; map 21 | (pkg: p.${ replaceStrings [ "::" ] [ "" ] pkg }) 22 | cfg.packages))) 23 | ]; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /src/modules/languages/racket.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.racket; 5 | in 6 | { 7 | options.languages.racket = { 8 | enable = lib.mkEnableOption "tools for Racket development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.racket-minimal; 13 | defaultText = lib.literalExpression "pkgs.racket-minimal"; 14 | description = "The Racket package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/raku.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.raku; 5 | in 6 | { 7 | options.languages.raku = { 8 | enable = lib.mkEnableOption "tools for Raku development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | rakudo 14 | ]; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /src/modules/languages/robotframework.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.robotframework; 5 | in 6 | { 7 | options.languages.robotframework = { 8 | enable = lib.mkEnableOption "tools for Robot Framework development"; 9 | 10 | python = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.python3; 13 | defaultText = lib.literalExpression "pkgs.python3"; 14 | description = "The Python package to use."; 15 | }; 16 | 17 | }; 18 | 19 | config = lib.mkIf cfg.enable { 20 | packages = [ 21 | (cfg.python.withPackages (ps: [ 22 | ps.robotframework 23 | ])) 24 | ]; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/modules/languages/shell.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.shell; 5 | in 6 | { 7 | options.languages.shell = { 8 | enable = lib.mkEnableOption "tools for shell development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | (pkgs.bats.withLibraries (p: [ p.bats-assert p.bats-file p.bats-support ])) 14 | nodePackages.bash-language-server 15 | shellcheck 16 | shfmt 17 | ]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /src/modules/languages/standardml.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.standardml; 5 | in 6 | { 7 | options.languages.standardml = { 8 | enable = lib.mkEnableOption "tools for Standard ML development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.mlton; 13 | defaultText = lib.literalExpression "pkgs.mlton"; 14 | description = '' 15 | The Standard ML package to use. 16 | ''; 17 | }; 18 | }; 19 | 20 | config = lib.mkIf cfg.enable { 21 | packages = [ 22 | cfg.package 23 | pkgs.millet 24 | pkgs.smlfmt 25 | ]; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /src/modules/languages/swift.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.swift; 5 | in 6 | { 7 | options.languages.swift = { 8 | enable = lib.mkEnableOption "tools for Swift development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.swift; 13 | defaultText = lib.literalExpression "pkgs.swift"; 14 | description = '' 15 | The Swift package to use. 16 | ''; 17 | }; 18 | }; 19 | 20 | config = lib.mkIf cfg.enable { 21 | packages = [ 22 | cfg.package 23 | pkgs.clang 24 | ]; 25 | 26 | env.CC = "${pkgs.clang}/bin/clang"; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /src/modules/languages/typescript.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.typescript; 5 | in 6 | { 7 | options.languages.typescript = { 8 | enable = lib.mkEnableOption "tools for TypeScript development"; 9 | }; 10 | 11 | config = lib.mkIf cfg.enable { 12 | packages = with pkgs; [ 13 | typescript 14 | nodePackages.typescript-language-server 15 | ]; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /src/modules/languages/unison.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.unison; 5 | in 6 | { 7 | options.languages.unison = { 8 | enable = lib.mkEnableOption "tools for Unison development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | description = "Which package of Unison to use"; 13 | default = pkgs.unison-ucm; 14 | defaultText = lib.literalExpression "pkgs.unison-ucm"; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/v.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.v; 5 | in 6 | { 7 | options.languages.v = { 8 | enable = lib.mkEnableOption "tools for V development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.vlang; 13 | defaultText = lib.literalExpression "pkgs.vlang"; 14 | description = "The V package to use."; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /src/modules/languages/vala.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.vala; 5 | in 6 | { 7 | options.languages.vala = { 8 | enable = lib.mkEnableOption "tools for Vala development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | default = pkgs.vala; 13 | defaultText = lib.literalExpression "pkgs.vala"; 14 | description = "The Vala package to use."; 15 | example = lib.literalExpression "pkgs.vala_0_54"; 16 | }; 17 | }; 18 | 19 | config = lib.mkIf cfg.enable { 20 | packages = [ 21 | cfg.package 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/languages/zig.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, lib, ... }: 2 | 3 | let 4 | cfg = config.languages.zig; 5 | in 6 | { 7 | options.languages.zig = { 8 | enable = lib.mkEnableOption "tools for Zig development"; 9 | 10 | package = lib.mkOption { 11 | type = lib.types.package; 12 | description = "Which package of Zig to use."; 13 | default = pkgs.zig; 14 | defaultText = lib.literalExpression "pkgs.zig"; 15 | }; 16 | }; 17 | 18 | config = lib.mkIf cfg.enable { 19 | packages = [ 20 | cfg.package 21 | pkgs.zls 22 | ]; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/modules/latest-version: -------------------------------------------------------------------------------- 1 | 1.6.1 -------------------------------------------------------------------------------- /src/modules/services/tailscale.nix: -------------------------------------------------------------------------------- 1 | { config, lib, pkgs, ... }: 2 | 3 | with lib; 4 | 5 | let 6 | cfg = config.services.tailscale; 7 | in 8 | { 9 | options = { 10 | services.tailscale = { 11 | funnel = { 12 | enable = mkEnableOption "Tailscale funnel"; 13 | 14 | target = mkOption { 15 | type = types.str; 16 | description = "Target host or host:port for Tailscale funnel"; 17 | }; 18 | }; 19 | }; 20 | }; 21 | 22 | config.processes = lib.mkIf cfg.funnel.enable { 23 | "tailscale-funnel" = { 24 | exec = "${pkgs.tailscale}/bin/tailscale funnel --yes ${cfg.funnel.target}"; 25 | }; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | important: '.tailwind', 4 | content: [ 5 | './docs/**/*.{js,html}' 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [ 11 | require('tailwindcss-base-font-size')({ 12 | // mkdocs uses 20px as the base font size. 13 | // Rescale tailwind to match this. 14 | baseFontSize: 20, 15 | }), 16 | ], 17 | } 18 | 19 | -------------------------------------------------------------------------------- /templates/flake-parts/.envrc: -------------------------------------------------------------------------------- 1 | if ! has nix_direnv_version || ! nix_direnv_version 3.0.6; then 2 | source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.6/direnvrc" "sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM=" 3 | fi 4 | 5 | watch_file flake.nix 6 | watch_file flake.lock 7 | 8 | mkdir -p "$PWD/.devenv" 9 | DEVENV_ROOT_FILE="$PWD/.devenv/root" 10 | printf %s "$PWD" > "$DEVENV_ROOT_FILE" 11 | if ! use flake . --override-input devenv-root "file+file://$DEVENV_ROOT_FILE" 12 | then 13 | echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 14 | fi 15 | -------------------------------------------------------------------------------- /templates/flake-parts/.gitignore: -------------------------------------------------------------------------------- 1 | .devenv 2 | -------------------------------------------------------------------------------- /templates/simple/.envrc: -------------------------------------------------------------------------------- 1 | if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then 2 | source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" 3 | fi 4 | 5 | watch_file flake.nix 6 | watch_file flake.lock 7 | if ! use flake . --no-pure-eval 8 | then 9 | echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 10 | fi 11 | -------------------------------------------------------------------------------- /templates/simple/.gitignore: -------------------------------------------------------------------------------- 1 | .devenv 2 | -------------------------------------------------------------------------------- /templates/terraform/.envrc: -------------------------------------------------------------------------------- 1 | if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then 2 | source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" 3 | fi 4 | 5 | nix_direnv_watch_file flake.nix 6 | nix_direnv_watch_file flake.lock 7 | if ! use flake . --impure 8 | then 9 | echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 10 | fi 11 | -------------------------------------------------------------------------------- /templates/terraform/.gitignore: -------------------------------------------------------------------------------- 1 | .devenv 2 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | devenv.lock 2 | devenv.local.nix 3 | -------------------------------------------------------------------------------- /tests/clean/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | enterTest = '' 3 | if [ -z "$DEVENV_NIX" ]; then 4 | echo "DEVENV_NIX is not set" 5 | exit 1 6 | fi 7 | 8 | set +u 9 | if [ ! -z "$BROWSER" ]; then 10 | echo "BROWSER is set" 11 | exit 1 12 | fi 13 | ''; 14 | } 15 | -------------------------------------------------------------------------------- /tests/clean/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | devenv: 3 | url: path:../../?dir=src/modules 4 | clean: 5 | enabled: true 6 | keep: 7 | - DEVENV_NIX 8 | -------------------------------------------------------------------------------- /tests/cli-options/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: 2 | 3 | { 4 | languages.rust.enable = true; 5 | languages.rust.channel = lib.mkDefault "stable"; 6 | 7 | env = { 8 | RUST_VERSION = config.languages.rust.channel; 9 | REDIS_ENABLED = builtins.toString config.services.redis.enable; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /tests/cli-options/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | fenix: 3 | url: github:nix-community/fenix 4 | inputs: 5 | nixpkgs: 6 | follows: nixpkgs 7 | -------------------------------------------------------------------------------- /tests/cli/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, inputs, ... }: { 2 | languages.python.enable = true; 3 | } 4 | -------------------------------------------------------------------------------- /tests/cli/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | devenv: 3 | url: path:../../?dir=src/modules 4 | -------------------------------------------------------------------------------- /tests/direnv/devenv.nix: -------------------------------------------------------------------------------- 1 | { } 2 | -------------------------------------------------------------------------------- /tests/dotenv/.setup.sh: -------------------------------------------------------------------------------- 1 | echo '{ env.LOCAL = "1";}' > devenv.local.nix 2 | cat < .env 3 | FOO=1 4 | BAR=2 5 | BAZ=3 6 | export CHAZ=4 7 | EOF 8 | echo 'BAZ=5' > .env.bar 9 | -------------------------------------------------------------------------------- /tests/dotenv/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | env | grep FOO=1 4 | env | grep BAR=1 5 | env | grep CHAZ=4 6 | env | grep BAZ=5 7 | -------------------------------------------------------------------------------- /tests/dotenv/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: { 2 | dotenv.enable = true; 3 | dotenv.filename = [ ".env" ".env.bar" ]; 4 | 5 | env.BAR = "1"; 6 | } 7 | -------------------------------------------------------------------------------- /tests/exit-code/.test.sh: -------------------------------------------------------------------------------- 1 | # Verify that the command returns the correct exit code 2 | devenv shell -- bash -c 'exit 42' 3 | status=$? 4 | 5 | if [ "$status" -ne 42 ]; then 6 | echo "Test failed: expected exit code 42, got $status" 7 | echo "The shell did not pass the exit code correctly." 8 | exit 1 9 | fi 10 | -------------------------------------------------------------------------------- /tests/exit-code/devenv.nix: -------------------------------------------------------------------------------- 1 | { } 2 | -------------------------------------------------------------------------------- /tests/files/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -xe 4 | 5 | function assert_file() { 6 | test -f "$1" 7 | [ "$(cat)" = "$(cat "$1")" ] 8 | } 9 | 10 | assert_file foo.txt <&2 3 | exit 1 4 | fi 5 | 6 | echo "{ lib, ... }: { git-hooks.hooks.no-op.enable = lib.mkForce false; }" > devenv.local.nix 7 | -------------------------------------------------------------------------------- /tests/git-hooks-all-disabled/devenv.nix: -------------------------------------------------------------------------------- 1 | # Assert that .pre-commit-config.yaml is removed when all hooks are disabled 2 | { 3 | git-hooks.hooks = { 4 | no-op = { 5 | enable = true; 6 | name = "No Op"; 7 | pass_filenames = false; 8 | raw.always_run = true; 9 | entry = "true"; 10 | }; 11 | }; 12 | 13 | enterTest = '' 14 | if test -f "$DEVENV_ROOT/.pre-commit-config.yaml"; then 15 | echo ".pre-commit-config.yaml not removed" 16 | exit 1 17 | fi 18 | ''; 19 | } 20 | -------------------------------------------------------------------------------- /tests/git-hooks-no-python-leak/devenv.nix: -------------------------------------------------------------------------------- 1 | # Assert that the pre-commit package does not leak its dependencies into the environment. 2 | { 3 | git-hooks.hooks.nixfmt-rfc-style.enable = true; 4 | 5 | enterTest = '' 6 | if [ -n "''${PYTHONPATH:-}" ]; then 7 | echo "PYTHONPATH is non-empty: $PYTHONPATH" >&2 8 | echo "The pre-commit package is leaking its dependencies into the environment." >&2 9 | exit 1 10 | fi 11 | ''; 12 | } 13 | -------------------------------------------------------------------------------- /tests/gitignore/.setup.sh: -------------------------------------------------------------------------------- 1 | echo "{ env.LOCAL = \"1\";}" > devenv.local.nix 2 | echo "ENV=1" > .env 3 | -------------------------------------------------------------------------------- /tests/gitignore/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -xe 4 | 5 | env | grep BAR=1 6 | env | grep ENV=1 7 | env | grep LOCAL=1 -------------------------------------------------------------------------------- /tests/gitignore/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, config, ... }: { 2 | dotenv.enable = true; 3 | 4 | env.BAR = "1"; 5 | } 6 | -------------------------------------------------------------------------------- /tests/glibcLocales/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | enterTest = '' 3 | locale -a | grep -E '(en_US.UTF-8|en_US.utf8)' 4 | ''; 5 | } 6 | -------------------------------------------------------------------------------- /tests/impure/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | enterTest = '' 3 | echo ${builtins.currentSystem}; 4 | ''; 5 | 6 | # Test procfile evaluation with --impure 7 | processes.hello.exec = "echo hello"; 8 | } 9 | -------------------------------------------------------------------------------- /tests/impure/devenv.yaml: -------------------------------------------------------------------------------- 1 | impure: true 2 | -------------------------------------------------------------------------------- /tests/javascript-directory/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # JavaScript runtimes 6 | node_modules/ 7 | package-lock.json 8 | pnpm-lock.yaml 9 | yarn.lock 10 | bun.lockb 11 | -------------------------------------------------------------------------------- /tests/javascript-directory/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | cd directory 6 | node -e "require('axios')" 7 | -------------------------------------------------------------------------------- /tests/javascript-directory/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.javascript = { 5 | enable = true; 6 | directory = "directory"; 7 | package = pkgs.nodejs-slim; 8 | npm = { 9 | enable = true; 10 | install.enable = true; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /tests/javascript-directory/directory/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.4.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/javascript-pnpm/.gitignore: -------------------------------------------------------------------------------- 1 | # Devenv 2 | .devenv* 3 | devenv.local.nix 4 | 5 | # JavaScript runtimes 6 | node_modules/ 7 | package-lock.json 8 | pnpm-lock.yaml 9 | yarn.lock 10 | bun.lockb 11 | -------------------------------------------------------------------------------- /tests/javascript-pnpm/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | node -e "require('axios')" 6 | -------------------------------------------------------------------------------- /tests/javascript-pnpm/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | { 4 | languages.javascript = { 5 | enable = true; 6 | pnpm = { 7 | enable = true; 8 | install.enable = true; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /tests/javascript-pnpm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.4.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tests/kafka-connect/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | curl --connect-timeout 5 \ 4 | --max-time 5 \ 5 | --retry 9 \ 6 | --retry-delay 2 \ 7 | --retry-all-errors \ 8 | http://localhost:8083/connectors 9 | -------------------------------------------------------------------------------- /tests/kafka-connect/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.kafka = { 5 | enable = true; 6 | connect = { 7 | enable = true; 8 | }; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /tests/kafka/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | kafka-topics.sh --list --bootstrap-server localhost:9092 4 | -------------------------------------------------------------------------------- /tests/kafka/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | services.kafka = { 4 | enable = true; 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /tests/keycloak-certs/.test.sh: -------------------------------------------------------------------------------- 1 | ../keycloak/.test.sh -------------------------------------------------------------------------------- /tests/keycloak-certs/README.md: -------------------------------------------------------------------------------- 1 | # Keycloak Tests 2 | 3 | **Note: These tests reference scripts in the `../keycloak` folder by symlinks.** 4 | -------------------------------------------------------------------------------- /tests/keycloak-certs/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.keycloak = { 5 | enable = true; 6 | settings.http-port = 8089; 7 | 8 | database.type = "dev-file"; 9 | 10 | sslCertificate = "./certs/ssl-cert.crt"; 11 | sslCertificateKey = "./certs/ssl-cert.key"; 12 | 13 | realms = { 14 | master = { 15 | path = "./realms/master.json"; 16 | export = true; 17 | import = false; 18 | }; 19 | test = { 20 | path = "./realms/test.json"; 21 | # import = true; 22 | export = true; 23 | }; 24 | }; 25 | }; 26 | 27 | packages = [ 28 | pkgs.curl 29 | pkgs.process-compose 30 | ]; 31 | } 32 | -------------------------------------------------------------------------------- /tests/keycloak-certs/realms: -------------------------------------------------------------------------------- 1 | ../keycloak/realms -------------------------------------------------------------------------------- /tests/keycloak/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | 3 | { 4 | services.keycloak = { 5 | enable = true; 6 | settings.http-port = 8089; 7 | 8 | database.type = "dev-file"; 9 | 10 | realms = { 11 | master = { 12 | path = "./realms/master.json"; 13 | export = true; 14 | import = false; 15 | }; 16 | test = { 17 | path = "./realms/test.json"; 18 | # import = true; 19 | export = true; 20 | }; 21 | }; 22 | }; 23 | 24 | packages = [ 25 | pkgs.curl 26 | pkgs.process-compose 27 | ]; 28 | } 29 | -------------------------------------------------------------------------------- /tests/macos-custom-apple-sdk/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | lib.mkIf pkgs.stdenv.isDarwin { 4 | apple.sdk = pkgs.apple-sdk; 5 | 6 | packages = [ 7 | pkgs.xcbuild 8 | ]; 9 | 10 | # Test that the above SDK is picked up by xcode-select. 11 | enterTest = '' 12 | if [ -v "$DEVELOPER_DIR" ]; then 13 | echo "DEVELOPER_DIR is not set." 14 | exit 1 15 | fi 16 | 17 | xcode-select -p | grep -q /nix/store 18 | ''; 19 | } 20 | -------------------------------------------------------------------------------- /tests/macos-no-default-sdk/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | 3 | lib.mkIf pkgs.stdenv.isDarwin { 4 | apple.sdk = null; 5 | 6 | # Test that there is no default SDK set on macOS. 7 | enterTest = '' 8 | variables_to_check=( 9 | "DEVELOPER_DIR" 10 | "DEVELOPER_DIR_FOR_BUILD" 11 | "SDKROOT" 12 | "NIX_APPLE_SDK_VERSION" 13 | ) 14 | 15 | for var in "''${variables_to_check[@]}"; do 16 | if [ -v "$var" ]; then 17 | echo "$var is set. Expected no default Apple SDK." >&2 18 | exit 1 19 | fi 20 | done 21 | ''; 22 | } 23 | -------------------------------------------------------------------------------- /tests/meilisearch/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | port = 7700; 4 | in 5 | { 6 | 7 | config = { 8 | services.meilisearch = { 9 | enable = true; 10 | listenPort = port; 11 | noAnalytics = true; 12 | listenAddress = "127.0.0.1"; 13 | }; 14 | 15 | scripts.meilisearch-healthcheck.exec = '' 16 | RUNNING=$(${pkgs.curl}/bin/curl -s 127.0.0.1:${toString port}/health | grep "available") 17 | 18 | if [[ -z "$RUNNING" ]]; then 19 | exit 1 20 | else 21 | exit 0 22 | fi 23 | ''; 24 | 25 | enterTest = '' 26 | wait_for_port ${toString port} 27 | 28 | timeout 5 bash -c "until meilisearch-healthcheck; do sleep 1; done" 29 | ''; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /tests/mysql/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | wait_for_port 3306 4 | 5 | # Wait for configure-mysql to finish. 6 | sleep 5 7 | 8 | # through unix_socket 9 | mysql -e 'SELECT VERSION()' 10 | 11 | # through tcp/ip 12 | mysql -h "127.0.0.1" -udb -pdb -e 'SELECT VERSION()' 13 | 14 | ping-mysql 15 | -------------------------------------------------------------------------------- /tests/mysql/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | services.mysql = { 4 | enable = true; 5 | initialDatabases = [{ name = "db"; }]; 6 | ensureUsers = [{ 7 | name = "db"; 8 | password = "db"; 9 | ensurePermissions = { "*.*" = "ALL PRIVILEGES"; }; 10 | }]; 11 | settings = { 12 | mysql = { 13 | host = "127.0.0.1"; 14 | user = "db"; 15 | password = "db"; 16 | }; 17 | }; 18 | }; 19 | 20 | scripts.ping-mysql.exec = '' 21 | $DEVENV_PROFILE/bin/mysqladmin ping 22 | ''; 23 | } 24 | -------------------------------------------------------------------------------- /tests/perl/devenv.nix: -------------------------------------------------------------------------------- 1 | _: 2 | 3 | { 4 | languages.perl.enable = true; 5 | languages.perl.packages = [ "Mojolicious" "Text::Markdown::Hoedown" ]; 6 | enterShell = '' 7 | perl -MText::Markdown::Hoedown -Mojo -e 'say c(1,2,markdown("hey"))->join(" ")' 8 | ''; 9 | } 10 | -------------------------------------------------------------------------------- /tests/postgres-pghost/.test.sh: -------------------------------------------------------------------------------- 1 | wait_for_port 2345 2 | psql postgres -c '\q' &> /dev/null 3 | 4 | # Check the exit status of the psql command 5 | if [ $? -eq 0 ]; then 6 | echo "listen_address and PGHOST is valid, connection successful" 7 | exit 0 8 | else 9 | echo "listen_address and PGHOST is invalid, connection failed" 10 | exit 1 11 | fi -------------------------------------------------------------------------------- /tests/postgres-pghost/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | services.postgres = { 3 | enable = true; 4 | listen_addresses = "*"; 5 | port = 2345; 6 | initialScript = '' 7 | CREATE USER postgres SUPERUSER; 8 | ''; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /tests/postgresql-customdbuser/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | services.postgres = { 3 | enable = true; 4 | listen_addresses = "localhost"; 5 | port = 2345; 6 | # NOTE: use default for initialScript, which is: 7 | # initialScript = '' 8 | # CREATE USER postgres SUPERUSER; 9 | # ''; 10 | initialDatabases = [ 11 | { 12 | name = "testdb"; 13 | user = "testuser"; 14 | pass = "testuserpass"; 15 | schema = ./.; # *.sql in version order 16 | } 17 | ]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /tests/postgresql-customdbuser/testinitdb.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS supermasters ( 2 | ip INET NOT NULL, 3 | nameserver VARCHAR(255) NOT NULL, 4 | account VARCHAR(40) NOT NULL, 5 | PRIMARY KEY (ip, nameserver) 6 | ); 7 | -------------------------------------------------------------------------------- /tests/postgresql-customperdbinit/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | wait_for_port 2345 4 | pg_isready -d template1 5 | 6 | # check whether the pg_uuidv7 extension is installed for the testdb database 7 | psql \ 8 | --set ON_ERROR_STOP=on \ 9 | --dbname=testdb \ 10 | --tuples-only \ 11 | --command="SELECT extname FROM pg_extension WHERE extname = 'pg_uuidv7';" \ 12 | | grep -qw pg_uuidv7 13 | 14 | # but testdb2 should not have it 15 | psql \ 16 | --set ON_ERROR_STOP=on \ 17 | --dbname=testdb2 \ 18 | --tuples-only \ 19 | --command="SELECT extname FROM pg_extension WHERE extname = 'pg_uuidv7';" \ 20 | | grep -q pg_uuidv7 && exit 1 || true 21 | -------------------------------------------------------------------------------- /tests/postgresql-customperdbinit/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | services.postgres = { 3 | enable = true; 4 | listen_addresses = "localhost"; 5 | port = 2345; 6 | # NOTE: use default for initialScript, which is: 7 | # initialScript = '' 8 | # CREATE USER postgres SUPERUSER; 9 | # ''; 10 | extensions = extensions: [ 11 | extensions.pg_uuidv7 12 | ]; 13 | 14 | initialDatabases = [ 15 | { 16 | name = "testdb"; 17 | pass = "testuserpass"; 18 | initialSQL = '' 19 | CREATE EXTENSION IF NOT EXISTS pg_uuidv7; 20 | ''; 21 | } 22 | { 23 | name = "testdb2"; 24 | pass = "testuserpass"; 25 | } 26 | ]; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /tests/postgresql-localhost/.test.sh: -------------------------------------------------------------------------------- 1 | wait_for_port 2345 2 | pg_isready -d template1 -------------------------------------------------------------------------------- /tests/postgresql-localhost/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | services.postgres = { 3 | enable = true; 4 | listen_addresses = "localhost"; 5 | port = 2345; 6 | initialScript = '' 7 | CREATE USER postgres SUPERUSER; 8 | ''; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /tests/prometheus/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | wait_for_port 9090 4 | 5 | # Test the API endpoints 6 | curl -sf http://localhost:9090/-/ready 7 | curl -sf http://localhost:9090/-/healthy 8 | 9 | # Test basic query functionality 10 | response=$(curl -sf 'http://localhost:9090/api/v1/query?query=up') 11 | if ! echo "$response" | grep -q '"status":"success"'; then 12 | echo "Query test failed" 13 | exit 1 14 | fi 15 | 16 | # Test our ping script 17 | ping-prometheus 18 | -------------------------------------------------------------------------------- /tests/prometheus/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: 2 | { 3 | services.prometheus = { 4 | enable = true; 5 | port = 9090; 6 | storage.path = "/tmp/prometheus-1"; 7 | scrapeConfigs = [ 8 | { 9 | job_name = "prometheus"; 10 | static_configs = [{ 11 | targets = [ "localhost:9090" ]; 12 | }]; 13 | } 14 | ]; 15 | globalConfig = { 16 | scrape_interval = "1s"; # Short interval for quick testing 17 | evaluation_interval = "1s"; 18 | }; 19 | }; 20 | 21 | scripts.ping-prometheus.exec = '' 22 | ${lib.getExe pkgs.curl} -sf http://localhost:9090/-/healthy 23 | ''; 24 | } 25 | -------------------------------------------------------------------------------- /tests/python-directory/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Devenv 3 | .devenv* 4 | devenv.local.nix 5 | 6 | -------------------------------------------------------------------------------- /tests/python-directory/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -exu 3 | POETRY_VENV="$PWD/directory/.venv" 4 | [ -d "$POETRY_VENV" ] 5 | [ "$(command -v python)" = "$POETRY_VENV/bin/python" ] 6 | python --version 7 | poetry --version 8 | python -c 'import requests' 9 | cd directory 10 | [ "$(poetry env info --path)" = "$POETRY_VENV" ] 11 | poetry run python -c 'import requests' -------------------------------------------------------------------------------- /tests/python-directory/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, ... }: 2 | 3 | { 4 | languages.python = { 5 | enable = true; 6 | directory = "./directory"; 7 | poetry = { 8 | enable = true; 9 | install.enable = true; 10 | activate.enable = true; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /tests/python-directory/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-python: 3 | url: github:cachix/nixpkgs-python 4 | -------------------------------------------------------------------------------- /tests/python-directory/directory/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["poetry-core"] 3 | build-backend = "poetry.core.masonry.api" 4 | 5 | [tool.poetry] 6 | name = "python-directory" 7 | version = "0.1.0" 8 | description = "" 9 | authors = [ 10 | "Bob van der Linden ", 11 | "Matthias Thym " 12 | ] 13 | readme = "README.md" 14 | 15 | [tool.poetry.dependencies] 16 | python = "^3.11" 17 | requests = "^2.30" 18 | -------------------------------------------------------------------------------- /tests/python-native-libs-poetry/.test.sh: -------------------------------------------------------------------------------- 1 | python -c "from PIL import Image" 2 | python -c "import grpc_tools.protoc" 3 | python -c "import transformers" 4 | 5 | # TODO: invoke a subprocess with an old glibc and assert it doesn't crash 6 | -------------------------------------------------------------------------------- /tests/python-native-libs-poetry/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: { 2 | packages = [ pkgs.cairo ]; 3 | 4 | languages.python = { 5 | enable = true; 6 | directory = "subdir"; 7 | poetry.enable = true; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /tests/python-native-libs-poetry/subdir/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "python-native-libs-poetry" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Your Name "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.11" 10 | pillow = "^10.4.0" 11 | grpcio-tools = "^1.65.1" 12 | transformers = "^4.42.4" 13 | 14 | 15 | [build-system] 16 | requires = ["poetry-core"] 17 | build-backend = "poetry.core.masonry.api" 18 | -------------------------------------------------------------------------------- /tests/python-native-libs-uv/.test.sh: -------------------------------------------------------------------------------- 1 | python -c "from PIL import Image" 2 | python -c "import grpc_tools.protoc" 3 | python -c "import transformers" 4 | 5 | # TODO: invoke a subprocess with an old glibc and assert it doesn't crash -------------------------------------------------------------------------------- /tests/python-native-libs-uv/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: { 2 | packages = [ pkgs.cairo ]; 3 | 4 | languages.python = { 5 | enable = true; 6 | venv.enable = true; 7 | venv.requirements = '' 8 | pillow 9 | grpcio-tools 10 | transformers 11 | ''; 12 | uv.enable = true; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /tests/python-native-libs/.test.sh: -------------------------------------------------------------------------------- 1 | python -c "from PIL import Image" 2 | python -c "import grpc_tools.protoc" 3 | python -c "import transformers" 4 | 5 | # TODO: invoke a subprocess with an old glibc and assert it doesn't crash -------------------------------------------------------------------------------- /tests/python-native-libs/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, lib, ... }: { 2 | packages = [ pkgs.cairo ]; 3 | 4 | languages.python = { 5 | enable = true; 6 | venv.enable = true; 7 | venv.requirements = '' 8 | pillow 9 | grpcio-tools 10 | transformers 11 | ''; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /tests/python-uv-sync/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Devenv 3 | .devenv* 4 | devenv.local.nix 5 | 6 | -------------------------------------------------------------------------------- /tests/python-uv-sync/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -exu 3 | python --version 4 | uv --version 5 | python -c 'import requests' 6 | -------------------------------------------------------------------------------- /tests/python-uv-sync/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, config, inputs, ... }: 2 | let 3 | pkgs-unstable = import inputs.nixpkgs-unstable { system = pkgs.stdenv.system; }; 4 | in 5 | { 6 | languages.python = { 7 | enable = true; 8 | directory = "./directory"; 9 | venv.enable = true; 10 | uv = { 11 | enable = true; 12 | package = pkgs-unstable.uv; 13 | sync.enable = true; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /tests/python-uv-sync/devenv.yaml: -------------------------------------------------------------------------------- 1 | inputs: 2 | nixpkgs-unstable: 3 | url: github:NixOS/nixpkgs/nixpkgs-unstable 4 | nixpkgs-python: 5 | url: github:cachix/nixpkgs-python 6 | -------------------------------------------------------------------------------- /tests/python-uv-sync/directory/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [project] 6 | name = "python-uv-sync" 7 | version = "0.1.0" 8 | description = "" 9 | authors = [{ name = "Alex Launi", email = "dev@launi.me" }] 10 | dependencies = ["requests"] 11 | -------------------------------------------------------------------------------- /tests/redis-socket/.test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -ex 3 | 4 | timeout 20 bash -c 'until redis-cli -s $REDIS_UNIX_SOCKET ping 2>/dev/null; do sleep 0.5; done' 5 | -------------------------------------------------------------------------------- /tests/redis-socket/devenv.nix: -------------------------------------------------------------------------------- 1 | { ... }: 2 | 3 | { 4 | services.redis = { 5 | enable = true; 6 | port = 0; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /tests/rust/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | languages.rust.enable = true; 3 | # TODO: what are we testing here? the mold feature? 4 | languages.rust.mold.enable = false; 5 | enterTest = '' 6 | if [ -n "''${RUSTFLAGS+x}" ]; then 7 | echo "RUSTFLAGS is set, but it should not be" 8 | exit 1 9 | fi 10 | ''; 11 | } 12 | -------------------------------------------------------------------------------- /tests/sqld/.test.sh: -------------------------------------------------------------------------------- 1 | set -e 2 | 3 | wait_for_port 6000 4 | 5 | sqld-check 6 | -------------------------------------------------------------------------------- /tests/sqld/devenv.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | packages = with pkgs; [ turso-cli ]; 4 | 5 | services.sqld = { 6 | enable = true; 7 | port = 6000; 8 | }; 9 | 10 | scripts.sqld-check.exec = '' 11 | $DEVENV_PROFILE/bin/turso db shell http://127.0.0.1:6000 ".schema" 12 | ''; 13 | } 14 | -------------------------------------------------------------------------------- /tests/tasks/.gitignore: -------------------------------------------------------------------------------- 1 | shell 2 | test 3 | -------------------------------------------------------------------------------- /tests/unversioned-devenv-nix/.gitignore: -------------------------------------------------------------------------------- 1 | devenv.nix 2 | -------------------------------------------------------------------------------- /tests/unversioned-devenv-nix/.patch.sh: -------------------------------------------------------------------------------- 1 | echo "{ env.FOO = "1"; }" > devenv.nix 2 | -------------------------------------------------------------------------------- /tests/unversioned-devenv-nix/.test.sh: -------------------------------------------------------------------------------- 1 | echo $FOO | grep -q 1 -------------------------------------------------------------------------------- /tests/up-uses-shell/devenv.nix: -------------------------------------------------------------------------------- 1 | { 2 | enterShell = '' 3 | export FOO=1 4 | ''; 5 | 6 | enterTest = '' 7 | sleep 1 8 | if [ $(cat foo) -ne 1 ]; then 9 | exit 1 10 | fi 11 | ''; 12 | 13 | processes.test.exec = "while true; do echo $FOO > foo; sleep 1; done"; 14 | } 15 | -------------------------------------------------------------------------------- /xtask/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "xtask" 3 | version = "0.1.0" 4 | edition.workspace = true 5 | license.workspace = true 6 | 7 | [dependencies] 8 | clap.workspace = true 9 | clap_complete = "4.5.7" 10 | clap_mangen = "0.2.22" 11 | devenv.workspace = true 12 | miette.workspace = true 13 | -------------------------------------------------------------------------------- /xtask/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod manpage; 2 | pub mod shell_completion; 3 | -------------------------------------------------------------------------------- /xtask/src/manpage.rs: -------------------------------------------------------------------------------- 1 | use clap::CommandFactory; 2 | use devenv::cli::Cli; 3 | use miette::{IntoDiagnostic, Result}; 4 | use std::fs; 5 | use std::path::{Path, PathBuf}; 6 | 7 | pub fn generate(out_dir: impl AsRef) -> Result<()> { 8 | fs::create_dir_all(&out_dir).into_diagnostic()?; 9 | clap_mangen::generate_to(Cli::command(), &out_dir).into_diagnostic()?; 10 | eprintln!("Generated man pages to {}", out_dir.as_ref().display()); 11 | Ok(()) 12 | } 13 | 14 | pub fn default_out_dir() -> PathBuf { 15 | std::env::current_dir().unwrap().join("man") 16 | } 17 | --------------------------------------------------------------------------------