-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdirenvrc
More file actions
166 lines (135 loc) · 3.99 KB
/
direnvrc
File metadata and controls
166 lines (135 loc) · 3.99 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# shellcheck shell=bash
# Changes the current ruby version.
#
# Usage in .envrc:
#
# use ruby [version]
# PATH_add bin
use_ruby() {
# load up chruby if needed and available
if ! command -v chruby > /dev/null; then
local src="${HOMEBREW_PREFIX-/opt/homebrew}/opt/chruby/share/chruby/chruby.sh"
if [[ -f "$src" ]]; then
log_status "loading chruby"
# shellcheck source=/dev/null
source "$src"
else
log_error "chruby not available!"
log_error "Try \`brew install chruby\`"
return 1
fi
fi
# desired Ruby version as first parameter
local ver="$1"
# if version not given as parameter and there is a .ruby-version file, get
# version from the file
if [[ -z "$ver" ]] && [[ -f .ruby-version ]]; then
ver=$(cat .ruby-version)
fi
# if the version still isn't set, error cause we don't know what to do
if [[ -z "$ver" ]]; then
log_error "Unknown ruby version"
log_error "Specify ruby version with \`use ruby VERSION\` or create a .ruby-version file in the project directory."
return 1
fi
# switch to the desired ruby version
chruby "$ver"
}
# Sets PATH for Homebrew core and shivammathur/php taps
#
# Usage in .envrc:
#
# use homebrew_php
# use homebrew_php 8.2
use_homebrew_php() {
local version="$1"
local optdir="${HOMEBREW_PREFIX-/opt/homebrew}/opt/php${version:+"@$version"}"
if [[ -d "$optdir" ]]; then
PATH_add "$optdir/bin"
PATH_add "$optdir/sbin"
MANPATH_add "$optdir/share/man"
else
if [[ -z "$version" ]]; then
log_error "Homebrew PHP not found"
log_error "Try \`brew install php\` or \`brew install shivammathur/php/php@version\`"
else
log_error "Homebrew PHP version '$version' not found"
log_error "Try \`brew install shivammathur/php/php@$version\`"
fi
return 1
fi
}
# Sets PATH for Herd PHP versions.
#
# Usage in .envrc:
#
# use herd_php [system]
# use herd_php 8.3
use_herd_php() {
local herd_dir="$HOME/Library/Application Support/Herd"
if [[ ! -d "$herd_dir" ]]; then
log_error "Herd not found"
return 1
fi
local version="${1-}"
local shim_dir="$HOME/.local/share/herd"
if [[ -z "$version" ]] && [[ -f .php-version ]]; then
version=$(< .php-version)
log_status "Using PHP version from .php-version: $version"
fi
local number
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
version="${version%.*}" # only major.minor
number="${version/./}"
elif [[ "$version" =~ ^[0-9]+\.[0-9]+$ ]]; then
number="${version/./}"
elif [[ "$version" =~ ^(system|default)$ ]] || [[ -z "$version" ]]; then
version="default"
number=""
else
log_error "Invalid PHP version '$version'"
log_error "Use 'system', 'default' or a version like '8.3' or '8.3.1'"
return 1
fi
local target_bin="$herd_dir/bin/php${number}"
if [[ ! -x "$target_bin" ]]; then
log_error "Herd PHP $version binary '$target_bin' not found"
log_error "Try one of these .envrc configurations:"
log_error
log_error "- use_herd_php system (Herd default configured version)"
local suggested
for f in "$herd_dir"/bin/*; do
if [[ "${f##*/}" =~ ^php[0-9]+$ ]]; then
suggested="${f##*/php}"
suggested="${suggested:0:1}.${suggested:1}"
log_error "- use_herd_php $suggested"
fi
done
return 1
fi
local target_shim="$shim_dir/php$number/bin/php"
if [[ ! -L "$target_shim" ]]; then
log_status "Creating Herd PHP $version shim at ${target_shim/$HOME/\~}"
mkdir -p "${target_shim%/*}"
ln -s "$target_bin" "$target_shim"
fi
PATH_add "$shim_dir/php$number/bin"
if [[ -d vendor/bin ]]; then
PATH_add vendor/bin
fi
log_status "using Herd PHP $version shim at ${target_shim/$HOME/\~}"
}
# Sets work specific git email.
#
# Usage in .envrc:
#
# set_git_email foo@bar.com
set_git_email() {
local email="$1"
if [[ -z "$email" ]]; then
log_error "Couldn't set git email!"
return 1
fi
export GIT_COMMITTER_EMAIL="$email"
export GIT_AUTHOR_EMAIL="$email"
}