- .13: KDE Plasma 6 (not Niri); RAM 15GB; disk letters corrected (root is /dev/sda2, storage sdb2, data sdc2, ubuntu_storage sdd1); add sda3 swap (81% full) - .13 GPU: GTX 760 dead, no driver bound, software rendering - .27: 4 cores/8 threads, Quadro P620 + HD 630, add swap + NTFS disk - add Resource Pressure on .13 section and must-stay-on list - note dead stacks (airflow 24GB logs, engram container) and caveats
242 lines
11 KiB
Markdown
242 lines
11 KiB
Markdown
---
|
|
name: system-architect
|
|
description: Sam's NixOS multi-machine infrastructure. Use for any task involving system config, cross-machine deployment, Docker, audio (Snapcast), MQTT (Mosquitto), NixOS flakes, Ubuntu, Sys Config, Nvim, Home Assistant.
|
|
compatibility: NixOS 25.11+, Home Manager, flakes
|
|
metadata:
|
|
machines:
|
|
- name: sam-4screen-desktop
|
|
ip: 192.168.20.27
|
|
type: Desktop
|
|
os: "NixOS, Niri"
|
|
role: Main dev machine. Sync to sam-ubuntu1.
|
|
tech: Mainly terminal dev work with Nvim, Opencode, Pi dev code.
|
|
hardware:
|
|
cpu:
|
|
model: "Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz"
|
|
cores: 4
|
|
threads: 8
|
|
ram:
|
|
total_gb: 62
|
|
gpu:
|
|
- Intel HD Graphics 630 (i915) — drives the 4 display outputs
|
|
- NVIDIA Quadro P620 2GB (nvidia 580.173.02)
|
|
disks:
|
|
- device: /dev/nvme0n1p2
|
|
size: 869G
|
|
mountpoint: /
|
|
note: "ext4, 66% used (2026-10-05)"
|
|
- device: /dev/nvme0n1p3
|
|
size: 69G
|
|
mountpoint: "[SWAP]"
|
|
- device: efivarfs
|
|
size: 256K
|
|
mountpoint: /sys/firmware/efi/efivars
|
|
- device: /dev/nvme0n1p1
|
|
size: 1022M
|
|
mountpoint: /boot
|
|
- device: /dev/sda2
|
|
size: 224G
|
|
mountpoint: "(not mounted)"
|
|
note: NTFS
|
|
verified: 2026-10-05
|
|
- name: nixos-desktop
|
|
type: Desktop
|
|
ip: 192.168.20.13
|
|
os: "NixOS 26.11 (Zokor), KDE Plasma 6 / KWin Wayland (SDDM)"
|
|
role: Always-on web-facing server. Docker host + native services. Memory-bound — do not treat as CPU-bound.
|
|
tech: Docker (OmniRoute, Outline, n8n, Pi-hole replica + nebulasync, Mosquitto, voice_bridge/voice_whisper, speech_piper, pocketbase, family-home-lab, dsh, worldmonitor, prefect, litellm, headroom/JEV), Caddy :8000 serving /var/www, snapcast, librespot, mopidy, native PostgreSQL :5433 (paperclip), paperclipai, Paseo Daemon, where-woof
|
|
hardware:
|
|
cpu:
|
|
model: "AMD Ryzen 5 5600 6-Core Processor"
|
|
cores: 6
|
|
threads: 12
|
|
ram:
|
|
total_gb: 15
|
|
note: "6.8 GiB used; swap 7.1 GiB of 8.8 GiB used (81%) - 2026-10-05"
|
|
gpu:
|
|
- "NVIDIA GTX 760 (Kepler, PCI 10de:11c2) - DEAD. No driver bound; only /dev/dri/card0 simple-framebuffer. /proc/driver/nvidia absent. Desktop renders via software (llvmpipe). hardware.nvidia.open=true can never work on Kepler (open modules need Turing+). Recommended replacement: AMD RX 6600 (in-kernel amdgpu)."
|
|
disks:
|
|
- device: /dev/sda2
|
|
size: 907G
|
|
mountpoint: /
|
|
note: "ext4, 459G used (54%) - 2026-10-05"
|
|
- device: /dev/sda3
|
|
size: 8.8G
|
|
mountpoint: "[SWAP]"
|
|
note: "81% full - the main resource problem on this machine"
|
|
- device: /dev/sda1
|
|
size: 1022M
|
|
mountpoint: /boot
|
|
- device: /dev/sdb2
|
|
size: 916G
|
|
mountpoint: /mnt/storage
|
|
note: empty spare
|
|
- device: /dev/sdc2
|
|
size: 1.8T
|
|
mountpoint: /mnt/data
|
|
note: "21% used"
|
|
- device: /dev/sdd1
|
|
size: 2.7T
|
|
mountpoint: /mnt/ubuntu_storage_3TB
|
|
note: "USB drive - photo master + Borg backup target for .27 and .13. Letter shifts on replug (has been sdd1/sde1)."
|
|
- device: /dev/sde1
|
|
size: 1.4T
|
|
mountpoint: "(not mounted)"
|
|
note: MaxtorBackup, old migration tarballs
|
|
caveats:
|
|
- "Device letters are NOT stable - NixOS mounts by UUID. Always check lsblk/df before using a device path."
|
|
- "GPU is dead: no hardware acceleration. KDE session costs ~2.4 GB because of software rendering plus 28-day uptime."
|
|
- "litellm and headroom are idle and almost entirely swapped out (~1.05 GB of swap combined)."
|
|
- "Dead stacks to ignore: airflow (7 containers exited, 24 GB of logs in /home/sam/deployment/airflow/logs), engram container (never started - the live engram is a user systemd service on :7437 and its DB is empty), trigger_dev, t3_stack_react, sams-home-network."
|
|
- "There is a SECOND airflow install at /home/sam/deployment/ai-resume/airflow/ - also not running."
|
|
verified: 2026-10-05
|
|
- name: sam-ubuntu1
|
|
type: virtual machine
|
|
ip: 192.168.20.35
|
|
os: Ubuntu
|
|
role: Ubuntu in Virtual Machine on Proxmox. Docker Machine for home network.
|
|
tech: Mainly Docker
|
|
hardware:
|
|
cpu:
|
|
model: "Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz"
|
|
cores: 2
|
|
threads: 2
|
|
ram:
|
|
total_gb: 14.2
|
|
gpu:
|
|
disks:
|
|
- device: /dev/sda2
|
|
size: 442G
|
|
mountpoint: /
|
|
- device: "//192.168.20.23/usb_3tb"
|
|
size: 2.7T
|
|
mountpoint: /mnt/nfs_usb_3tb
|
|
- name: home-assistant
|
|
type: virtual machine
|
|
ip: 192.168.20.30
|
|
os: Home Assistant OS
|
|
role: Runs Home Assistant in a virtual machine on Proxmox Hypervisor
|
|
tech: Home Assistant OS
|
|
- name: file-server
|
|
type: virtual machine
|
|
ip: 192.168.20.23
|
|
os:
|
|
role: File server on Proxmox Hypervisor
|
|
tech: File Server
|
|
- name: proxmox-backup
|
|
type: virtual machine
|
|
ip: 192.168.20.48
|
|
os: Proxmox Backup Server
|
|
role: Runs standard proxmox backup server
|
|
tech: Proxmox
|
|
- name: proxmox
|
|
type: hypervisor
|
|
ip: 192.168.20.28
|
|
os: Proxmox VE
|
|
role: Hypervisor hosting all VMs (sam-ubuntu1 .35, file-server .23, home-assistant .30, proxmox-backup .48)
|
|
tech: Web UI https://192.168.20.28:8006, SSH root@192.168.20.28
|
|
- name: skinnyspeakers
|
|
type: raspberry pi
|
|
ip: 192.168.20.24
|
|
os: Raspbian 12 (bookworm)
|
|
role: Speaker/audio client, likely Snapcast speaker. Identified 2026-08-29 (was previously unknown .24)
|
|
tech: SSH sam@192.168.20.24
|
|
- name: sam-thinkpad
|
|
type: Laptop
|
|
ip: 192.168.20.51
|
|
os: "NixOS, Niri"
|
|
role: Portable dev laptop. Third pi machine. On-the-go + at home.
|
|
tech: pi, Neovim, Home Manager. ThinkPad L14 Gen 2 AMD.
|
|
hardware:
|
|
cpu:
|
|
model: "AMD Ryzen 5 PRO 5650U with Radeon Graphics"
|
|
cores: 6
|
|
threads: 12
|
|
ram:
|
|
total_gb: 14
|
|
gpu:
|
|
disks:
|
|
- device: /dev/nvme0n1
|
|
size: 238G
|
|
mountpoint: /
|
|
network:
|
|
- sam-4screen-desktop has ssh keys to sam-ubuntu1 and nixos-desktop
|
|
- "Gitea: Docker on .35 (gitea-server-1 + gitea-db-1) — web .35:3001, SSH .35:2222. pi-config repo: ssh://git@gitea.lab.audasmedia.com.au:2222/sam/pi-config.git"
|
|
- "pi: Nix-managed pi-coding-agent 0.82.1 on all three (uniform); pi-tool-display global; pi-lsp-extension per-project"
|
|
- "Each machine has its own ~/.agents clone of pi-config — a push from .27 does NOT auto-update .13/.51"
|
|
- "DNS: Pi Hole on sam-ubuntu1 in docker"
|
|
- "Reverse Proxy: Caddy on sam-ubuntu1 in docker"
|
|
- "pihole main: sam-ubuntu1"
|
|
- "pihole redundancy: nixos-desktop"
|
|
- "Router Main: 192.168.20.1"
|
|
- "Router Second: 192.168.20.254"
|
|
- "Proxmox VE host: 192.168.20.28 (web UI :8006); PBS: 192.168.20.48 (:8007)"
|
|
- "External IP: 144.6.86.11 (NOT 173.231.229.92 — that's InMotion's server)"
|
|
- "Website: Audasmedia.com.au redirects to local *.lab.audasmedia.com.au"
|
|
---
|
|
|
|
# System Architect
|
|
|
|
Sam's NixOS multi-machine infrastructure reference.
|
|
|
|
## Machines
|
|
|
|
| Machine | IP | Type | OS | Role |
|
|
|---------|-----|------|-----|------|
|
|
| sam-4screen-desktop | 192.168.20.27 | Desktop | NixOS + Niri | Main dev machine |
|
|
| nixos-desktop | 192.168.20.13 | Desktop | NixOS + Niri | Second dev, web facing, Docker services |
|
|
| sam-thinkpad | 192.168.20.51 | Laptop | NixOS + Niri | Portable dev laptop |
|
|
| sam-ubuntu1 | 192.168.20.35 | VM | Ubuntu | Docker host for home network services |
|
|
| home-assistant | 192.168.20.30 | VM | HA OS | Home automation |
|
|
| file-server | 192.168.20.23 | VM | - | File server |
|
|
| proxmox-backup | 192.168.20.48 | VM | PBS | Proxmox backup server |
|
|
| proxmox | 192.168.20.28 | Host | Proxmox VE | Hypervisor — hosts all VMs (.23/.30/.35/.48), web UI :8006 |
|
|
| skinnyspeakers | 192.168.20.24 | Pi | Raspbian 12 | Speaker/audio client (Snapcast?) — identified 2026-08-29 |
|
|
|
|
## Network
|
|
|
|
- DNS: Pi Hole on sam-ubuntu1 (Docker), redundancy on nixos-desktop
|
|
- Reverse Proxy: Caddy on sam-ubuntu1
|
|
- Proxmox VE host: 192.168.20.28 (web UI :8006); PBS: 192.168.20.48 (:8007)
|
|
- Router: 192.168.20.1 (main), 192.168.20.254 (secondary)
|
|
- External IP: 144.6.86.11 (NOT 173.231.229.92 — that's InMotion's server)
|
|
- Website: audasmedia.com.au → *.lab.audasmedia.com.au
|
|
|
|
## Web Deploy Sync (.27 → .13)
|
|
|
|
- **Manual lsyncd** (not a service): config `~/.config/lsyncd/lsyncd.conf.lua` on .27 → rsync+ssh to `.13` `/var/www/<site>` (`delete = true`).
|
|
- Sites: `sprinklers` (zola/sprinkler/public), `sam-developer` + `sam-devops` (home_network/web_sites/*/dist) — see config for the full list.
|
|
- Permissions (.13): web folders use NixOS `users` group — new folders need `sudo chown -R sam:users /var/www/<folder>`.
|
|
- Secrets: `~/.config/environment.d/10-secrets.conf` (env keys, kept out of the git-tracked Nix store).
|
|
|
|
Full hardware specs are in the frontmatter metadata.
|
|
|
|
## Resource Pressure on .13 (verified 2026-10-05)
|
|
|
|
`.13` is **memory-bound, not CPU-bound**. Load average is ~0.27 on 12 threads, but the
|
|
8.8 GB swap partition is **81% full**. Before proposing anything that adds load to `.13`,
|
|
check the swap. Full detail: Obsidian → `300 areas/360 Dev-Ops Network Computers/Resource Use — .13 CPU & RAM.md`.
|
|
|
|
| Consumer | RAM + swap | Notes |
|
|
|---|---|---|
|
|
| KDE Plasma session (~30 processes) | ~2.4 GB | Software rendering (GPU dead) + 28-day uptime |
|
|
| Docker containers (all) | ~3.5 GB RSS | `voice_whisper` 877 MB is the largest |
|
|
| `litellm` + `headroom` | ~1.05 GB *swap* | Idle; both fully paged out; redundant with OmniRoute |
|
|
| Dead Airflow logs | 24 GB *disk* | `/home/sam/deployment/airflow/logs` — nothing depends on it |
|
|
|
|
**Must stay on `.13`:** Pi-hole `:53`, OmniRoute `:20128/20129` (all pi LLM traffic),
|
|
Mosquitto `:1883` (Home Assistant on `.30`), the Borg backup target on `/mnt/ubuntu_storage_3TB`
|
|
(`.27` pushes daily at 04:00), Caddy `:8000` + `/var/www`.
|
|
|
|
**Corrections applied 2026-10-05:** `.13` runs **KDE Plasma 6**, not Niri. `.13` disk device
|
|
letters were wrong (root is `/dev/sda2`). Home Assistant is on **`.30`, not `.35`** (`.35` is
|
|
`sam-ubuntu1`, the Caddy/docker app host). Pi-hole primary is **`.35`**; `.13` is the replica
|
|
(confirmed from `nebulasync`: `PRIMARY=http://192.168.20.35`, `REPLICAS=http://192.168.20.13`).
|
|
|
|
## Pi Agent (uniform across machines)
|
|
|
|
- **Binary**: nixpkgs `pi-coding-agent` 0.82.1 in `home.packages` on .27/.13/.51 (Nix-managed; npx wrapper + npm-global install removed 2026-08-05). Updates = nixpkgs flake bump + rebuild.
|
|
- **Assets**: `~/.agents` (git → Gitea `pi-config` on .35). Each machine has its OWN clone — update each machine's repo individually (`git -C ~/.agents pull`).
|
|
- **Global settings**: `~/.pi/agent/settings.json` — home.nix-managed on .27/.51; plain file on .13 (`chmod 600`, keys inline, outside any git repo). Same content: Gitea source (tavily-search, pi-config, pi-tool-display), skills (nixos-workflow), themes, prompts.
|
|
- **pi-tool-display**: global renderer (0 tools, 0 token cost). **pi-lsp-extension**: per-project via `/config-add ext pi-lsp-extension`. See `Obsidian → 350 AI → Pi Agent Extensions & Skills.md` for details.
|