Update directory paths from ~/homelab/ to ~/hops/

- Changed macOS deployment directory from ~/homelab/ to ~/hops/
- Updated all core scripts to use new path structure:
  • Main working directory: ~/hops/
  • Config directory: ~/hops/config/
  • Media directory: ~/hops/media/
  • Environment file: ~/hops/.env

- Updated documentation in CLAUDE.md and README.md
- Changed log file naming from homelab-* to hops-*
- Linux paths remain unchanged (/opt/appdata, /mnt/media)

Benefits:
- Better brand consistency with project name
- Cleaner, more professional directory structure
- Shorter, easier to remember paths
- Immediately obvious what directory belongs to HOPS

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Stephen Klein
2025-07-17 22:06:13 -04:00
parent 5affcd2e26
commit d351b6030e
8 changed files with 46 additions and 46 deletions
+5 -5
View File
@@ -86,7 +86,7 @@ sudo tail -f /var/log/hops/hops-main-*.log
sudo tail -f /usr/local/var/log/hops/hops-main-*.log sudo tail -f /usr/local/var/log/hops/hops-main-*.log
# View Docker Compose logs # View Docker Compose logs
cd ~/homelab && docker compose logs -f [service-name] cd ~/hops && docker compose logs -f [service-name]
``` ```
## Service Architecture ## Service Architecture
@@ -96,7 +96,7 @@ All services follow a standardized Docker Compose pattern:
- LinuxServer.io containers with PUID/PGID/TZ environment variables - LinuxServer.io containers with PUID/PGID/TZ environment variables
- Platform-aware volume mounting: - Platform-aware volume mounting:
- **Linux**: `/opt/appdata` for configs, `/mnt/media` for data - **Linux**: `/opt/appdata` for configs, `/mnt/media` for data
- **macOS**: `/Users/[user]/homelab/config` for configs, `/Users/[user]/homelab/media` for data - **macOS**: `/Users/[user]/hops/config` for configs, `/Users/[user]/hops/media` for data
- Health checks for web services - Health checks for web services
- Unified network configuration (`homelab` network) - Unified network configuration (`homelab` network)
- Restart policy: `unless-stopped` - Restart policy: `unless-stopped`
@@ -114,7 +114,7 @@ All services follow a standardized Docker Compose pattern:
### Linux File Structure ### Linux File Structure
``` ```
~/homelab/ # Main deployment directory ~/hops/ # Main deployment directory
├── docker-compose.yml # Generated service definitions ├── docker-compose.yml # Generated service definitions
├── .env # Environment variables ├── .env # Environment variables
└── logs/ # Application logs └── logs/ # Application logs
@@ -131,7 +131,7 @@ All services follow a standardized Docker Compose pattern:
### macOS File Structure ### macOS File Structure
``` ```
~/homelab/ # Main deployment directory ~/hops/ # Main deployment directory
├── docker-compose.yml # Generated service definitions ├── docker-compose.yml # Generated service definitions
├── .env # Environment variables ├── .env # Environment variables
├── logs/ # Application logs ├── logs/ # Application logs
@@ -146,7 +146,7 @@ All services follow a standardized Docker Compose pattern:
## Environment Configuration ## Environment Configuration
Key environment variables in `~/homelab/.env`: Key environment variables in `~/hops/.env`:
- `PUID`/`PGID`: User/group IDs for file permissions - `PUID`/`PGID`: User/group IDs for file permissions
- `TZ`: Timezone configuration - `TZ`: Timezone configuration
- `DATA_ROOT`: Media storage location - `DATA_ROOT`: Media storage location
+6 -6
View File
@@ -162,7 +162,7 @@ The installer will provide URLs for all deployed services:
## 📁 Default Directory Structure ## 📁 Default Directory Structure
``` ```
~/homelab/ # Main homelab directory ~/hops/ # Main deployment directory
├── docker-compose.yml # Service definitions ├── docker-compose.yml # Service definitions
├── .env # Environment variables ├── .env # Environment variables
└── logs/ # Application logs └── logs/ # Application logs
@@ -210,7 +210,7 @@ Configuration is now stored encrypted for enhanced security:
./lib/secrets.sh get PUID # Get values ./lib/secrets.sh get PUID # Get values
./lib/secrets.sh list # List all keys ./lib/secrets.sh list # List all keys
# Legacy: Plaintext configuration in ~/homelab/.env # Legacy: Plaintext configuration in ~/hops/.env
PUID=1000 # User ID PUID=1000 # User ID
PGID=1000 # Group ID PGID=1000 # Group ID
TZ=America/New_York # Timezone TZ=America/New_York # Timezone
@@ -237,7 +237,7 @@ ACME_EMAIL=admin@yourdomain.com
./user-operations stop # Stop all services ./user-operations stop # Stop all services
# Legacy: Direct Docker Compose commands # Legacy: Direct Docker Compose commands
cd ~/homelab cd ~/hops
docker compose ps # View running services docker compose ps # View running services
docker compose logs -f [service-name] # View logs docker compose logs -f [service-name] # View logs
docker compose restart [service-name] # Restart specific service docker compose restart [service-name] # Restart specific service
@@ -302,7 +302,7 @@ sudo ./hops.sh
#### Service Won't Start #### Service Won't Start
```bash ```bash
# Check service logs # Check service logs
cd ~/homelab cd ~/hops
docker compose logs [service-name] docker compose logs [service-name]
# Restart service # Restart service
@@ -334,7 +334,7 @@ sudo chown -R $USER:$USER /mnt/media /opt/appdata
sudo tar -czf hops-config-backup.tar.gz /opt/appdata sudo tar -czf hops-config-backup.tar.gz /opt/appdata
# Backup compose files # Backup compose files
cp ~/homelab/.env ~/homelab/docker-compose.yml /backup/location/ cp ~/hops/.env ~/hops/docker-compose.yml /backup/location/
``` ```
### Recovery ### Recovery
@@ -343,7 +343,7 @@ cp ~/homelab/.env ~/homelab/docker-compose.yml /backup/location/
sudo tar -xzf hops-config-backup.tar.gz -C / sudo tar -xzf hops-config-backup.tar.gz -C /
# Redeploy services # Redeploy services
cd ~/homelab cd ~/hops
docker compose up -d docker compose up -d
``` ```
+4 -4
View File
@@ -158,10 +158,10 @@ check_system_requirements() {
get_installation_status() { get_installation_status() {
local status="not_installed" local status="not_installed"
local homelab_dirs=( local homelab_dirs=(
"$HOME/homelab" "$HOME/hops"
"/home/*/homelab" "/home/*/hops"
"/opt/homelab" "/opt/hops"
"/srv/homelab" "/srv/hops"
) )
# Check for existing installation # Check for existing installation
+3 -3
View File
@@ -591,7 +591,7 @@ EOF
# DOCKER COMPOSE FILE GENERATION # DOCKER COMPOSE FILE GENERATION
# -------------------------------------------- # --------------------------------------------
generate_docker_compose() { generate_docker_compose() {
local HOMELAB_DIR="$HOME/homelab" local HOMELAB_DIR="$HOME/hops"
mkdir -p "$HOMELAB_DIR" mkdir -p "$HOMELAB_DIR"
cd "$HOMELAB_DIR" cd "$HOMELAB_DIR"
@@ -778,7 +778,7 @@ EOF
find "$APPDATA_DIR" -name "*.pem" -exec chmod 600 {} \; 2>/dev/null || true find "$APPDATA_DIR" -name "*.pem" -exec chmod 600 {} \; 2>/dev/null || true
# Set secure permissions on homelab directory # Set secure permissions on homelab directory
chmod 750 "$HOME/homelab" chmod 750 "$HOME/hops"
log "✅ Security hardening applied" log "✅ Security hardening applied"
} }
@@ -884,7 +884,7 @@ EOF
log "📋 Deployment Summary:" log "📋 Deployment Summary:"
echo -e "\n📂 Configuration:" echo -e "\n📂 Configuration:"
echo " • Homelab Directory: $HOME/homelab" echo " • Homelab Directory: $HOME/hops"
echo " • Application Data: $APPDATA_DIR" echo " • Application Data: $APPDATA_DIR"
echo " • Media Directory: $MEDIA_DIR" echo " • Media Directory: $MEDIA_DIR"
echo " • User/Group: $RUNNING_USER ($PUID:$PGID)" echo " • User/Group: $RUNNING_USER ($PUID:$PGID)"
+9 -9
View File
@@ -433,12 +433,12 @@ check_docker_access() {
# Generate Docker Compose configuration # Generate Docker Compose configuration
generate_docker_compose() { generate_docker_compose() {
local services=("$@") local services=("$@")
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
info "📝 Generating Docker Compose configuration..." info "📝 Generating Docker Compose configuration..."
# Create homelab directory # Create homelab directory
mkdir -p "$HOME/homelab" mkdir -p "$HOME/hops"
# Generate compose file header # Generate compose file header
cat > "$compose_file" << EOF cat > "$compose_file" << EOF
@@ -473,7 +473,7 @@ EOF
# Deploy services # Deploy services
deploy_services() { deploy_services() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -481,7 +481,7 @@ deploy_services() {
info "🚀 Deploying services..." info "🚀 Deploying services..."
cd "$HOME/homelab" cd "$HOME/hops"
# Pull images # Pull images
if docker compose pull; then if docker compose pull; then
@@ -500,7 +500,7 @@ deploy_services() {
# Stop services # Stop services
stop_services() { stop_services() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -508,7 +508,7 @@ stop_services() {
info "🛑 Stopping services..." info "🛑 Stopping services..."
cd "$HOME/homelab" cd "$HOME/hops"
if docker compose down; then if docker compose down; then
success "Services stopped successfully" success "Services stopped successfully"
@@ -519,7 +519,7 @@ stop_services() {
# Show service status # Show service status
show_service_status() { show_service_status() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -527,7 +527,7 @@ show_service_status() {
info "📊 Service status:" info "📊 Service status:"
cd "$HOME/homelab" cd "$HOME/hops"
docker compose ps docker compose ps
} }
@@ -563,7 +563,7 @@ main() {
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
error_exit "Usage: $0 logs <service_name>" error_exit "Usage: $0 logs <service_name>"
fi fi
cd "$HOME/homelab" cd "$HOME/hops"
docker compose logs -f "$1" docker compose logs -f "$1"
;; ;;
+4 -4
View File
@@ -379,7 +379,7 @@ run_system_checks() {
# Get platform-specific default paths # Get platform-specific default paths
get_default_media_path() { get_default_media_path() {
if [[ "$OS_NAME_LOWER" == "macos" ]]; then if [[ "$OS_NAME_LOWER" == "macos" ]]; then
echo "/Users/$USER/homelab/media" echo "/Users/$USER/hops/media"
else else
echo "/mnt/media" echo "/mnt/media"
fi fi
@@ -387,7 +387,7 @@ get_default_media_path() {
get_default_config_path() { get_default_config_path() {
if [[ "$OS_NAME_LOWER" == "macos" ]]; then if [[ "$OS_NAME_LOWER" == "macos" ]]; then
echo "/Users/$USER/homelab/config" echo "/Users/$USER/hops/config"
else else
echo "/opt/appdata" echo "/opt/appdata"
fi fi
@@ -395,9 +395,9 @@ get_default_config_path() {
get_default_homelab_path() { get_default_homelab_path() {
if [[ "$OS_NAME_LOWER" == "macos" ]]; then if [[ "$OS_NAME_LOWER" == "macos" ]]; then
echo "/Users/$USER/homelab" echo "/Users/$USER/hops"
else else
echo "/home/$USER/homelab" echo "/home/$USER/hops"
fi fi
} }
+6 -6
View File
@@ -14,7 +14,7 @@ uninstall_hops() {
# LOGGING SETUP # LOGGING SETUP
# -------------------------------------------- # --------------------------------------------
local LOG_DIR="/var/log/hops" local LOG_DIR="/var/log/hops"
local LOG_FILE="$LOG_DIR/homelab-uninstall-$(date +%Y%m%d-%H%M%S).log" local LOG_FILE="$LOG_DIR/hops-uninstall-$(date +%Y%m%d-%H%M%S).log"
mkdir -p "$LOG_DIR" mkdir -p "$LOG_DIR"
touch "$LOG_FILE" touch "$LOG_FILE"
@@ -125,16 +125,16 @@ EOF
# -------------------------------------------- # --------------------------------------------
find_homelab_directory() { find_homelab_directory() {
local POSSIBLE_DIRS=( local POSSIBLE_DIRS=(
"$HOME/homelab" "$HOME/hops"
"/home/*/homelab" "/home/*/hops"
"/opt/homelab" "/opt/hops"
"/srv/homelab" "/srv/hops"
) )
# Try to find from running user's home first # Try to find from running user's home first
if [[ -n "$SUDO_USER" ]]; then if [[ -n "$SUDO_USER" ]]; then
local user_home=$(eval echo "~$SUDO_USER") local user_home=$(eval echo "~$SUDO_USER")
POSSIBLE_DIRS=("$user_home/homelab" "${POSSIBLE_DIRS[@]}") POSSIBLE_DIRS=("$user_home/hops" "${POSSIBLE_DIRS[@]}")
fi fi
HOMELAB_DIR="" HOMELAB_DIR=""
+9 -9
View File
@@ -29,12 +29,12 @@ check_docker_access() {
# Generate Docker Compose configuration # Generate Docker Compose configuration
generate_docker_compose() { generate_docker_compose() {
local services=("$@") local services=("$@")
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
info "📝 Generating Docker Compose configuration..." info "📝 Generating Docker Compose configuration..."
# Create homelab directory # Create homelab directory
mkdir -p "$HOME/homelab" mkdir -p "$HOME/hops"
# Generate compose file header # Generate compose file header
cat > "$compose_file" << EOF cat > "$compose_file" << EOF
@@ -69,7 +69,7 @@ EOF
# Deploy services # Deploy services
deploy_services() { deploy_services() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -77,7 +77,7 @@ deploy_services() {
info "🚀 Deploying services..." info "🚀 Deploying services..."
cd "$HOME/homelab" cd "$HOME/hops"
# Pull images # Pull images
if docker compose pull; then if docker compose pull; then
@@ -96,7 +96,7 @@ deploy_services() {
# Stop services # Stop services
stop_services() { stop_services() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -104,7 +104,7 @@ stop_services() {
info "🛑 Stopping services..." info "🛑 Stopping services..."
cd "$HOME/homelab" cd "$HOME/hops"
if docker compose down; then if docker compose down; then
success "Services stopped successfully" success "Services stopped successfully"
@@ -115,7 +115,7 @@ stop_services() {
# Show service status # Show service status
show_service_status() { show_service_status() {
local compose_file="$HOME/homelab/docker-compose.yml" local compose_file="$HOME/hops/docker-compose.yml"
if [[ ! -f "$compose_file" ]]; then if [[ ! -f "$compose_file" ]]; then
error_exit "Docker Compose file not found: $compose_file" error_exit "Docker Compose file not found: $compose_file"
@@ -123,7 +123,7 @@ show_service_status() {
info "📊 Service status:" info "📊 Service status:"
cd "$HOME/homelab" cd "$HOME/hops"
docker compose ps docker compose ps
} }
@@ -159,7 +159,7 @@ main() {
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
error_exit "Usage: $0 logs <service_name>" error_exit "Usage: $0 logs <service_name>"
fi fi
cd "$HOME/homelab" cd "$HOME/hops"
docker compose logs -f "$1" docker compose logs -f "$1"
;; ;;