NixOS is more complicated than you think but opencode fixed it

Overview

A deep dive into an advanced, minimal NixOS setup using LabWC (Wayland compositor) + Noctalia Shell V5 (from Cachix, not the official NixOS repo), assisted by opencode with the DeepSeek V4 Flash model for AI-guided configuration.

The result? A desktop that boots at 743 MB RAM with only 48 active tasks.

Key Highlights

๐Ÿ”น Ultra-lightweight

  • 743 MB RAM usage on boot
  • 48 tasks active โ€” no bloat from full DEs like GNOME or KDE

๐Ÿ”น LabWC + Noctalia V5

  • LabWC provides a minimal Wayland session; many desktop services (dbus, polkit, clipman, etc.) must be manually configured
  • Noctalia Shell V5 sourced via Cachix (not yet in nixpkgs)
  • Color schemes sync between Nocttalia and LabWC via noctalia-labwc-sync

๐Ÿ”น AI-Assisted Config

  • opencode + DeepSeek V4 Flash used to write and debug NixOS configs
  • AGENTS.md drives system updates and automation
  • Sudoers configured for passwordless sudo (opencode convenience)

๐Ÿ”น Custom Patches

  • Snapshot (webcam app) patched to work on NixOS โ€” needed a custom build with a library fix, despite being in nixpkgs
  • Several environment variables manually set (session type, compose key, Telegram fix) since LabWC/greetd don't handle them all

๐Ÿ”น No Home-Manager

  • User configs kept in ~/.config/ for portability across distros
  • A rebuild hook symlinks dotfiles into /etc/nixos/ (like GNU Stow)

๐Ÿ”น Hybrid Package Management

  • Nix packages via environment.systemPackages
  • npm-installed apps like opencode2 coexist alongside Nix-managed ones
  • Some programs (e.g., OBS Studio) enabled via programs.obs-studio.enable rather than packages list

Notable Services & Tools

Service/Tool Purpose
greetd Login manager (alternative to GDM/SDDM)
vox-type (Vulkan) Speech-to-text, Italian primary
podman + podman-compose Container management
cockpit + cockpit-podman Web admin UI
kshi Display resolution & multi-monitor
clipman Persistent clipboard
satty Screenshots
scrcpy Android screen mirror via USB
smartmontools SSD health analysis
LocalSend LAN file sharing (port 53317)
KDE Connect Device integration
Traefik Reverse proxy (podman container)

NixOS Config Structure

/etc/nixos/
โ”œโ”€โ”€ flake.nix          โ†’ loads configuration.nix + Nocttalia V5
โ”œโ”€โ”€ configuration.nix  โ†’ main config (long, modular)
โ”œโ”€โ”€ hardware-configuration.nix
โ””โ”€โ”€ *symlinks โ†’ ~/dotfiles/ (managed via rebuild hook)

Lessons & Gotchas

  1. LabWC is not a full DE โ€” you must manually wire up dbus, polkit, clipboard, environment variables, etc.
  2. greetd doesn't fully manage session env vars โ€” some must be hardcoded in config
  3. Snapshot needs a patch on NixOS even if available in repos
  4. Nix sometimes misidentifies apps โ€” file associations can be tricky
  5. 4 GB+ RAM recommended for nixos-rebuild โ€” a swap file helps on low-RAM machines
  6. AMD microcode + Bluetooth disabled at boot (but installed) โ€” fine-grained control

Final Thought

"Some configurations are very complicated โ€” but it is worth exploring this path."

The trade-off is clear: more complexity upfront for a lean, reproducible, extremely lightweight system. opencode + AI bridging the gap makes it practical.