https://devenv.sh/ [ ] [ ] logo devenv Fast, Declarative, Reproducible, and Composable Developer Environments [ ] Initializing search cachix/devenv * Home * Documentation * Blog * Community Fast, Declarative, Reproducible, and Composable Developer Environments Build, share, and run your local development environments with a single command. Without containers. Get Started Pick from 80000+ prebuilt packages Any language or tool widely adopted in the industry, prebuilt for Linux/macOS and X64/Arm64. Works with WSL. Search packages and load them in your developer environment. Learn more about the basic features. $ cat devenv.nix { pkgs, ... }: { env.GREET = "determinism"; packages = [ pkgs.git ]; enterShell = "echo hello $GREET"; } $ git --version git: command not found $ devenv shell hello determinism (devenv) $ git --version git version 2.38.1 Start development processes Define your development processes in a declarative way and start them with devenv up. Pick from a number of community maintained modules like PostgreSQL, Redis, MySQL, and more are being added each day. $ cat devenv.nix { pkgs, ... }: { processes.ping.exec = "ping example.com"; postgres.enable = true; } $ devenv up Starting processes ... 20:37:44 system | ping.1 started (pid=94686) 20:37:44 system | postgres.1 started (pid=94688) ... Compose environments Use inputs to manage dependencies and imports to combine environments from local directories or download them using git/mercurial/tarball. $ cat devenv.yaml inputs: myproject: url: github:myorg/myproject imports: - ./frontend - ./backend - myproject Supports tooling for your favorite languages A single toggle to load the compiler/tools/language server for your favorite language. $ cat devenv.nix { pkgs, ... }: { languages.python.enable = true; languages.rust.enable = true; languages.go.enable = true; languages.ruby.enable = true; languages.elm.enable = true; languages.kotlin.enable = true; languages.php.enable = true; languages.typescript.enable = true; languages.perl.enable = true; languages.javascript.enable = true; } Automatically load your environment Combined with direnv, your shell will automatically load your environment when you enter the project directory. $ cd myproject direnv: loading ~/myproject/.envrc Building shell ... Entering shell ... (devenv) $ cd .. direnv: unloading $ Scripts and pre-commit hooks Define scripts and git pre-commit hooks to automate your development workflow. $ cat devenv.nix { pkgs, ... }: { # format Python code on git commit and CI pre-commit.hooks.black.enable = true; # aliases scripts.gd.exec = "git diff --stat"; } $ devenv shell gd pre-commit installed at .git/hooks/pre-commit devenv.lock | 74 ++++++ 1 file changed, 71 insertions(+), 0 deletions(-) Open Source, built on top of Nix After 10 years of experience with the Nix ecosystem, we've built an interface that's intuitive to use. We're leveraging the power of Nix to build a new generation of developer tools: cachix.org (2018), nix.dev (2020), devenv.sh (2022). [nixcon] Built by [cachix] logo devenv cachix/devenv * [ ] Home * [*] Documentation Documentation + Getting Started + [*] Overview Overview o Automatic Shell Activation o Garbage Collection + [*] Writing devenv.yaml Writing devenv.yaml o Inputs o Composing Using Imports + [*] Writing devenv.nix Writing devenv.nix o Basics o Packages o Scripts o Languages o Processes o Pre-Commit Hooks + Examples + Roadmap + [*] Reference Reference o devenv.yaml o devenv.nix * [*] Blog Blog + Index + [*] Archive Archive o 2022 * [*] Community Community + Get Involved + Contributing Next Getting Started Subscribe to our newsletter [ ] Subscribe