Setting desktop = "niri" or desktop = "cosmic" installs a set of packages
you did not name.
For the exact list any declaration produces, run kuma generate and read the
dnf install line. That is the authority; this page explains it.
An image is built in layers, and they are not all curated by the same hand:
- Fedora's minimal bootc core. Kernel, systemd, bootc, dnf. Fedora maintains it; kuma includes it unmodified.
- kuma's base. Networking, firmware, and the handful of things any real
machine needs:
shadow-utils,sudo,chrony,openssh-server,passwd,cryptsetup,fwupd. See the base is composed, not inherited. - The desktop set. Everything below.
A curated desktop is session infrastructure: the parts that have to be present
for a session to function at all. Applications are not in it. A calculator, an
office suite, a media player, or a store belongs in packages.flatpak in your
declaration, even when it would be convenient to bake one in.
The reason is reversibility rather than taste. A line in your declaration is a suggestion: delete it and the next convergence uninstalls it. A package in a desktop set is a decree, because there is no way to remove one (see what you can change below). Being opinionated in an example declaration costs nothing. Being opinionated in the desktop set costs you a fork.
Hand-assembled, because niri is a window manager rather than a desktop: it requires nothing beyond itself, so every part of a working session is named explicitly.
| Session | niri, xwayland-satellite, greetd, tuigreet |
| Shell | waybar, fuzzel, mako, wob, swaybg, swayidle, swaylock |
| Terminal and files | kitty, thunar (+ archive plugin), file-roller, gvfs, udiskie, 7zip, unar |
| Portals | xdg-desktop-portal-gtk, xdg-desktop-portal-gnome |
| Audio | pipewire, pipewire-pulseaudio, wireplumber, pavucontrol |
| Graphics | mesa-dri-drivers, mesa-vulkan-drivers, vulkan-loader |
| Hardware | NetworkManager-wifi, wpa_supplicant, bluez, blueman, brightnessctl, power-profiles-daemon |
| Printing and discovery | cups, system-config-printer, avahi, nss-mdns |
| Screen and clipboard | grim, slurp, swappy, wf-recorder, wl-clipboard, cliphist |
| Session glue | polkit, mate-polkit, dconf, gnome-keyring, xsettingsd, xdg-user-dirs, firewalld, flatpak |
| Fonts | sans, mono, emoji, CJK, and Font Awesome (free and brands) |
Graphical settings for wifi, bluetooth, audio, and printers are included on purpose. Those are machine state, not system definition: the declaration describes what a machine is, and picking a network is not that.
Much shorter, because COSMIC curates itself. cosmic-session hard-requires
the coherent desktop (compositor, panel, applets, settings, files, terminal,
notifications, OSD, screenshot, portal, fonts), so kuma names the session plus
the hardware enablement a desktop lives on, and little else.
The additions worth knowing: cosmic-edit, because the default dock pins it
and the session does not require it, so without it the pin is dead;
pipewire, because the session requires the client library but nothing pulls
the daemon; and udisks2, because cosmic-files mounts removable media
through it directly.
cosmic-store is deliberately absent. A store is an application, so which one
a machine gets is the declaration's call.
Most of a desktop set is unsurprising. These are not, and each one is a failure someone had to diagnose:
gnome-keyring-pamunlocks the login keyring at login. It is a separate subpackage that nothing depends on, and the greeter's PAM lines are-prefixed, so a missing module is skipped in total silence. Without it, login succeeds, nothing is logged, and every keyring-using app prompts on launch forever.nss-mdnsis what makes.localnames and driverless printer discovery actually resolve.avahialone announces without resolving.zram-generator-defaultscarries the config that activates zram. The base ships the generator without it, so the desktop would have zero swap and the OOM killer would take windows under memory pressure.glibc-langpack-enprovides real locale data. The base shipsglibc-minimal-langpack, soen_US.UTF-8fails to resolve and waybar's clock disables itself.mesa-vulkan-driversandvulkan-loader: OpenGL drivers alone strand every Vulkan application on software rendering.fontawesome-6-brands-fontsis a second font package because the bluetooth glyph waybar uses lives in the Brands face, not Free.google-noto-sans-cjk-vf-fonts, because the default sans is latin-only and CJK pages render as tofu.avahiis named rather than assumed. It used to arrive with fedora-bootc by luck, and kuma's composed base does not carry it.
You can add. packages.rpm layers anything from Fedora's repos on top of
the desktop set.
You cannot subtract. There is no rpm_exclude and no per-desktop opt-out,
so a package in a desktop set is in your image. If you want a desktop without
Thunar, the only route today is a fork.
That is a real limit rather than an oversight, and it is why the boundary above is drawn where it is: everything kuma cannot let you remove is something a session needs in order to work, and everything else is left to your declaration where deleting a line is enough.