Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/benvan/sandboxd
speeds up your bashrc by running (slow) setup commands on the fly
https://github.com/benvan/sandboxd
Last synced: about 2 months ago
JSON representation
speeds up your bashrc by running (slow) setup commands on the fly
- Host: GitHub
- URL: https://github.com/benvan/sandboxd
- Owner: benvan
- License: mit
- Created: 2016-06-11T18:18:18.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-11-08T12:27:38.000Z (over 2 years ago)
- Last Synced: 2024-04-15T02:57:01.382Z (about 2 months ago)
- Language: Shell
- Homepage:
- Size: 21.5 KB
- Stars: 231
- Watchers: 6
- Forks: 12
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-zsh-plugins - sandboxd - Speed up your `.zshrc` & shell startup with lazy-loading by only running setup commands (e.g. `eval "$(rbenv init -)"`, etc) when you need them. (Plugins / ZSH on Windows)
- fucking-awesome-zsh-plugins - sandboxd - Speed up your `.zshrc` & shell startup with lazy-loading by only running setup commands (e.g. `eval "$(rbenv init -)"`, etc) when you need them. (Plugins / ZSH on Windows)
- awesome-zsh-plugins - sandboxd - Speed up your `.zshrc` & shell startup with lazy-loading by only running setup commands (e.g. `eval "$(rbenv init -)"`, etc) when you need them. (Plugins / ZSH on Windows)
- awesome-stars - benvan/sandboxd - speeds up your bashrc by running (slow) setup commands on the fly (Shell)
- my-awesome-stars - benvan/sandboxd - speeds up your bashrc by running (slow) setup commands on the fly (Shell)
README
# sandboxd
Speed up your bashrc / zshrc: avoids running (slow) setup commands until you actually need them.# Why?
Having installed `nvm`, `rvm`, `virtualenvwrapper` and other similar [gubbins](http://www.urbandictionary.com/define.php?term=gubbins) over time, my shell starts horrifically slowly. By running these setup scripts on-demand, my time-to-first-prompt is nice and fast again. On top of this, I rarely need all of these tools enabled at the same time...# How?
sandboxd creates a placeholder shell function for each command you specify (e.g. `rvm`). When this command gets run for the first time, the following happens:
- the `cmd` placeholder function (plus all associated placeholders) gets removed
- the setup you have associated with `cmd` gets run,
- `cmd` gets run with the original arguments# Usage
To 'sandbox' a setup, wrap it in a function named `sandbox_init_[name]`:```bash
# in ~/.bashrc / your shell rc file
source /path/to/sandboxd# in ~/.sandboxrc
sandbox_init_nvm(){
source $(brew --prefix nvm)/nvm.sh #long running setup command
}# create hooks for commands 'nvm', 'node' and 'nodemon'
sandbox_hook nvm node
sandbox_hook nvm nodemon
# this one not needed: it's created automatically based on the sandbox name
# sandbox_hook nvm nvm
```The sandbox setup gets run _once_, when either `nvm`, `nodemon` or `node` is used for the first time:
```bash
[20:45:44 ~] echo 'console.log("hi")' | node
sandboxing nvm ...
hi
[20:45:53 ~] echo 'console.log("hi")' | node
hi
```## Manually calling the sandbox command
To manually run a specific sandbox setup, run `sandbox [name]`This might be useful if you want to run a sandbox that doesn't have an associated command, or to create "feature flags" in your rc file:
```bash
#uncomment to enable features# sandbox virtualenv
sandbox rvm
sandbox nvm
```# Shims
Tools like [pyenv](https://github.com/pyenv/pyenv), [rbenv](https://github.com/rbenv/rbenv), [nodenv](https://github.com/nodenv/nodenv) etc use the concept of ['shims'](https://github.com/pyenv/pyenv#understanding-shims), which are helper scripts created when installed packages create command line utilities (e.g. installing the AWS CLI via Pip creates the `aws` command). To make it easy for sandboxd to lazy-load these environments when any of these 'shims' are called, use the function `sandbox_hook_shims {} []`. See [sandboxrc.example.pyenv](sandboxrc.example.pyenv) for more information.Example:
Shims created under `~/.pyenv/shims/`
```bash
$ ls -l ~/.pyenv/shims
ansible
ansible-config
aws
flask
[...]
```To automatically add them all as a sandboxd `hook`, simply add the following to `.sandboxrc`:
```bash
# in ~/.sandboxrcsandbox_init_pyenv() {
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export VIRTUAL_ENV_DISABLE_PROMPT=1
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
}sandbox_hook_shims pyenv
```Here, the `pyenv` argument of `sandbox_hook_shims` matches the function name defined above (`sandbox_init_pyenv`).
`sandbox_hook_shims` assumes the shim directory to be `~/./shims` where `` is the first argument. If the diretory is different, pass it as an argument:```bash
sandbox_hook_shims pyenv /path/to/shim/directory
```## sandboxrc configuration file
The location of the configuration file depends on the environment's configuration. The file is searched in the following order:1. `$SANDBOXRC` - if it is set. This has highest precedence. Thus you can set this to override to custom location.
1. `$XDG_CONFIG_HOME/sandboxd/sandboxrc` - if the directory `sandboxd/` exist. Note that `$XDG_CONFIG_HOME` defaults to `$HOME/.config`
1. `$HOME/.sandboxrc` - fall back to old default location.