rs-env
Features
- Compile resulting set of from a hierarchical list of
<name>.envfiles. - Dependencies can form a tree or DAG (directed acyclic graph).
- Last defined variable wins, i.e. child tops parent, rightmost sibling tops left sibling (in case of DAG).
- Smart environment selection via builtin FZF (fuzzy find).
- Quick edit via builtin FZF.
- Side-by-side Tree edit.
- direnv integration: Have the resulting variable list written to your
.envrcfile. - JetBrains integration via EnvFile plugin.
Concept

Installation
Usage
The resulting set of environment variables is an amalgamation of all files involved in the dependency tree, parent variables are overwritten by child variables.
- DAG: Directed acyclic graph, i.e. files can have multiple parents
- branch: a linear list of files, each file can have one parent (no DAG).
- tree: a collection of branches (files can be part of multiple branches, but only one parent)
- environment variables are defined in files
<name>.envand must be prefixed withexportcommand - See examples for DAG, Tree and Branches
- multiple trees/branches per project are supported
- files are linked either manually by adding the comment line
# rsenv: <name.env>or via the command:rsenv link <root.env> <child1>.env <child2>.env.
Source the resulting set of variables as usual:
Hierarchical environment variable management
Usage: rsenv [OPTIONS] [NAME] [COMMAND]
Commands:
build Build the resulting set of environment variables (DAG/Tree)
envrc Write the resulting set of variables to .envrc (requires direnv, DAG/Tree)
files Show all files involved in resulting set (DAG/Tree)
edit-leaf Edit the given environment file and all its parents (DAG/Tree)
edit Edit the FZF selected branch/DAG
select-leaf select environment/branch and update .envrc file (requires direnv, DAG/Tree)
select FZF based selection of environment/branch and update of .envrc file (requires direnv, DAG/Tree)
link Link files into a linear dependency branch (root -> parent -> child)
branches Show all branches (linear representation)
tree Show all trees (hierarchical representation)
tree-edit Edit branches of all trees side-by-side (vim required in path)
leaves Output leaves as paths (Tree)
help Print this message or the help of the given subcommand(s)
Arguments:
[NAME] Optional name to operate on
Options:
-d, --debug... Turn debugging information on
--generate <GENERATOR> [possible values: bash, elvish, fish, powershell, zsh]
--info
-h, --help Print help
-V, --version Print version
Basic
Select via FZF
Tree and Branch structure (Smart edit)
Integrations
direnv
direnv activates environments automatically.
- rs-env can update the
.envrcfile with the selected dependency graph variables.
JetBrains Integration
Life injection of environment variables:
- Plugin EnvFile can be used to life-inject environment variables.
- Use the script
runenv.shas the "EnvFile" script (tick executable checkbox !). - The environment variable
RUN_ENVparametrizes which environment to load. - It will look for a file
<RUN_ENV>.envin the specified directory.
Development
- Tests for "skim" need valid terminal, so they are run via Makefile.
- Test for
rsenv select: run debug target and check rsenv .envrc file.
