4
Hosts
8
GPUs
40
Pods
Akash
Provider

NixOS Homelab
Infrastructure

A 4-host Kubernetes cluster with GPU compute, distributed storage, and decentralized cloud hosting on Akash Network.

Scroll to explore

Mining Infrastructure Meets Cloud Native

The Challenge

Managing 4 NixOS hosts, 8 GPUs across mining and Kubernetes workloads, with centralized configuration and monitoring.

The Solution

A custom NixOS framework with profile-based config management, NFS synchronization, and Kubernetes service mesh for unified cluster operations.
78
CPU Cores
123GB
RAM
8
GPUs
8.4TB
Storage

Infrastructure Innovation

NFS Config Sync

NixOS configurations stored on NFS share. Changes to /etc/nixos propagate to all hosts via auto-mount, enabling single-source-of-truth cluster management.

Profile System

50+ Justfile commands organized by profile (desktop, gaming, k8s, mining). Run 'just desktop' to rebuild desktop environment, 'just k8s' to manage cluster, 'just mining' to control GPU workloads.

Custom NixOS Modules

Local flake with reusable modules: mining.bash (GPU management), llm.nix (vLLM integration), cluster.nix (K8s setup). Composable infrastructure as code.

Operations & Automation

Automated Deployments

NixOS rebuilds trigger automatic service restarts. Kubernetes deployments via GitOps-style manifests. Mining operations auto-restart on GPU availability.

Service Mesh

Flannel CNI for pod networking, CoreDNS for service discovery, statefulsets for databases. Prometheus + Grafana for monitoring and alerting.

Observability

Centralized logging with Promtail, metrics collection with Prometheus, visualization in Grafana. Alertmanager for incident response.

Cluster Capabilities

Hardware Infrastructure

78 CPU cores, 123GB RAM, 8 GPUs (RTX 3090 (24GB), RTX 3060 Ti (8GB), RTX 3060 Ti (8GB), RTX 4060 (8GB), RTX 4060 (8GB), RX 5700 XT (8GB), RX 5700 XT (8GB), RX 5600 XT (4GB)), 8.4TB storage across 4 hosts. Mining capacity: 4 GPUs. Kubernetes capacity: 4 GPUs.

AI/ML Services

n8n for AI workflows, Qdrant for vector search, vLLM for local LLM inference, OpenAI-compatible API gateway with middleware (rate limiting, circuit breaker, Redis caching).

Akash Cloud Provider

Status: AUDITED & READY
GPUs: RTX 3060 Ti (8GB) - mining<br>RTX 3090 (24GB) - mining<br>RTX 4060 (8GB) - available<br>RTX 4060 (8GB) - available<br>RTX 3060 Ti (8GB) - mining
Storage: beta2 (HDD), beta3 (NVMe), ram
Endpoints: provider.reverb256.ca, *.ingress.provider.reverb256.ca
Active Leases: 0

Infrastructure Timeline

The Journey

1
Before Sept 2025

Windows + Proxmox

Dual-boot setup with Proxmox servers for testing, Windows as daily driver

🎯
September 2025

Killed Windows

Full commitment to Linux. Started distro hopping journey.

3
Sept 2025 - Feb 2026

OS Evolution

Omarchy (Arch-based) → CachyOS (optimized Arch) → NixOS (declarative + reproducible)

4
March 2, 2026

NixOS Initial Commit

First NixOS configuration. Single host (zephyr) with basic desktop + gaming

5
March 3, 2026

AI Gateway v1.0

OpenAI-compatible API, mining infrastructure, multi-GPU support

6
March 4, 2026

Gateway v2.0

Middleware architecture with circuit breaker, rate limiting, Redis caching

7
Mid-March 2026

Cluster Expansion

Added nexus, forge, sentry. Implemented NFS config sync, profile system, 50+ Justfile commands

8
March 19, 2026

K8s Phase 1-3: Foundation

Control plane, Flannel CNI, CoreDNS, stateful services (GlitchTip PostgreSQL)

9
March 19, 2026

K8s Phase 4-5: Services & GPU

Stateless services (GlitchTip web/worker, SearXNG, n8n), GPU workloads (llama.cpp)

10
March 21, 2026

K8s Phase 6-7: Monitoring & Akash

Prometheus + Grafana monitoring, Akash provider with 5 GPUs, audited & ready

Code Explorer

Code Patterns

Overview.nix
# NixOS Configuration Pattern
{
  # Declarative system configuration
  boot.loader.systemd-boot.enable = true;

  # Network setup
  networking.networkmanager.enable = true;

  # User management
  users.users.jkro = {
    isNormalUser = true;
    extraGroups = [ "wheel" "networkmanager" ];
  };

  # System packages
  environment.systemPackages = with pkgs; [
    vim git curl wget
  ];
}