All Projects → roxma → envrc-rs

roxma / envrc-rs

Licence: MIT License
Auto source bash .envrc of your workspace

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to envrc-rs

Autoenv
Directory-based environments
Stars: ✭ 4,859 (+17896.3%)
Mutual labels:  environment, cd, shell-extension
Enhancd
🚀 A next-generation cd command with your interactive filter
Stars: ✭ 2,049 (+7488.89%)
Mutual labels:  cd, shell-extension
workbench
A hierarchical environment manager for bash, written in bash.
Stars: ✭ 17 (-37.04%)
Mutual labels:  environment, direnv
shenv
Simple shell version management
Stars: ✭ 27 (+0%)
Mutual labels:  environment
changie
Automated changelog tool for preparing releases with lots of customization options
Stars: ✭ 180 (+566.67%)
Mutual labels:  cd
marvin-vagrant-dev
No description or website provided.
Stars: ✭ 26 (-3.7%)
Mutual labels:  environment
envy
Use envy to manage environment variables with your OS keychain
Stars: ✭ 23 (-14.81%)
Mutual labels:  environment
aliyun-oss-deploy
🙈 一个 nodejs 命令行工具,用于部署静态资源到 aliyun oss,支持代码方式和 CLI 方式!
Stars: ✭ 31 (+14.81%)
Mutual labels:  cd
robotic-warehouse
Multi-Robot Warehouse (RWARE): A multi-agent reinforcement learning environment
Stars: ✭ 62 (+129.63%)
Mutual labels:  environment
awesome
A curated list of delightful developers resources.
Stars: ✭ 13 (-51.85%)
Mutual labels:  cd
envctl
Tool for managing local dev environments
Stars: ✭ 24 (-11.11%)
Mutual labels:  environment
makes
A DevSecOps framework powered by Nix.
Stars: ✭ 158 (+485.19%)
Mutual labels:  cd
goto
Goto - The Good Way to Program
Stars: ✭ 14 (-48.15%)
Mutual labels:  cd
AppToolkit
🐘 The Front-end Env Toolkit(前端环境管理工具)
Stars: ✭ 411 (+1422.22%)
Mutual labels:  environment
angular-environment
AngularJS Environment Plugin
Stars: ✭ 78 (+188.89%)
Mutual labels:  environment
BFSG
BFSG - BruteForce String Generator 😾
Stars: ✭ 16 (-40.74%)
Mutual labels:  environment
envmnt
Environment variables utility functions.
Stars: ✭ 16 (-40.74%)
Mutual labels:  environment
ts-dotenv
Strongly-typed environment variables for Node.js
Stars: ✭ 18 (-33.33%)
Mutual labels:  environment
separate-env-module
Tear your variables apart!
Stars: ✭ 53 (+96.3%)
Mutual labels:  environment
BlueSense
🌈 BlueSense is a long-term project for monitoring Shanghai environment data.
Stars: ✭ 26 (-3.7%)
Mutual labels:  environment

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

  • cargo install envrc
  • Add PROMPT_COMMAND='eval "$(envrc bash)"' to the end of your bashrc

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 [email protected]
  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

  • export WORKSPACE_DIR=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")") for .envrc to locate its directory.
  • exec bash to reload the modifed .envrc

.bashrc config

# If the `.envrc` is allowed, but not sourced for 1d since last unload, It
# will be considered expired
export ENVRC_ALLOW_DURATION=$((60*60*24))
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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].