Skip to content

LucasPickering/env-select

Repository files navigation

env-select

license crates.io version

Easily switch between predefined values for arbitrary environment variables Features include (but are not limited to):

  • Interative prompts to select between variable profiles
  • Cascading config system, allowing for system and repo-level value definitions
  • Grab values dynamically via shell commands
  • Modify your shell environment with es set, or run a one-off command in a modified environment with es run
  • Re-use common variables between profiles with inheritance

Example

# .env-select.toml
[applications.server.profiles.dev]
variables = {SERVICE1 = "dev", SERVICE2 = "also-dev"}

[applications.server.profiles.prd]
variables = {SERVICE1 = "prd", SERVICE2 = "also-prd"}

Now pick an environment to export:

> es set server
❯ === dev ===
SERVICE1=dev
SERVICE2=also-dev

  === prd ===
SERVICE1=prd
SERVICE2=also-prd
> echo $SERVICE1 $SERVICE2
dev also-dev

source Disclaimer

env-select runs as a subprocess to your shell (as all commands do), meaning it cannot modify your shell environment. To get around this, env-select will simply output shell commands that the shell plugins (or you) can then pipe to source (or eval) to modify your session.

If you think piping stuff to source is dangerous and sPoOky, you're right. But consider the fact that at this point, you've already downloaded and executed a mystery binary on your machine. You should've already done your due diligence.

Bugs/Feedback

If you find a bug or have a feature request, please open an issue on GitHub.