187 lines
4.8 KiB
Bash
Executable File
187 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Installation script for luk
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored output
|
|
print_status() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if Python 3.12+ is installed
|
|
check_python() {
|
|
print_status "Checking Python installation..."
|
|
|
|
if command -v python3 &> /dev/null; then
|
|
PYTHON_VERSION=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
|
|
REQUIRED_VERSION="3.12"
|
|
|
|
if python3 -c "import sys; exit(0 if sys.version_info >= (3, 12) else 1)"; then
|
|
print_status "Python $PYTHON_VERSION found ✓"
|
|
else
|
|
print_error "Python $REQUIRED_VERSION or higher is required. Found: $PYTHON_VERSION"
|
|
exit 1
|
|
fi
|
|
else
|
|
print_error "Python 3 is not installed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check if uv is installed, install if not
|
|
check_uv() {
|
|
print_status "Checking uv installation..."
|
|
|
|
if command -v uv &> /dev/null; then
|
|
print_status "uv found ✓"
|
|
else
|
|
print_warning "uv not found, installing..."
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
|
|
if command -v uv &> /dev/null; then
|
|
print_status "uv installed successfully ✓"
|
|
else
|
|
print_error "Failed to install uv"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Install the package
|
|
install_package() {
|
|
print_status "Installing luk..."
|
|
|
|
# Create virtual environment and install
|
|
uv venv
|
|
source .venv/bin/activate
|
|
uv pip install -e .
|
|
|
|
print_status "Installation completed ✓"
|
|
}
|
|
|
|
# Setup configuration directories
|
|
setup_config() {
|
|
print_status "Setting up configuration directories..."
|
|
|
|
# Create necessary directories
|
|
mkdir -p "$HOME/.config/luk"
|
|
mkdir -p "$HOME/.local/share/luk"
|
|
mkdir -p "$HOME/.local/share/luk/logs"
|
|
|
|
# Create example configuration
|
|
cat > "$HOME/.config/luk/config.env" << EOF
|
|
# luk Configuration
|
|
# Copy this file and modify as needed
|
|
|
|
# Microsoft Graph settings
|
|
# These will be prompted for on first run
|
|
# MICROSOFT_CLIENT_ID=your_client_id
|
|
# MICROSOFT_TENANT_ID=your_tenant_id
|
|
|
|
# Email settings
|
|
MAILDIR_PATH=~/Mail
|
|
NOTES_DIR=~/Documents/Notes
|
|
|
|
# Godspeed settings
|
|
# GODSPEED_EMAIL=your_email@example.com
|
|
# GODSPEED_PASSWORD=your_password
|
|
# GODSPEED_TOKEN=your_token
|
|
# GODSPEED_SYNC_DIR=~/Documents/Godspeed
|
|
|
|
# TickTick settings
|
|
# TICKTICK_CLIENT_ID=your_client_id
|
|
# TICKTICK_CLIENT_SECRET=your_client_secret
|
|
|
|
# Sync settings
|
|
DEFAULT_ORG=corteva
|
|
DEFAULT_CALENDAR_DIR=~/Calendar
|
|
SYNC_INTERVAL=300 # 5 minutes
|
|
LOG_LEVEL=INFO
|
|
EOF
|
|
|
|
print_status "Configuration directories created ✓"
|
|
print_warning "Please edit $HOME/.config/luk/config.env with your settings"
|
|
}
|
|
|
|
# Create shell completions
|
|
setup_completions() {
|
|
print_status "Setting up shell completions..."
|
|
|
|
# Get the shell type
|
|
SHELL_TYPE=$(basename "$SHELL")
|
|
|
|
case $SHELL_TYPE in
|
|
bash)
|
|
echo 'eval "$(_LUK_COMPLETE=bash_source luk)"' >> "$HOME/.bashrc"
|
|
print_status "Bash completions added to ~/.bashrc"
|
|
;;
|
|
zsh)
|
|
echo 'eval "$(_LUK_COMPLETE=zsh_source luk)"' >> "$HOME/.zshrc"
|
|
print_status "Zsh completions added to ~/.zshrc"
|
|
;;
|
|
fish)
|
|
echo 'luk --completion | source' >> "$HOME/.config/fish/config.fish"
|
|
print_status "Fish completions added to ~/.config/fish/config.fish"
|
|
;;
|
|
*)
|
|
print_warning "Unsupported shell: $SHELL_TYPE"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run tests
|
|
run_tests() {
|
|
print_status "Running tests..."
|
|
|
|
source .venv/bin/activate
|
|
if uv run pytest tests/ -v; then
|
|
print_status "All tests passed ✓"
|
|
else
|
|
print_warning "Some tests failed, but installation will continue"
|
|
fi
|
|
}
|
|
|
|
# Main installation flow
|
|
main() {
|
|
echo
|
|
echo " luk - Look at your Outlook data locally"
|
|
echo " ========================================="
|
|
echo
|
|
print_status "Starting luk installation..."
|
|
|
|
check_python
|
|
check_uv
|
|
install_package
|
|
setup_config
|
|
setup_completions
|
|
run_tests
|
|
|
|
print_status "Installation completed successfully! 🎉"
|
|
echo
|
|
print_status "To get started:"
|
|
echo " 1. Source your shell profile: source ~/.bashrc (or ~/.zshrc)"
|
|
echo " 2. Configure your settings in ~/.config/luk/config.env"
|
|
echo " 3. Run: luk sync --help"
|
|
echo " 4. Try the dashboard: luk sync run --dashboard"
|
|
echo " 5. Start the daemon: luk sync run --daemon"
|
|
echo
|
|
print_status "For more information, see: https://github.com/timothybendt/luk"
|
|
}
|
|
|
|
# Run the installation
|
|
main "$@" |