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 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`
- 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)
- 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
- User configs kept in `~/.config/` for portability across distros
- A rebuild hook symlinks dotfiles into `/etc/nixos/` (like GNU Stow)
- 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
🔹 LabWC + Noctalia V5
🔹 AI-Assisted Config
🔹 Custom Patches
🔹 No Home-Manager
🔹 Hybrid Package Management
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.



