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.mddrives 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
opencode2coexist alongside Nix-managed ones - Some programs (e.g., OBS Studio) enabled via
programs.obs-studio.enablerather 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
- LabWC is not a full DE โ you must manually wire up dbus, polkit, clipboard, environment variables, etc.
- greetd doesn't fully manage session env vars โ some must be hardcoded in config
- Snapshot needs a patch on NixOS even if available in repos
- Nix sometimes misidentifies apps โ file associations can be tricky
- 4 GB+ RAM recommended for
nixos-rebuildโ a swap file helps on low-RAM machines - 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.