# NixOS is more complicated than you think but opencode fixed it

> Source: <https://grigio.org/nixos-is-more-complicated-than-you-think-but-opencode-fixed-it/>
> Published: 2026-07-20 10:40:48+00:00

# 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

**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.
