-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.envrc
94 lines (71 loc) · 2.33 KB
/
.envrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env bash
set -eEou pipefail
declare -A _cfg=(
[group_name]=""
[group_dir]=""
[project_name]=""
[project_dir]=""
[worktree_name]="${PWD##*/}"
[worktree_dir]="${PWD}"
)
_cfg[project_dir]="${_cfg[worktree_dir]%/*}"
_cfg[project_name]="${_cfg[project_dir]##*/}"
_cfg[group_dir]="$(git rev-parse --show-toplevel)"; _cfg[group_dir]="${_cfg[group_dir]%/*}" # Ensures we capture the group directory even in a mono repo
_cfg[group_name]="${_cfg[group_dir]##"${HOME}/project/"}"
_cfg+=(
[wt_src_dir]="${_cfg[worktree_dir]}/src"
[wt_venv_dir]="${HOME}/.venv.d/${_cfg[group_name]}/${_cfg[project_name]}/${_cfg[worktree_name]}"
[wt_venv_ln]="${_cfg[worktree_dir]}/.venv"
[wt_cache_dir]="${HOME}/.cache/${_cfg[group_name]}/${_cfg[project_name]}/${_cfg[worktree_name]}"
[wt_cache_ln]="${_cfg[worktree_dir]}/.cache"
)
log() { printf 'LOG::%b\n' "$*" >&2; }
### Setup Project Dir
## Setup Cache
[[ -e "${_cfg[wt_cache_ln]}" ]] || {
[[ -d "${_cfg[wt_cache_dir]}" ]] || {
log "Initializing Cache"
install -dm 0755 "${_cfg[wt_cache_dir]}"
}
log "Symlinking Cache"
ln -s "${_cfg[wt_cache_dir]}" "${_cfg[wt_cache_ln]}"
}
## Setup Venv
[[ -e "${_cfg[wt_venv_ln]}" ]] || {
[[ -d "${_cfg[wt_venv_dir]}" ]] || {
log "Initializing Python Virtual Env"
install -dm 0755 "${_cfg[wt_venv_dir]}"
}
pyenv local &> /dev/null || {
log "Initializing Project Python version to 3.12"
pyenv local 3.12
}
log "Installing Python Virtual Env"
pyenv exec python3 -m venv \
--clear --upgrade-deps \
--prompt "venv" \
"${_cfg[wt_venv_dir]}"
log "Symlinking Venv"
ln -s "${_cfg[wt_venv_dir]}" "${_cfg[wt_venv_ln]}"
}
## Finally Export Env vars
# Group Vars
export GROUP_NAME="${_cfg[group_name]}"
export GROUP_DIR="${_cfg[group_dir]}"
# Project Vars
export PROJ_NAME="${_cfg[project_name]}"
export PROJ_DIR="${_cfg[project_dir]}"
# Worktree Vars
export WORK_NAME="${_cfg[worktree_name]}"
export WORK_DIR="${_cfg[worktree_dir]}"
export WORK_SRC="${_cfg[wt_src_dir]}"
export WORK_CACHE="${_cfg[wt_cache_ln]}"
export WORK_VENV="${_cfg[wt_venv_ln]}"
# Python Vars
export PYTHONPATH="${WORK_SRC}:${PYTHONPATH:-}"
# Load User Env
[[ -f "${_cfg[worktree_dir]}/.user.env" ]] || cat <<EOF > "${_cfg[worktree_dir]}/.user.env"
#!/usr/bin/env bash
# KEY=VALUE
EOF
{ source .user.env; } || log "Failed to Load User Environment"