-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·124 lines (103 loc) · 3.41 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·124 lines (103 loc) · 3.41 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
#!/bin/bash
# Lockin Installation Script for macOS
# This script installs Lockin in a dedicated virtual environment
# Supports both uv and pip package managers
set -e
echo "🔒 Lockin Installation"
echo "====================="
echo ""
# Check if running on macOS
if [[ "$OSTYPE" != "darwin"* ]]; then
echo "❌ Error: Lockin is designed for macOS only"
exit 1
fi
# Configuration
LOCKIN_DIR="$HOME/.lockin"
VENV_DIR="$LOCKIN_DIR/venv"
LAUNCH_AGENTS_DIR="$HOME/Library/LaunchAgents"
PLIST_FILE="$LAUNCH_AGENTS_DIR/com.lockin.engine.plist"
# Create Lockin directory
echo "📁 Creating Lockin directory..."
mkdir -p "$LOCKIN_DIR"
# Detect package manager (prefer uv if available)
USE_UV=false
if command -v uv &> /dev/null; then
USE_UV=true
echo "✓ Found uv package manager"
else
# Check if Python 3 is available
if ! command -v python3 &> /dev/null; then
echo "❌ Error: Python 3 is required but not found"
echo "Please install Python 3 from https://www.python.org/"
echo "Or install uv from https://docs.astral.sh/uv/"
exit 1
fi
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2 | cut -d'.' -f1,2)
echo "✓ Found Python $PYTHON_VERSION (using pip)"
fi
# Create virtual environment and install
if $USE_UV; then
echo "🐍 Creating virtual environment with uv..."
uv venv "$VENV_DIR"
echo "📥 Installing Lockin..."
VIRTUAL_ENV="$VENV_DIR" uv pip install -e . > /dev/null
else
echo "🐍 Creating virtual environment..."
python3 -m venv "$VENV_DIR"
# Activate virtual environment
source "$VENV_DIR/bin/activate"
# Upgrade pip
echo "📦 Upgrading pip..."
pip install --upgrade pip > /dev/null
# Install Lockin
echo "📥 Installing Lockin..."
pip install -e . > /dev/null
fi
echo "✓ Lockin installed"
# Get Python path from venv
PYTHON_PATH="$VENV_DIR/bin/python"
# Create LaunchAgent plist
echo "⚙️ Setting up background engine..."
mkdir -p "$LAUNCH_AGENTS_DIR"
# Replace placeholders in plist
sed "s|PYTHON_PATH_PLACEHOLDER|$PYTHON_PATH|g; s|LOCKIN_DIR_PLACEHOLDER|$LOCKIN_DIR|g" \
com.lockin.engine.plist > "$PLIST_FILE"
# Load LaunchAgent
launchctl unload "$PLIST_FILE" 2>/dev/null || true
launchctl load "$PLIST_FILE"
echo "✓ Background engine installed and started"
# Add to PATH
SHELL_RC=""
if [[ -n "$ZSH_VERSION" ]] || [[ "$SHELL" == *"zsh"* ]]; then
SHELL_RC="$HOME/.zshrc"
elif [[ -n "$BASH_VERSION" ]] || [[ "$SHELL" == *"bash"* ]]; then
SHELL_RC="$HOME/.bashrc"
fi
if [[ -n "$SHELL_RC" ]]; then
# Check if already in PATH
if ! grep -q "lockin/venv/bin" "$SHELL_RC" 2>/dev/null; then
echo "" >> "$SHELL_RC"
echo "# Lockin" >> "$SHELL_RC"
echo "export PATH=\"$VENV_DIR/bin:\$PATH\"" >> "$SHELL_RC"
echo "✓ Added to PATH in $SHELL_RC"
echo " Please run: source $SHELL_RC"
fi
fi
# Verify installation
sleep 2
if "$VENV_DIR/bin/lockin" --help &>/dev/null; then
echo ""
echo "✅ Installation complete!"
echo ""
echo "Try it out:"
echo " lockin # Show dashboard"
echo " lockin 30 # Start 30-minute work session"
echo " lockin break 5 # Start 5-minute break"
echo ""
echo "The engine is now running in the background."
echo "It will start automatically on login."
else
echo ""
echo "⚠️ Installation completed but verification failed."
echo "You may need to restart your terminal."
fi