Skip to content

p510 — Media Server & Workstation

Last Updated: 2026-09-01

An Intel Xeon box that runs the media stack, a small k3s cluster and — since 2026-08-31 — a full Omarchy desktop on its own monitor.

Profile workstation
host.class workstation (was headless-rdp until this host got a monitor)
GPU NVIDIA RTX 3070 Ti @ 03:00.0 — proprietary driver, hardware transcoding
Session Omarchy on Hyprland (default) or GNOME, via Omarchy's SDDM
Login Autologin on — see below
Remote Sunshine → Moonlight
NFS exports /mnt/data to 192.168.1.*
Boot standard, Omarchy Plymouth theme
Source hosts/p510/

Never build or deploy p510 without asking first

This is the always-on media server for the house. Deploys are requested and approved explicitly, never taken as implied by a change that touches it.

Why this host is shaped the way it is

p510 pairs a power-efficient Xeon with an NVIDIA card specifically for Plex transcoding, and stays on around the clock for that reason.

It was headless for most of its life: GDM autologged into GNOME and gnome-remote-desktop served that session over RDP. Then it got a monitor. The three settings that had held Omarchy at arm's length were inverted and it now follows the same template as p620 and razer — see Desktop (Nixarchy).

GNOME stays installed and selectable at the greeter; it is simply no longer the session this host boots into.

Two deliberate divergences from p620 / razer

p510 p620 / razer Why
programs.nixarchy.preinstalls false true Omarchy's desktop preinstalls are ~4 GiB more closure (cef-binary alone is 1.9 GiB) and would take / from 50.5 to 57.6 GiB, ~80% full
Autologin on off Sunshine is a systemd user service that only exists inside a live graphical session. On a host that reboots unattended, the alternative is a greeter nobody is there to answer and no remote desktop until someone walks over to it

Autologin is off on razer specifically because PRIME-sync Optimus hardware misbehaves with a greeter respawn; p510 is pure NVIDIA without PRIME, so that reason does not apply here.

What runs here

Media stack

  • Plex media server with NVIDIA hardware transcoding.
  • NZBGet, Sonarr, Radarr.
  • recyclarr-sync — keeps *arr quality profiles in shape.
  • FlareSolverr — Cloudflare-challenge proxy for indexers.
  • Audiobook automationaudiobookbay-automated, an import pipeline (audiobook-import), and the audiobook-mcp server.
  • MCP servers for Plex and the *arr suite (plex-mcp, arr-suite-mcp), exposing media control to AI tooling.

Compute & virtualisation

  • k3s MicroVMs — a master plus two agents, defined per-host under hosts/p510/nixos/microvm/ (these are host files, not a shared module).
  • Ollama server for local inference.
  • Virtualisation and Syncthing enabled.

CI

A self-hosted GitHub Actions runner (hosts/p510/nixos/github-runner.nix, registered as p510-nixarchy) for Nixarchy's heavy checks. checks.install-iso builds a 5.6 GB image, boots it and installs a 15.3 GB closure into a qcow2 — about an hour of wall clock and ~16 GB of build directory. A GitHub-hosted runner has 14 GB of disk and no usable nested virtualisation. p510 has 40 cores, 94 GB of RAM, /dev/kvm and 825 GB free on /home.

The build directory is the easy thing to get wrong

TMPDIR is pointed at /home (WD10EZEX, 7200 rpm CMR), not /mnt/img_pool. The pool has the most free space and is the worst possible target: /dev/sdb1 is an ST1000LM035, a drive-managed SMR disk that collapses to single-digit MB/s once its cache band fills — exactly the sustained-write pattern a 16 GB VM install produces. Measured on the same host, same day:

sequential 512M 4M writes, O_DSYNC
/home 125 MB/s 59.4 MB/s
/mnt/img_pool (SMR) ~9.5 MB/s

A Nix build that runs out of room in TMPDIR does not fail cleanly: qemu takes an I/O error mid-install and the test hangs until something times out, which reads as flakiness rather than as a full disk.

The runner is replace = true and non-ephemeral, so it re-registers over a stale entry of the same name instead of dying with "A runner exists with the same name".

Access

  • Sunshine → Moonlight for the graphical session. gnome-remote-desktop can still serve GNOME over RDP, but it cannot serve Hyprland.
  • Tailscale mesh; local firewall delegated to Tailscale.
  • NFS export of /mnt/data (the media library) to the LAN.

Hardware notes

Under hosts/p510/nixos/: NVIDIA setup (nvidia.nix), boot/CPU/memory/power tuning, the Plex configuration, recyclarr, the runner and the MicroVM definitions. See the p510 manifest.

lspci is not installed here

Use nvidia-smi -L to enumerate GPUs. The host went from two cards to one (RTX 3070 Ti) on 2026-08-24.

/mnt/media disk health

The /mnt/media drive has been reporting reallocated sectors for some time. SMART reads PASSED regardless; do not treat that as reassurance. A replacement has been ordered.

Tautulli / Plex API

Media-analytics integrations read from Plex/Tautulli on this host. If you rotate the Tautulli API key, update the p510 configuration and redeploy.

Known quirks

  • switch exits 4 here even on success. switch-to-configuration reloads the user dbus-broker and then talks over the dead connection. It is cosmetic, and it also makes nixos-upgrade.service "fail" nightly. Verify the end state (/run/current-system, systemctl --failed), not the exit code.
  • An NVIDIA driver version bump cannot be applied with switch. The new userspace meets the old in-memory module, three nvidia-* units fail and the whole activation rolls back. Use nh os boot and reboot; nhs now detects this case and falls back automatically.

Deploy

Ask first — then, once approved:

just test-host p510        # build only, always safe
just quick-deploy p510     # deploy only if the closure changed