Skip to content

Usage

Basic Shell

The absolute minimum to get started:

let
  # make sure to add 
  #  inputs.devshell.url = "gitlab:rensa-nix/devshell?dir=lib";
  # to your inputs
  devshell = inputs.devshell.lib { inherit pkgs; };
in
  devshell.mkShell {}

That's it. You've got yourself a shell. Not very exciting, but it works.

Adding Packages

Want some tools? Throw them in:

devshell.mkShell {
  packages = [ pkgs.hello pkgs.git pkgs.nodejs ];
}

Environment Variables

Set some env vars (because who doesn't love those):

devshell.mkShell {
  env = {
    HELLO.value = "world";
  };
}

Shell Hooks

Run stuff when entering the shell:

devshell.mkShell {
  enterShellCommands."hello".text = ''
    echo "Welcome to the devshell!"
    echo "Current directory: $PWD"
  '';
}

Putting It All Together

A more realistic example:

devshell.mkShell {
  packages = [ pkgs.nodejs pkgs.yarn pkgs.git ];

  env = {
    NODE_ENV.value = "development";
    API_URL.value = "http://localhost:3000";
  };

  enterShellCommands."enter".text = ''
    echo "🚀 Development environment ready!"
    node --version
  '';
}

Need More Features?

For additional functionality, import modules:

devshell.mkShell {
  imports = [ some-module.devshellModule ];
  # your config...
}

Check out available modules for things like automatic file generation, dev tools and more.