envrc - Auto source bash .envrc of your workspace

Wny?

Firstly, direnv doesn't officially support alias at the moment.

Secondly,

direnv is actually creating a new bash process to load the stdlib, direnvrc and .envrc, and only exports the environment diff back to the original shell.

However, envrc is simpler. It spawns a new interactive bash and load .envrc. When you cd out of the directory, the shell exits and returns terminal back to the original shell.

Install

Usage

$ mkdir foo $ $ echo 'echo in foo directory' > foo/.envrc $ $ cd foo envrc: spawning new /bin/bash envrc: loading [/home/roxma/test/envrc/foo/.envrc] in foo directory $ $ cd .. envrc: exit [/home/roxma/test/envrc/foo/.envrc]

``` $ envrc envrc 0.2 Rox Ma roxma@qq.com auto source .envrc of your workspace

USAGE: envrc [SUBCOMMAND]

FLAGS: -h, --help Prints help information -V, --version Prints version information

SUBCOMMANDS: allow Grant permission to envrc to load the .envrc bash for bashrc: PROMPT_COMMAND='eval "$(envrc bash)"' deny Remove the permission help Prints this message or the help of the given subcommand(s) prune Remove expired or non-existing-file permissions ```

Note: Take care of your background jobs before getting out of .envrc.

.envrc tips

.bashrc config

```bash

If the .envrc is allowed, but not sourced for 1d since last unload, It

will be considered expired

export ENVRCALLOWDURATION=$((606024)) PROMPT_COMMAND='eval "$(envrc bash)"' ```

Why not bash/python?

The first working commit is written in python. But there's noticeable time lag with the python version on my PC. Rewriting it with perl doesn't help either. Then I decided to switch to rust.

$ time envrc.py bash-prompt-command >/dev/null real 0m0.079s user 0m0.044s sys 0m0.004s

I have also tried a pure bash implementation. It works better than the python implementation, since most of the python overhead is its startup time. Most of the bash overhead is fork/exec of sub-processes and it's way slower than the rust implementation. Read #1 for more information.