Compare commits
2 Commits
855c2f7434
...
44a7ecce2e
| Author | SHA1 | Date | |
|---|---|---|---|
| 44a7ecce2e | |||
| 26939a3be8 |
@@ -15,9 +15,8 @@ if status is-interactive
|
|||||||
# Override globals
|
# Override globals
|
||||||
set -gx EDITOR nvim
|
set -gx EDITOR nvim
|
||||||
|
|
||||||
# Enable direnv
|
# Enable autoenv
|
||||||
# https://github.com/direnv/direnv
|
source ~/.config/fish/functions/activate.fish
|
||||||
direnv hook fish | source
|
|
||||||
|
|
||||||
# Aliases
|
# Aliases
|
||||||
alias vim="nvim"
|
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