Compare commits
2 Commits
855c2f7434
...
44a7ecce2e
| Author | SHA1 | Date | |
|---|---|---|---|
| 44a7ecce2e | |||
| 26939a3be8 |
@@ -15,9 +15,8 @@ if status is-interactive
|
||||
# Override globals
|
||||
set -gx EDITOR nvim
|
||||
|
||||
# Enable direnv
|
||||
# https://github.com/direnv/direnv
|
||||
direnv hook fish | source
|
||||
# Enable autoenv
|
||||
source ~/.config/fish/functions/activate.fish
|
||||
|
||||
# Aliases
|
||||
alias vim="nvim"
|
||||
|
||||
133
home/.config/fish/functions/activate.fish
Normal file
133
home/.config/fish/functions/activate.fish
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env fish
|
||||
|
||||
#
|
||||
# Autoenv for fish shell.
|
||||
# Based on, but heavily modified from:
|
||||
# https://github.com/loopbit/autoenv_fish
|
||||
#
|
||||
|
||||
set AUTOENV_AUTH_FILE ~/.autoenv_authorized
|
||||
if [ -z "$AUTOENV_ENV_FILENAME" ]
|
||||
set AUTOENV_ENV_FILENAME ".env"
|
||||
end
|
||||
|
||||
# probe to see if we have access to a shasum command, otherwise disable autoenv
|
||||
if which gsha1sum 2>/dev/null >&2
|
||||
# Okay
|
||||
else if which sha1sum 2>/dev/null >&2
|
||||
# Okay
|
||||
else if which shasum 2>/dev/null >&2
|
||||
# Okay
|
||||
else
|
||||
echo "Autoenv cannot locate a compatible shasum binary; not enabling"
|
||||
exit 1
|
||||
end
|
||||
|
||||
# This function will be automatically called on directory change
|
||||
# without needing to override the `cd` command.
|
||||
function autoenv_init --on-variable PWD
|
||||
set defIFS $IFS
|
||||
set IFS (echo -en "\n\b")
|
||||
|
||||
set target $argv[1]
|
||||
set home (dirname $HOME)
|
||||
set search_dir $PWD
|
||||
|
||||
while [ $search_dir != / -a $search_dir != "$home" ]
|
||||
set file "$search_dir/$AUTOENV_ENV_FILENAME"
|
||||
if [ -e $file ]
|
||||
set files $files $file
|
||||
end
|
||||
set search_dir (dirname $search_dir)
|
||||
end
|
||||
|
||||
set numerator (count $files)
|
||||
if [ $numerator -gt 0 ]
|
||||
for x in (seq $numerator)
|
||||
set envfile $files[$x]
|
||||
autoenv_check_authz_and_run "$envfile"
|
||||
end
|
||||
end
|
||||
|
||||
set IFS $defIFS
|
||||
end
|
||||
|
||||
function autoenv_run
|
||||
set file "(realpath "$argv[1]")"
|
||||
autoenv_check_authz_and_run "$file"
|
||||
end
|
||||
|
||||
function autoenv_env
|
||||
builtin echo "autoenv:" "$argv[1]"
|
||||
end
|
||||
|
||||
function autoenv_printf
|
||||
builtin printf "autoenv: "
|
||||
builtin printf "$argv[1]"
|
||||
end
|
||||
|
||||
function autoenv_indent
|
||||
cat -e $argv[1] | sed 's/.*/autoenv: &/'
|
||||
end
|
||||
|
||||
function autoenv_hashline
|
||||
# typeset envfile hash
|
||||
set envfile $argv[1]
|
||||
set hash (shasum "$envfile" | cut -d' ' -f 1)
|
||||
echo "$envfile:$hash"
|
||||
end
|
||||
|
||||
function autoenv_check_authz
|
||||
# typeset envfile hash
|
||||
set envfile $argv[1]
|
||||
set hash (autoenv_hashline "$envfile")
|
||||
touch $AUTOENV_AUTH_FILE
|
||||
grep -Gq "$hash" $AUTOENV_AUTH_FILE
|
||||
end
|
||||
|
||||
function autoenv_check_authz_and_run
|
||||
set envfile $argv[1]
|
||||
if autoenv_check_authz "$envfile"
|
||||
autoenv_source "$envfile"
|
||||
return 0
|
||||
end
|
||||
if [ -z $MC_SID ] #make sure mc is not running
|
||||
autoenv_env
|
||||
autoenv_env "WARNING:"
|
||||
autoenv_env "This is the first time you are about to source $envfile":
|
||||
autoenv_env
|
||||
autoenv_env " --- (begin contents) ---------------------------------------"
|
||||
autoenv_indent "$envfile"
|
||||
autoenv_env " --- (end contents) -----------------------------------------"
|
||||
autoenv_env
|
||||
autoenv_printf "Are you sure you want to allow this? (y/N) \n"
|
||||
read answer
|
||||
if [ $answer = y -o $answer = Y ]
|
||||
autoenv_authorize_env "$envfile"
|
||||
autoenv_source "$envfile"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function autoenv_deauthorize_env
|
||||
#typeset envfile
|
||||
set envfile $argv[1]
|
||||
cp "$AUTOENV_AUTH_FILE" "$AUTOENV_AUTH_FILE.tmp"
|
||||
grep -Gv "$envfile:" "$AUTOENV_AUTH_FILE.tmp" >$AUTOENV_AUTH_FILE
|
||||
end
|
||||
|
||||
function autoenv_authorize_env
|
||||
#typeset envfile
|
||||
set envfile $argv[1]
|
||||
autoenv_deauthorize_env "$envfile"
|
||||
autoenv_hashline "$envfile" >>$AUTOENV_AUTH_FILE
|
||||
end
|
||||
|
||||
function autoenv_source
|
||||
#TODO: Why are global vars not being passed to sourced script?
|
||||
set -g AUTOENV_CUR_FILE $argv[1]
|
||||
set -g AUTOENV_CUR_DIR (dirname $argv[1])
|
||||
source "$argv[1]"
|
||||
#set -e AUTOENV_CUR_FILE
|
||||
#set -e AUTOENV_CUR_DIR
|
||||
end
|
||||
Reference in New Issue
Block a user