-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.envrc
90 lines (76 loc) · 2.78 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
# This file is a bash script. It is interpreted by direnv.
#
# Please install `direnv` with your favorite package manager (apt, homebrew,
# yum, ...) and follow the SETUP instructions in the direnv man page to
# activate this feature for your shell. https://direnv.net/#man/direnv.1
is_numeric() {
[[ "$1" =~ ^-?[0-9]+$ ]]
}
user_exists() {
id "$1" > /dev/null 2>&1
}
inside_docker-moduser() {
usage() {
echo "Set a new user id and group id for a user." \
"Usage: ${FUNCNAME[1]} username"
[[ "$1" != "" ]] && echo "- ERROR: $1"
exit 1
}
USERNAME="$1"
NEWUID=$(grep '^LOCAL_UID=' .env | sed 's/LOCAL_UID=//')
NEWGID=$(grep '^LOCAL_GID=' .env | sed 's/LOCAL_GID=//')
user_exists "$USERNAME" || usage "User does not exist: '$USERNAME'"
is_numeric "$NEWUID" || usage "LOCAL_UID should be numeric: '$NEWUID'"
is_numeric "$NEWGID" || usage "LOCAL_GID should be numeric: '$NEWGID'"
GROUPNAME=$(id -gn $USERNAME)
OLDUID=$(id -u $USERNAME)
OLDGID=$(id -g $USERNAME)
# inspired by https://muffinresearch.co.uk/linux-changing-uids-and-gids-for-user/
if [[ "$NEWUID" != "$OLDUID" ]]; then
echo "Replacing id for $USERNAME: $OLDUID:$OLDGID -> $NEWUID:$NEWGID ..."
usermod -u $NEWUID $USERNAME
groupmod -g $NEWGID $GROUPNAME
find / -ignore_readdir_race -user $OLDUID -exec chown -h $NEWUID {} \;
find / -ignore_readdir_race -group $OLDGID -exec chgrp -h $NEWGID {} \;
usermod -g $NEWGID $USERNAME
echo "Done. $(id $USERNAME)"
fi
}
docker-dotenv() {
touch .env
sed -i '/^LOCAL_UID=/d' .env
sed -i '/^LOCAL_GID=/d' .env
echo "LOCAL_UID=$(id -u)" >> .env
echo "LOCAL_GID=$(id -g)" >> .env
cat .env
}
docker-alias() {
ALIAS_COUNT=$(alias | grep "docker-compose run" | wc -l)
alias | grep --color=never "docker-compose run" | sed 's/^alias/-/'
if [[ $ALIAS_COUNT > 0 ]]; then
echo $ALIAS_COUNT' aliases to make Docker painless. Remove them with `docker-unalias`.'
else
echo 'No aliases active for painless use of Docker.' \
'Run `docker-setalias` to activate aliases.'
fi
}
docker-setalias() {
TOOL_SERVICES=$(grep -B1 -E '^\s+image: painless/.' docker-compose.override.yml | \
sed -E '/^\s+image: painless/d' | sed -e 's/^\s+//' -e 's/:.*//' -e '/^--$/d')
for CMD in $TOOL_SERVICES; do
alias $CMD="docker-compose run --rm $CMD"
done
docker-alias
}
docker-unalias() {
ALIAS_LIST=$(docker-alias | grep '^- ' | sed -e 's/- //' -e 's/=.*//')
for LINE in $ALIAS_LIST; do
unalias $LINE
echo "$LINE alias removed."
done
}
# ----------------------
if [ -f docker-compose.override.yml ]; then
[ -f .env ] || docker-dotenv
[ -f .dockerignore ] && docker-setalias
fi