NixOS is more complicated than you think but opencode fixed it

grigio.org · 2026-07-23 · by Long Nguyen ·generic
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

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.

grigio.org · 4 images · 9 links

Comments (0)

No comments yet