-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·140 lines (125 loc) · 4.35 KB
/
setup.sh
File metadata and controls
executable file
·140 lines (125 loc) · 4.35 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
#!/usr/bin/env bash
#
# setup.sh — One-time setup for dotai on macOS/Linux
#
# Creates a Python virtual environment, installs the package, and places
# a wrapper script so "dotai" works from any directory
# without manually activating the venv.
#
# Usage:
# ./setup.sh # install
# ./setup.sh --uninstall # remove venv and wrapper
#
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
VENV_DIR="$SCRIPT_DIR/.venv"
WRAPPER_NAME="dotai"
# ---------------------------------------------------------------------------
# Find a writable bin directory on PATH
# ---------------------------------------------------------------------------
find_bin_dir() {
# Prefer ~/.local/bin (XDG standard, no sudo needed)
local user_bin="$HOME/.local/bin"
if [ -d "$user_bin" ] || mkdir -p "$user_bin" 2>/dev/null; then
echo "$user_bin"
return
fi
# Fallback: /usr/local/bin (may need sudo)
if [ -w "/usr/local/bin" ]; then
echo "/usr/local/bin"
return
fi
# Last resort: next to the venv
echo "$SCRIPT_DIR"
}
# ---------------------------------------------------------------------------
# Uninstall
# ---------------------------------------------------------------------------
if [ "${1:-}" = "--uninstall" ]; then
echo "Uninstalling dotai..."
if [ -d "$VENV_DIR" ]; then
rm -rf "$VENV_DIR"
echo " Removed $VENV_DIR"
fi
# Try to find and remove the wrapper
for dir in "$HOME/.local/bin" "/usr/local/bin" "$SCRIPT_DIR"; do
wrapper="$dir/$WRAPPER_NAME"
if [ -f "$wrapper" ] && grep -q "dotai" "$wrapper" 2>/dev/null; then
rm "$wrapper"
echo " Removed $wrapper"
break
fi
done
echo " Done."
exit 0
fi
# ---------------------------------------------------------------------------
# Check Python
# ---------------------------------------------------------------------------
PYTHON=""
for cmd in python3 python; do
if command -v "$cmd" >/dev/null 2>&1; then
PYTHON="$cmd"
break
fi
done
if [ -z "$PYTHON" ]; then
echo " Error: Python 3 is required but not found."
echo " Install it from https://www.python.org or your package manager."
exit 1
fi
PY_VERSION=$("$PYTHON" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
PY_MAJOR=$("$PYTHON" -c "import sys; print(sys.version_info.major)")
PY_MINOR=$("$PYTHON" -c "import sys; print(sys.version_info.minor)")
if [ "$PY_MAJOR" -lt 3 ] || { [ "$PY_MAJOR" -eq 3 ] && [ "$PY_MINOR" -lt 8 ]; }; then
echo " Error: Python 3.8+ required, found $PY_VERSION"
exit 1
fi
echo " Using $PYTHON ($PY_VERSION)"
# ---------------------------------------------------------------------------
# Create venv and install
# ---------------------------------------------------------------------------
if [ -d "$VENV_DIR" ]; then
echo " Virtual environment already exists at $VENV_DIR"
echo " Updating..."
else
echo " Creating virtual environment..."
"$PYTHON" -m venv "$VENV_DIR"
fi
echo " Installing dotai..."
"$VENV_DIR/bin/pip" install --quiet --upgrade pip
"$VENV_DIR/bin/pip" install --quiet -e "$SCRIPT_DIR"
# ---------------------------------------------------------------------------
# Create wrapper script
# ---------------------------------------------------------------------------
BIN_DIR="$(find_bin_dir)"
WRAPPER="$BIN_DIR/$WRAPPER_NAME"
cat > "$WRAPPER" << WRAPPER_EOF
#!/usr/bin/env bash
# Auto-generated by dotai setup.sh
exec "$VENV_DIR/bin/dotai" "\$@"
WRAPPER_EOF
chmod +x "$WRAPPER"
# ---------------------------------------------------------------------------
# Check if BIN_DIR is on PATH
# ---------------------------------------------------------------------------
echo ""
echo " Installed successfully!"
echo ""
echo " Command: $WRAPPER"
echo " Venv: $VENV_DIR"
echo ""
if ! echo "$PATH" | tr ':' '\n' | grep -qx "$BIN_DIR"; then
echo " NOTE: $BIN_DIR is not on your PATH."
echo " Add it by running:"
echo ""
SHELL_NAME="$(basename "$SHELL")"
case "$SHELL_NAME" in
zsh) echo " echo 'export PATH=\"$BIN_DIR:\$PATH\"' >> ~/.zshrc && source ~/.zshrc" ;;
bash) echo " echo 'export PATH=\"$BIN_DIR:\$PATH\"' >> ~/.bashrc && source ~/.bashrc" ;;
*) echo " export PATH=\"$BIN_DIR:\$PATH\"" ;;
esac
echo ""
else
echo " Try it: dotai --help"
fi