Server: Intel NUC - i3-7100U (4 cores @ 2.4GHz), 8GB RAM, 120GB SSD Domain: Custom domain (Hover registrar, Linode DNS) Network: UniFi UDM Pro (local DNS, VPN, firewall) Local Domain: <redacted, available in secrets.nix> for internal services
- Reverse Proxy: Traefik (wildcard SSL via Linode DNS)
- DNS & Ad-blocking: AdGuard Home (split DNS for internal services)
- Security: fail2ban, firewall, systemd isolation
- Monitoring: Prometheus + Grafana + Alertmanager (email alerts)
- DDNS: Linode DNS updates every 5 minutes
- Media Server: Jellyfin
- Media Management: Sonarr, Radarr, Prowlarr, Bazarr
- Media Requests: Jellyseerr
- Usenet: SABnzbd
- Dashboard: Homepage (with live service widgets)
- Backup: Restic + automated snapshots
- Cloud: Nextcloud
- Password Management: Vaultwarden
- Home Automation: Home Assistant
- System: NixOS on main drive
- Media: SMB mount at /mnt/alexandria
- Service Data: /var/lib/* directories
- Clone the repository on your homelab server
- Generate secrets:
./scripts/init-secrets.sh(auto-generates API keys) - Deploy:
./rebuild.sh - Configure Jellyfin API (only service requiring manual setup):
- Go to Jellyfin → Dashboard → API Keys
- Create key named "Homepage"
- Update
secrets.nixwith the key - Rebuild:
./rebuild.sh
homelab/
├── configuration.nix # Main system config
├── hardware-configuration.nix # Auto-generated hardware config
├── services/
│ ├── networking.nix # Traefik, AdGuard Home
│ ├── monitoring.nix # Prometheus, Grafana, Alertmanager
│ ├── ddns.nix # Linode DDNS updates
│ ├── homepage.nix # Dashboard with service widgets
│ ├── home-manager.nix # User environment config
│ └── media/
│ ├── default.nix # Media imports and orchestration
│ ├── common.nix # Shared user/storage config
│ ├── smb-mounts.nix # Network storage mounts
│ ├── jellyfin.nix # Media server
│ ├── sonarr.nix # TV series management
│ ├── radarr.nix # Movie management
│ ├── prowlarr.nix # Indexer manager
│ ├── bazarr.nix # Subtitle management
│ ├── jellyseerr.nix # Request management
│ └── sabnzbd.nix # Usenet downloader
├── scripts/
│ ├── init-secrets.sh # Generate initial secrets
│ ├── extract-configs.sh # Extract service configs
│ └── ddns-update.sh # DDNS update script
├── secrets.nix # Your domains/credentials (git-ignored)
├── secrets.nix.example # Template for secrets
└── rebuild.sh # Enhanced deployment script