dotenv.plugin.zsh 1.3 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
## Settings

# Filename of the dotenv file to look for
: ${ZSH_DOTENV_FILE:=.env}

# Path to the file containing allowed paths
: ${ZSH_DOTENV_ALLOWED_LIST:="${ZSH_CACHE_DIR:-$ZSH/cache}/dotenv-allowed.list"}


## Functions

Arthur's avatar
Arthur committed
12
source_env() {
13
  if [[ -f $ZSH_DOTENV_FILE ]]; then
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    if [[ "$ZSH_DOTENV_PROMPT" != false ]]; then
      local confirmation dirpath="${PWD:A}"

      # make sure there is an allowed file
      touch "$ZSH_DOTENV_ALLOWED_LIST"

      # check if current directory's .env file is allowed or ask for confirmation
      if ! grep -q "$dirpath" "$ZSH_DOTENV_ALLOWED_LIST" &>/dev/null; then
        # print same-line prompt and output newline character if necessary
        echo -n "dotenv: found '$ZSH_DOTENV_FILE' file. Source it? ([Y]es/[n]o/[a]lways) "
        read -k 1 confirmation; [[ "$confirmation" != $'\n' ]] && echo

        # check input
        case "$confirmation" in
          [nN]) return ;;
          [aA]) echo "$dirpath" >> "$ZSH_DOTENV_ALLOWED_LIST" ;;
          *) ;; # interpret anything else as a yes
        esac
32
      fi
33
34
    fi

35
    # test .env syntax
36
    zsh -fn $ZSH_DOTENV_FILE || echo "dotenv: error when sourcing '$ZSH_DOTENV_FILE' file" >&2
37

38
39
    setopt localoptions allexport
    source $ZSH_DOTENV_FILE
Arthur's avatar
Arthur committed
40
41
42
43
44
  fi
}

autoload -U add-zsh-hook
add-zsh-hook chpwd source_env
45
46

source_env