THIS PROJECT'S UX IS VERY MUCH IN AN UNPOLISHED STAGE
Quick: Starts up in just a few seconds
Integrated: Wayland windows are managed on the host compositor
Flexible: Full access to mutable linux system
Disposable: Do not break your host; Break your bubble and discard it
Isolated: Strong KVM isolation boundary
Atomic Desktop Friendly: Works within e. g. Fedora Atomic desktops
Rootless: Does not require host root access
Compared to distroboxes...
Pro Bubbles:
- allows straight-forward use of containers
- provides isolation
Contra Bubbles:
- not as host-integrated as distroboxes
Compared to devcontainers...
Pro Bubbles:
- allows straight-forward use of containers (hence also devcontainers)
Contra Bubbles:
- not part of devcontainer ecosystem
Compared to allround VM solutions like Gnome Boxes...
Pro Bubbles:
- does not require stepping through OS installers
- opinionated networking etc.
- allows Wayland integration
Contra Bubbles:
- does not support traditional VM handling use cases
- Management of multiple VMs/Bubbles
- Distribution via flatpak
- MS Windows support
- More choices beyond Debian+Nix as guest system: e. g. Arch Linux
Imaginable opt-in Features:
- Option to share Nix store with other VMs/Bubbles
- Option to mount host directories
- Option to enable pulseaudio socket forwarding
- Option to promote
.desktopfiles to host
- EGL/GPU hardware acceleration (addressable using virtio native contexts?)
- For some Wayland applications, sommelier crashes
Right now, bubbles is distributed via a container outputting the required binaries into $HOME/bubbles.
Requirements:
podman/dockerfor installationpasstqemu-imgcurl
Loose Recommendation:
btrfsas backing filesystem (seems to optimize for disk image deduplication under the hood)
mkdir $HOME/bubbles
# May be different for non-SELinux systems: skip ":Z"
# May be different for docker: You may need to chown files afterwards
podman run -v "$HOME/bubbles:/output:Z" ghcr.io/gonicus/bubbles/bubbles:e289a3a5479817c3ffad6bb62d8214e4265e8e4b
cd $HOME/bubbles
LD_LIBRARY_PATH=$HOME/bubbles/runtime_libs $HOME/bubbles/bubbles
- Press image download button, await completion
- Press VM creation button (on non-btrfs, UI may freeze a bit - to be fixed), restart bubbles
- Start VM, await startup and initial setup
- Press Terminal button
- Enjoy mutable Debian+Nix Installation
The installed system is a Debian Trixie with preinstalled...
- bubbles-agent (simple agent for serving needs of the UI)
- sommelier
- Nix
- Gnome Console (kgx)
- starship (configured for nerdfonts)
On first boot, it will fetch nixpkgs and a nerdfont. Later boots will be quicker. You can change the default terminal via the debian alternatives system.
Enforcing Wayland:
- Chromium:
chromium --ozone-platform=wayland - Firefox:
WAYLAND_DISPLAY=wayland-0 firefox - VS Code:
mkdir -p ~/.config/Code/User && echo '{"window.titleBarStyle": "custom"}' > ~/.config/Code/User/settings.jsoncode --ozone-platform=wayland
Sound socket forwarding:
- On host:
socat VSOCK-LISTEN:11112,fork UNIX-CONNECT:$XDG_RUNTIME_DIR/pulse/native - On guest:
mkdir $XDG_RUNTIME_DIR/pulse && sudo chown user: $XDG_RUNTIME_DIR/pulse && socat UNIX-LISTEN:$XDG_RUNTIME_DIR/pulse/native,fork VSOCK-CONNECT:2:11112
- crosvm + sommelier
- rust-gtk4
- passt
- distrobuilder
- ...