Mosquitto

Manjaro Raspberry Pi 4

The Pi 4 is the daily driver of the two: an 8 GB aarch64 board running Arch Linux ARM (Manjaro flavour) on a 64 GB SD. It does triple duty — small i3 desktop on a 7" DSI touchscreen, audio appliance via PipeWire + MPD + ncmpcpp + cava, and (post-2026-05-19) the smart-home + media role taken over from the RPI3.

Hardware

  • Raspberry Pi 4B, 8 GB RAM, aarch64
  • 64 GB micro-SD root + 11 GB zram swap
  • 466 GB Samsung T5 portable SSD at /mnt/media (migrated from the RPI3)
  • Official Pi 7" DSI touchscreen, RPI wired keyboard, USB optical mouse
  • Sonoff Zigbee 3.0 USB Dongle Plus V2 (CC2652P / CP210x bridge) on /dev/ttyUSB0 — the Zigbee coordinator radio

OS / kernel

  • Arch Linux ARM, kernel 6.6.33-2-MANJARO-RPI4
  • Wired via powered Wavlink USB NIC (dhcpcd); onboard Wi-Fi is backup only — its brcmfmac driver oopsed and hung the Pi once (2026-06-27), so panic_on_oops=1 + hardware watchdog (14 s) now auto-reboot it
  • mDNS via systemd-resolved: reachable at rpi.local

Desktop / userland

  • i3-wm + polybar + picom + nitrogen + rofi + i3lock (configs live in ~rpi/.config/type-dots/ as a GNU-stow tree; X must be started as the rpi user, not root, or the wallpaper + polybar fail to load)
  • Alacritty, Emacs 30, Chromium
  • Audio stack: PipeWire + MPD 0.24 + Mopidy + ncmpcpp + cava + Icecast

Services

  • sshd (port 22), minidlna (port 8200, library at /mnt/media)
  • docker, one compose dir per service under /srv/:
    • Home Assistant on :8123 (/srv/homeassistant/), Mosquitto :1883, Zigbee2MQTT :8080 driving the Aqara curtain via the Sonoff dongle
    • Frigate :8082 — two Tapo cams, motion-only, no detector
    • Jellyfin :8096, Samba (/srv/abaj)
    • Pi-hole :8081 — LAN-wide DNS ad blocking (/srv/pihole/). Lists: StevenBlack + HaGeZi Pro (~306k). Admiral-protected sites (many recipe blogs) can’t be fixed at DNS level: loader blocked ⇒ “problem loading” popup + stripped page; loader allowed ⇒ “Please allow ads” wall. Keep the loader allowed and use Reader View / Safari+AdGuard. Port 53 is bound to the Pi’s LAN + Tailscale IPs, not 0.0.0.0 (systemd-resolved stub owns 127.0.0.53) → an IP change breaks it silently; edit ports: + FTLCONF_dns_revServers and recreate. Router DHCP hands out the Pi as sole DNS (since 2026-09-30) — Pi down ⇒ LAN DNS down.
  • rtorrent under systemd (tmux-wrapped, attach with tmux a -t rtorrent), watch dir /mnt/media/torrents/watch/