← Home Lab

TV PC

seedling updated

Current Specs

Component Detail
Model Dell Optiplex 7040 SFF (ChassisTypes 3)
CPU Intel Core i5-6500, 4C/4T, 3.2 GHz base / 3.6 GHz boost (Skylake, 65 W TDP)
RAM 2x 4 GB Samsung M378A5143EB1-CPB DDR4-2133 (2 of 4 DIMM slots used)
Storage 500 GB Toshiba DT01ACA050 7200 RPM 3.5" SATA HDD
GPU (discrete) AMD Radeon R5 340, 2 GB GDDR3 (GCN 1.0, OEM, driver support ended 2020)
GPU (integrated) Intel HD Graphics 530 (Quick Sync H.264 + HEVC 8-bit encode/decode)
Network Intel I219-LM 1 GbE (negotiating 100 Mbps due to router port limitation)
OS Bazzite Desktop (Fedora Atomic)

Available expansion

  • 2 free DIMM slots (max 64 GB DDR4-2133 across 4 slots)
  • 1x M.2 2280 NVMe slot (empty)
  • 1x 2.5" SATA bay (empty)
  • 3.5" bay occupied by current HDD

GPU notes

The R5 340 is a low-profile OEM card from 2015 (GCN 1.0 / Oland). No HEVC encode/decode (requires GCN 1.2+), no AV1 support, last driver from 2020. The integrated Intel HD 530 is better for media transcoding via Quick Sync. The R5 340 draws ~10-15 W idle for no practical benefit in this workload.

Gamescope note: Bazzite's Game Mode relies on Gamescope, which does not support Skylake-era Intel iGPUs. The Home Theater image is not an option for this machine. Use the Desktop image and launch Steam in Big Picture mode manually for couch gaming.

Roles

Current: Blu-ray rip-to-stream (MakeMKV + Jellyfin), party games (Steam), HDMI to Hisense A4 Smart TV.

Planned: NAS (SMB file share via Samba), Jellyfin (media streaming), Immich (photo management via Podman), Frigate clip storage (receives clips from Jetson over network).

All TV activities (games, streaming playback, storing security footage) are mutually exclusive. Podman services run in the background and do not compete for attention or significant resources during TV use.

Setup Plan

Bazzite Desktop — immutable Fedora Atomic base with KDE Plasma. Podman runs natively (no WSL2 overhead), and the OS auto-updates atomically with rollback. Game Mode is not available on Skylake Intel (see GPU notes), so couch gaming uses Steam Big Picture mode instead.

1. Prepare install media

  • Download Bazzite Desktop ISO from bazzite.gg (Desktop → Older/Legacy Intel (Skylake-Icelake) → KDE)
  • Flash to USB with Ventoy or Rufus

2. BIOS settings

  • Enter BIOS (F2 at boot)
  • Set boot order: USB first
  • Enable Wake-on-LAN
  • Verify UEFI mode (not Legacy/CSM)

3. Install Bazzite

  • Boot from USB, launch Anaconda installer
  • Partition: use entire disk (wipe Windows). The existing 500 GB HDD becomes the single drive — OS + containers + media all share it until the deferred NVMe upgrade.
  • Set hostname (e.g. tvpc)
  • Create user account

4. First boot

  • Sign in to KDE Plasma desktop
  • Launch Steam, enable Big Picture mode for couch use
  • Set Steam to auto-start: System Settings → Autostart → Add → Steam (with -bigpicture flag)
  • Verify party games launch via Proton
  • Configure HDMI output to Hisense A4 (resolution, refresh rate)

5. Server setup

Remaining steps happen in the KDE desktop or over SSH.

6. Network

  • Static IP: set DHCP reservation on the TP-Link Archer A54 (same approach as before — router-side, not OS-side)
  • Verify link negotiation (100 Mbps confirmed — router port limitation, not NIC)

7. SSH

  • Enable and start sshd:

    sudo systemctl enable --now sshd
    

8. Power

  • Disable sleep, suspend, and hibernate so the machine stays on for server duties:

    sudo systemctl mask sleep.target suspend.target hibernate.target
    

9. Podman services

Bazzite ships with Podman (not Docker). They are command-compatible.

  • Install podman-compose:

    pip install podman-compose
    
  • Create a compose.yml with the following services:

    Jellyfin — media streaming with hardware transcoding:

    • Bind-mount media directory
    • Pass through /dev/dri for VA-API (Intel HD 530) hardware transcoding

    Immich — photo management:

    • Standard Immich compose stack
    • Bind-mount photo library

    Samba — NAS file share + Frigate clip destination:

    • Container (e.g. dperson/samba) or host-level /etc/samba/smb.conf
    • Share the media directory and a Frigate clips directory over SMB

10. MakeMKV

  • Install via Flatpak:

    flatpak install flathub com.makemkv.MakeMKV
    
  • Ripped files go to the media directory. Jellyfin picks them up automatically via library scan.

11. Firewall

  • Open required ports:

    sudo firewall-cmd --permanent --add-service=samba
    sudo firewall-cmd --permanent --add-port=8096/tcp   # Jellyfin
    sudo firewall-cmd --permanent --add-port=2283/tcp   # Immich
    sudo firewall-cmd --permanent --add-service=ssh
    sudo firewall-cmd --reload
    

Deferred Upgrades

Deferred due to 2026 NAND/DRAM pricing crisis (AI demand driving memory prices up).

  • Bluetooth Adapter: Choose and buy adapter. Pair Xbox controllers.
  • Remove R5 340: Free up idle power draw and a PCIe slot. The HD 530 handles display output and VA-API transcoding — the discrete GPU serves no purpose.
  • NVMe SSD (256-500 GB): Move OS + containers to NVMe, keep media + clips on existing HDD. The HDD's random I/O (~100-150 IOPS) is the main bottleneck for service workloads like Immich's database. Sequential I/O (streaming, file copies) is fine on HDD.
  • RAM (add 2x 8 GB DDR4-2133 in free slots, 8 GB -> 24 GB): More headroom for Podman containers (Jellyfin transcoding, Immich ML indexing). Bazzite is lighter than Windows but 8 GB is still tight under load.

Comments