Skip to content

DX Next#288

Open
jumpyvi wants to merge 35 commits intoprojectbluefin:mainfrom
jumpyvi:dxnext
Open

DX Next#288
jumpyvi wants to merge 35 commits intoprojectbluefin:mainfrom
jumpyvi:dxnext

Conversation

@jumpyvi
Copy link
Copy Markdown

@jumpyvi jumpyvi commented Apr 20, 2026

Relates to ublue-os/bluefin#3879

Finally, a first "working" version of DX without the need for a separate image!

Beware!, consider this preview of a pre-alpha, not everything is tested or approved by any maintainer!
This is only my proposition :

Where would everything move?

  • podman -> stays on base image
  • docker -> using brew cask (works for rootfull and rootless) or lima
  • qemu -> using flatpak for session mode and quadlet for system mode
  • adb -> brew cask
  • incus -> quadlet daemon, brew from cli
  • vscode/ide -> brew cask
  • ydotool -> brew
  • incus -> quadlet
  • cockput -> quadlet

Other notable changes

Instead of using whatever weird workarround we are using for dx-groups, it would now be managed by systemd-sysusers.

Wall of shame

Apps I cannot move for now, I don't consider most of them "significant", they could just be added to the base image

All other apps are ported!
Check dx-next.Brewfile!

[x] cockpit -> quadlet
[x] Incus -> quadlet
[ ] iotop
[ ] bcc
[ ] bpftrace
[ ] nicstat
[ ] osbuild-selinux
[ ] podman-machine
[ ] tiptop

New dx apps

  • lima
  • kinda
  • incus-cli
  • squashfs
  • devcontainers

Tracker/todo

libvirt-quadlet

Images go in /var/lib/libvirt-dx/images

[x] TPM support
[x] Some issues with /dev/kvm
[x] VirtGL
[ ] The OCI qemu image needs to be moved into the org (owned by my user for now)

incus-quadlet

[x] Add a simple incus setup
[x] The socket doesnt have the right permission on boot
[x] Fix kvm/dri

docker

[x] Needs to be moved to the main tap

ydotool

[x] Enable bottles
[ ] Fix linker

cockpit

[x] Add a simple cockpit setup

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces an experimental 'DX-Next' mode, adding systemd services and Quadlet containers for Incus, Libvirt, Docker, and Containerd, along with a new Brewfile and a 'just' recipe for environment setup. Feedback highlights several critical issues in the systemd unit files and the setup script, including quoting errors in 'ExecStart' commands that prevent proper variable expansion, missing 'systemctl daemon-reload' calls after copying configuration files, and incorrect logic when generating 'sysusers.d' entries for multiple user groups.

After=network.target local-fs.target dbus.service

[Service]
ExecStart=/bin/bash -c "env PATH="$PATH:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" /home/linuxbrew/.linuxbrew/bin/containerd"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The ExecStart command contains a quoting error where the double quotes around the PATH value prematurely terminate the outer string, which will lead to a systemd configuration error. Additionally, using exec is recommended so that the containerd process replaces the shell, allowing systemd to manage the daemon's lifecycle and signals correctly.

ExecStart=/bin/bash -c 'PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH" exec /home/linuxbrew/.linuxbrew/bin/containerd'

Documentation=https://docs.docker.com/

[Service]
ExecStart=/bin/bash -c "env PATH='$PATH:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin' /home/linuxbrew/.linuxbrew/bin/dockerd"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The use of single quotes around $PATH prevents the shell from expanding the variable, and since env does not perform shell expansion, the literal string $PATH will be prepended to the environment variable. This will likely cause dockerd to fail when looking for system binaries. Using exec is also recommended for proper process management.

ExecStart=/bin/bash -c 'PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH" exec /home/linuxbrew/.linuxbrew/bin/dockerd'

TasksMax=infinity

[Install]
WantedBy=default.target
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

System services should generally use multi-user.target for the WantedBy directive. default.target is typically used for user-level services or as a boot alias, and using it here is inconsistent with the brew-containerd.service which correctly uses multi-user.target.

WantedBy=multi-user.target

Comment thread system_files/shared/usr/share/ublue-os/just/apps.just Outdated
Comment thread system_files/shared/usr/share/ublue-os/just/apps.just Outdated
Comment thread system_files/shared/usr/share/ublue-os/just/apps.just Outdated
Comment thread system_files/shared/usr/share/ublue-os/just/apps.just Outdated
@castrojo
Copy link
Copy Markdown
Contributor

castrojo commented Apr 20, 2026

This is awesome! Can we add an echo to the justfile to remind the user where to report bugs?

Something like: "Help shape the future of DX, " so people know they can drop feedback here? Just like when it gets turned on they can see the link.

@castrojo
Copy link
Copy Markdown
Contributor

Oh it's at the bottom never mind. :)

Looks good to me, we can rev fast with this one.

@jumpyvi
Copy link
Copy Markdown
Author

jumpyvi commented Apr 21, 2026

The new ujust can now be tested easily:

curl -sL https://gist.githubusercontent.com/jumpyvi/69fb372b7d47f096cb623a02c67ed99e/raw/a8aecadcc8f2024770a6e9a3a0f2e51a180f2038/gistfile1.txt | bash

Then ujust --choose and select dx-next

@jumpyvi jumpyvi closed this Apr 21, 2026
@jumpyvi jumpyvi reopened this Apr 21, 2026
@jumpyvi

This comment was marked as outdated.

@jumpyvi jumpyvi marked this pull request as ready for review April 22, 2026 02:21
@dosubot dosubot Bot added size:L This PR changes 100-499 lines, ignoring generated files. area/brew Homebrew things area/dx Development experience (DX) - IDEs, dev tools labels Apr 22, 2026
@ehsanullahjan
Copy link
Copy Markdown

testing activity on this feature is happening here: https://discord.com/channels/1345470678408626206/1495876837165760622.

@castrojo
Copy link
Copy Markdown
Contributor

Ok let's slide it in before F44 and call it alpha?

A DX transition will take a long time so we can just run with both for a while. Thanks for working on this!

@jumpyvi

This comment has been minimized.

@jumpyvi

This comment has been minimized.

@jumpyvi

This comment has been minimized.

@jumpyvi
Copy link
Copy Markdown
Author

jumpyvi commented Apr 23, 2026

@castrojo

I now consider this feature-complete, everything I would want from a DX mode is implemented.

It's now really modular, by default "Groups, Docker, Virt and DX-Tools" are selected, these alone are enough for what the majority need from the DX mode. For other users, Cockpit and Incus are also available, and ready to use in one click.

New dx modules could be added later on; for exemple an AI module to mimic GDX

Current dx modules status:

  • Docker
    • Everything seems fine, back to using "true" docker
    • Has rootless and rootfull ootb, you can switch to rootless with docker context use rootless
  • Virt
    • The default network is broken, recreating it fixes the issue forever (help needed)
    • Images have to be exclusively in /var/lib/libvirt-dx/images (help needed)
    • Missing a virsh binary, could be symlinked out of the flatpak (help needed)
    • Waiting for a PR in ublue-os/toolbox, I could also just start maintaining it on my own if it doesnt make it
    • OpenGL, USB, Networking all working
    • Flatpak session is also now available ootb too for disk images in $HOME
  • Incus
    • No issues
  • Cockpit
    • No issues
  • DX-Tools
    • Missing a few things from original dx, but the essentials (vscode, podman things, ydotool, lima, devcontainer) are all there

There might be some UX changes to do down the line, but this is good enough for a first alpha.

I'm done, all that is left is a lot of testing!

@jumpyvi

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/brew Homebrew things area/dx Development experience (DX) - IDEs, dev tools size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants