Personalized Sway desktop built on Fedora using tools and additional sources from Universal Blue.
This project seeks to mostly restore the sway-atomic spin of UBlue, which has been discontinued, while applying the additional modifications that I had been applying locally to create a very opinionated desktop. It builds off of the base-main image and seeks to also add some additional features introduced by the Cayo.
Dogwood is the common name for Cornus Sericea the original namesake of Fedora Sway Atomic from which this project draws inspiration.
This project provides for automated building of bootc (bootable OCI operating system) images built from Fedora CoreOS, UBlue improvements, the Sway window manager and all of my favourite tools. This is highly opinionated and almost all desktop Linux users, and even most Sway window manager users, will disagrees with many of the choices made here. The core components are chosen as follows:
bootcimages - provides a mechanism for installing OCI container images as the bootable operating system on bare metal or in a virtualized environment. It allows for the substitution of the complete root filesystem for newer, older, or entirely different images after a reboot. This provides stability, flexibility and reliability by ensuring that any installation of a particular version is identical, the base can be easily substituted to another, and each image can be atomically upgraded, rolled-back, or substituted perfectly, with automatic rollbacks in the event of a boot failure.- Fedora - provides access to the broad and up-to-date package selection with the minimal possible packages for a functional desktop. UBlue base images are used to have additional hardware compatibility and virtualization pre-configured.
- Sway window manager - provides a Wayland compositor which is nearly 1:1 compatible with the popular i3 tiling window manager for X11. This provides a minimal, focused, keyboard-driven desktop environment.
- Additional packages should be installed via Flatpaks for desktop applications, podman (a Docker alternative) for standalone containerized services, package managers like Homebrew for local package installations, and distrobox/toolbox to deploy packages via additional integrated OS containers.
The build tools in this repository have largely been inspired by the Cayo project and my work to build custom images for my open source spam filtering project SpamTagger. It is capable of building a variety of images, as declared in the images.yml file and using a Containerfile generated from container/Containerfile.in with macro expansion for each tagged version. GitHub workflows are included to build the container images, sign them, and upload them with proper metadata to the Github Container Registry. These actions can also be done manually using just recipes on a machine with all of the necessary dependencies.
I began using the i3 tiling window manager for X11 sometime around 2013. I was an early proponent of Wayland and became an early adopter of Sway, the i3-compatible Wayland compositor well before it's 1.0 release. I pretty much refuse to use a computer which does not offer this as a graphical environment option.
I became interested in atomic desktop images at around the time of the first release of Fedora Silverblue release. For the early versions of Silverblue, I used rpm-ostree to install Sway alongside the default Gnome desktop and software suite and used that as my desktop for a couple releases.
Later Fedora produced the sericea spin which included Sway as the graphical environment.
In more recent years, the tools for building custom images have become much simpler, especially following the lead of the Universal Blue project. They provided enhanced versions of the Fedora Atomic spins as well as unique spins and tools for building one's own custom images. I was nearly a day one adopter of the UBlue sericea (later sway-atomic) image.
Unfortunately, with the Fedora 42 release, UBlue's Sway desktop spin was deprecated and so I made a quick fork using the UBlue template which sought to continue building almost identical images, except for a small handful of additional packages which I had been layering all along.
In 2025, I took what I was learning from the work above build new images for SpamTagger, my fork of my former employer's email filtering software. I was specifically inspired by the Cayo project which was seeking to build more stable server images using a CentOS Stream base image. Cayo lead the way in adopting bootc as the mechanism for deploying ostree images and also added some nice features to the build toolchain.
With significant progress being made on that project, I decided to also re-write my sericea fork to use largely the same tooling as SpamTagger so that I would have a more similar experience between the two. Dogwood continues to use Fedora CoreOS as the base OS because CentOS Stream does not provide many of the dependencies I expect for the host container and because UBlue has done a great job to provide a fantastic base image for workstation usage.
The test images include all packages from either UBlue's base-main except for those removed in container/build-files/98-cleanup.sh.
The default kernel is replaced with the latest LTS kernel.
Additional packages are added in container/build-files/10-packages.sh.
The latest ISO should be available from the Releases tab.
Older artifacts are removed after 90 days.
You should be able to rebase to dogwood from an existing bootc system with:
sudo bootc switch --enforce-container-sigpolicy "ghcr.io/johnmertz/dogwood"Note that there are incompatibilities between Fedora and CentOS implementations of bootc, so you probably cannot switch from a CentOS system.
All images in this repo are signed with sigstore's cosign. You can verify the signatures by running the following command
cosign verify --key "https://raw.githubusercontent.com/JohnMertz/dogwood/refs/heads/main/cosign.pub" "ghcr.io/johnmertz/dogwood"Every Release has an SBOM generated with anchore's syft. These SBOM's are also signed with sigstore's cosign. Every release tag has the SBOM's attached as an artificat along with the signature file. You can verify the SBOM by running the following command.
cosign verify-blob --key "https://raw.githubusercontent.com/JohnMertz/dogwood/refs/heads/main/cosign.pub" --signature "sbom.json.sig" "sbom.json"This repo was built on the Universal Blue Image Template and added to significantly.
It is possible to build images and ISOs locally using the provided Justfile with just:
just build- Learn more about Universal Blue
- UBlue GitHub organization
- Build your own OS with the UBlue template
- Heavily inspired by m2Giles' OS