# Homelab Setup

## Overview
Setting up a personal homelab using a ThinkPad laptop running Arch Linux to move away from cloud providers like Google.

## Goals
- [x] Linux installation (Arch Linux on ThinkPad)
- [x] SSH remote access (hostname: homelab)
- [x] Dotfiles and development environment setup
- [x] Network domain setup with SSL certificates
- [x] Self-hosted file server with WebDAV (copyparty)
- [x] Self-hosted git repository (Gitea)
- [x] Self-hosted media server (Jellyfin)
- [x] AI voice assistant (local TTS with Piper)
- [x] Reverse proxy with nginx for multiple services
- [x] Geographic IP blocking (geoip-shell whitelist)
- [ ] Gradual migration from commercial cloud services

## Hardware
- **Main Server**: ThinkPad laptop
- **Development**: Windows PC with WSL (for AI experimentation)
- **Android tablet**: Not good for long-term work but can be useful for short SSH sessions
  - Runs Manjaro in a VM, same OS like the laptop

## Development Tools
- **Claude Code**: Primary AI coding assistant (via CLI)
- **OpenCode**: Tested alternative - excellent tool, better than Claude Code in some ways, but causes laptop overheating issues during intensive use

## Inspiration & Resources
- PewDiePie homelab setup video: https://www.youtube.com/watch?v=u_Lxkt50xOg
  - Need to collect tips and inspiration from this video

## Current Status
- ✅ Arch Linux installed on ThinkPad
- ✅ SSH access configured (accessible as `homelab`)
- ✅ Dotfiles management with yadm configured and merged
- ✅ Development environment setup completed
- ✅ Network domain setup (DuckDNS + Nginx reverse proxy + SSL)
- ✅ Geographic IP blocking (geoip-shell whitelist for European countries)
- ✅ Gitea Git server running (Docker container)
- ✅ Copyparty file server with working WebDAV support
- ✅ Jellyfin media server (Docker container)
- ✅ AI voice assistant with local TTS (Piper + FastAPI)
- ✅ All services accessible via HTTPS with proper SSL certificates
- Next: Additional self-hosted services, backup solutions

## Documentation Structure

### Quick Start Guide
1. **System Setup**: Follow [docs/system-setup.md](docs/system-setup.md) for Arch installation and configuration
2. **Network Security**: Configure SSH, DNS, and VPN using [docs/network-security.md](docs/network-security.md)
3. **Services**: Plan and deploy applications from [docs/services.md](docs/services.md)
4. **Voice Assistant**: Set up AI voice capabilities with [docs/voice-assistant.md](docs/voice-assistant.md)
5. **Tasks**: Track progress in [TODO.md](TODO.md)
6. **Issues**: Find solutions in [docs/troubleshooting/](docs/troubleshooting/)

### Repository Structure
```
homelab/
├── README.md                    # This overview
├── TODO.md                     # Task tracking
├── docs/                       # Detailed documentation
│   ├── system-setup.md         # Arch Linux installation & config
│   ├── network-security.md     # SSH, DNS, VPN, firewall
│   ├── geoip-blocking.md       # Geographic IP blocking setup
│   ├── services.md             # Self-hosted services
│   ├── voice-assistant.md      # AI voice setup with Piper TTS
│   └── troubleshooting/         # Solutions & troubleshooting guides
├── config/                     # Configurations & scripts
│   ├── docker/gitea/           # Gitea container setup
│   ├── docker/jellyfin/        # Jellyfin media server setup
│   ├── docker/nextcloud/       # Nextcloud config (tested but disabled)
│   ├── copyparty/              # Copyparty file server configuration
│   ├── nginx/                  # Reverse proxy configs
│   ├── www/                    # Landing page HTML
│   └── scripts/                # Utility scripts
├── voice-server/               # AI voice assistant server
│   ├── src/voice_server/       # FastAPI application
│   ├── pyproject.toml          # Poetry dependencies
│   └── README.md               # Voice server documentation
└── scripts/                    # Convenience scripts
    ├── enable-voice.sh         # Start voice assistant
    └── disable-voice.sh        # Stop voice assistant
```

### Documentation Files
- **[docs/system-setup.md](docs/system-setup.md)** - Complete Arch Linux installation, TTY config, desktop setup
- **[docs/network-security.md](docs/network-security.md)** - SSH hardening, DuckDNS, WireGuard VPN, firewall setup
- **[docs/geoip-blocking.md](docs/geoip-blocking.md)** - Geographic IP blocking with geoip-shell whitelist
- **[docs/services.md](docs/services.md)** - Self-hosted services: Git hosting, cloud storage, media server
- **[docs/voice-assistant.md](docs/voice-assistant.md)** - AI voice assistant setup with Piper TTS and FastAPI
- **[TODO.md](TODO.md)** - Centralized task list with progress tracking by category
- **[docs/troubleshooting/](docs/troubleshooting/)** - Hardware issues, software problems, and solutions
  - **[docs/troubleshooting/webdav-copyparty.md](docs/troubleshooting/webdav-copyparty.md)** - WebDAV troubleshooting guide

### Current Configuration
- **System**: Arch Linux with XFCE desktop, ter-124b TTY font, Colemak layout
- **Network**: Static IP (192.168.0.100), SSH port 2222, DuckDNS (ak-homelab.duckdns.org)
- **Services**: Nginx reverse proxy, Gitea Git server, Copyparty file server with WebDAV, Jellyfin media server, AI voice assistant
- **Security**: SSH hardened, SSL certificates active, WebDAV authentication enabled, geographic IP blocking (geoip-shell whitelist)
- **Development**: yadm dotfiles, tmux with temperature monitoring, zsh with proper history
