Skip to content

feat(dev-desktop): add Arch/Hyprland streaming dev desktop image - #1

Merged
swibrow merged 1 commit into
mainfrom
feat/dev-desktop
Jul 25, 2026
Merged

feat(dev-desktop): add Arch/Hyprland streaming dev desktop image#1
swibrow merged 1 commit into
mainfrom
feat/dev-desktop

Conversation

@swibrow

@swibrow swibrow commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Arch Linux dev workstation that streams a headless Hyprland session over Sunshine to any Moonlight client, with cloud tooling and AI coding agents preinstalled.

Contents

Hyprland 0.56.0, Sunshine 2026.516.143833, Claude Code / codex / gemini-cli / opencode, kubectl, helm, k9s, kubectx, stern, terraform, opentofu, aws-cli-v2, azure-cli, node, python, uv, go, rust, neovim, chezmoi.

Conventions this image bends

  • amd64 onlyarchlinux has no official arm64 image, so platforms lists one entry.
  • pacman packages float — Arch is rolling. The base digest, Sunshine, and the four npm agents are pinned with Renovate annotations. Pinning to an Arch Linux Archive snapshot is the follow-up if reproducibility becomes a requirement.
  • Multi-process — a streamed desktop needs a compositor plus a stream server. Hyprland is PID 1 and starts the session via exec-once, so no supervisor or init framework is introduced.

Sunshine is installed from the upstream Arch package published as a GitHub release asset, which avoids pulling AUR and makepkg into the build.

Requires a DRM render node

The image cannot start without /dev/dri, even though it is headless. Aquamarine only builds a GBM allocator from a backend reporting drmFD() >= 0, and CHeadlessBackend::drmFD() returns -1. start-desktop checks for /dev/dri/renderD128 and exits with an actionable message rather than the opaque "no allocator available" error.

The same render node gives Sunshine VAAPI hardware encode.

Verification

Built for amd64 and the metadata.yaml test command exits 0 in the built image. whoami returns dev, and the missing-render-node guard was confirmed to fire.

Image is 5.6 GB uncompressed; Go, Rust, azure-cli and the desktop stack dominate.

Arch Linux workstation image that streams a headless Hyprland session over
Sunshine to any Moonlight client, with cloud tooling and AI coding agents
preinstalled.

Notes on the conventions this image bends:

- amd64 only. archlinux has no official arm64 image.
- Hyprland is PID 1 and starts the session via exec-once, so no supervisor
  or init framework is introduced.
- pacman packages float because Arch is rolling. The base digest, Sunshine
  and the four npm agents are pinned and annotated for Renovate.

Sunshine is installed from the upstream Arch package published as a release
asset, which avoids pulling in AUR and makepkg.

The image requires a DRM render node even though it runs headless:
aquamarine only builds a GBM allocator from a backend reporting drmFD() >= 0
and the headless backend returns -1. start-desktop checks for
/dev/dri/renderD128 and fails with an actionable message instead of the
"no allocator available" error.

Signed-off-by: swibrow <15628653+swibrow@users.noreply.github.com>
@swibrow
swibrow force-pushed the feat/dev-desktop branch from c0afa36 to cdecceb Compare July 25, 2026 07:10
@swibrow
swibrow merged commit bdd7cf0 into main Jul 25, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant