e68a914487
This changes the defaults: - AUTOENV_FILE_ENTER: .env => .autoenv.zsh - AUTOENV_FILE_LEAVE: .env_leave => .autoenv_leave.zsh `.env` is usually used only for key-value pairs for environment settings, e.g. with foreman. We do not want to interfere with this. This also renames the setting/variable AUTOENV_ENV_FILENAME to AUTOENV_AUTH_FILE, and uses the [XDG spec](http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables) for the default location. The new default location for the auth file will be ~/.local/share/autoenv_auth. When the old setting is used, or the previous default exists, a warning is given with instructions. Fixes https://github.com/Tarrasch/zsh-autoenv/issues/31. Closes https://github.com/Tarrasch/zsh-autoenv/pull/32. |
||
---|---|---|
lib | ||
tests | ||
.gitignore | ||
.travis.yml | ||
autoenv.plugin.zsh | ||
autoenv.zsh | ||
init.zsh | ||
Makefile | ||
README.md |
Autoenv for Zsh
zsh-autoenv automatically sources (known/whitelisted) .autoenv.zsh
files,
typically used in project root directories.
It handles "enter" and leave" events, nesting, and stashing of variables (overwriting and restoring).
Features
- Support for enter and leave events, which can use the same file.
By default
.autoenv.zsh
is used for entering, and.autoenv_leave.zsh
for leaving. - Interactively asks for confirmation / authentication before sourcing an
unknown
.autoenv.zsh
file, and remembers whitelisted files by their hashed content. - Test suite.
- Written in Zsh.
Variable stashing
You can use autostash
in your .autoenv.zsh
files to overwrite some
variable, e.g. $PATH
. When leaving the directory, it will be automatically
restored.
% echo 'echo ENTERED; autostash FOO=changed' > project/.autoenv.zsh
% FOO=orig
% cd project
Attempting to load unauthorized env file!
-rw-rw-r-- 1 user user 36 Mai 6 20:38 /tmp/project/.autoenv.zsh
**********************************************
echo ENTERED; autostash FOO=changed
**********************************************
Would you like to authorize it? (type 'yes') yes
ENTERED
project % echo $FOO
changed
% cd ..
% echo $FOO
orig
There is also stash
, unstash
and autounstash
, in case you want to
have more control.
The varstash library has been taken from smartcd, and was optimized for Zsh.
Writing your .autoenv.zsh file
autoenv_source_parent()
zsh-autoenv will stop looking for .autoenv.zsh
files after the first one has
been found. But you can use the function autoenv_source_parent
to source a
parent .autoenv.zsh
file from there.
Installation
Clone the repository and source it from your ~/.zshrc
file:
% git clone https://github.com/Tarrasch/zsh-autoenv ~/.dotfiles/lib/zsh-autoenv
% echo 'source ~/.dotfiles/lib/zsh-autoenv/autoenv.zsh' >> ~/.zshrc
Using antigen
antigen-bundle Tarrasch/zsh-autoenv
Using zgen
Add the following to your .zshrc
where you are loading your plugins:
zgen load Tarrasch/zsh-autoenv
Configuration
You can use the following variables to control zsh-autoenv's behavior.
Add them to your ~/.zshrc
file, before sourcing/loading zsh-autoenv.
AUTOENV_FILE_ENTER
Name of the file to look for when entering directories.
Default: .autoenv.zsh
AUTOENV_FILE_LEAVE
Name of the file to look for when leaving directories.
Requires AUTOENV_HANDLE_LEAVE=1
.
Default: .autoenv_leave.zsh
AUTOENV_LOOK_UPWARDS
Look for zsh-autoenv "enter" files in parent dirs?
Default: 1
AUTOENV_HANDLE_LEAVE
Handle leave events when changing away from a subtree, where an "enter" event was handled?
Default: 1
AUTOENV_DISABLED
(Temporarily) disable zsh-autoenv. This gets looked at in the chpwd handler.
Default: 0
AUTOENV_DEBUG
Enable debugging. Multiple levels are supported (max 2).
Default: 0
Related projects
History
This started as an optimized version of the bash plugin autoenv but for Zsh, and grew a lot of functionality on top of it (inspired by smartcd).
The code was initially based on @joshuaclayton's dotfiles. In September 2013 @Tarrasch packaged it into a nice antigen-compatible unit with integration tests. Since November 2014, @blueyed took over and added many many nice features, mainly inspired by smartcd.