Layering packages in Fedora Silverblue is not strictly forbidden, but it should be considered the last resort.
For example, I prefer to layer the ZSH shell:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
bettini@fedora:~$ rpm-ostree install zsh Checking out tree 9dc7c1c... done Enabled rpm-md repositories: fedora-cisco-openh264 updates fedora updates-archive Importing rpm-md... done rpm-md repo 'fedora-cisco-openh264' (cached); generated: 2025-03-05T10:45:56Z solvables: 6 rpm-md repo 'updates' (cached); generated: 2026-04-16T00:50:03Z solvables: 27371 rpm-md repo 'fedora' (cached); generated: 2025-10-23T03:37:20Z solvables: 77664 rpm-md repo 'updates-archive' (cached); generated: 2026-04-04T02:00:30Z solvables: 43347 Resolving dependencies... done Will download: 1 package (3.4 MB) Downloading from 'updates'... done Importing packages... done Checking out packages... done Running systemd-sysusers... done Running pre scripts... done Running post scripts... done Running posttrans scripts... done Writing rpmdb... done Writing OSTree commit... done Staging deployment... done Added: zsh-5.9-19.fc43.x86_64 Changes queued for next boot. Run "systemctl reboot" to start a reboot |
Note that you must reboot when you layer packages.
Quoting from the documentation:
Using package layering creates a new deployment, or bootable filesystem root. It does not affect your current root. This preserves rollback and the transactional model, but means that the system must be rebooted after a package has been layered or updated. You can alternatively use
rpm-ostree install --apply-live <package-name>to also temporarily apply the change directly to your currently booted deployment. It’s generally expected that you use package layering sparingly, and use Flatpak and Toolbx whenever possible.
After rebooting, we can verify that ZSH is correctly installed and it’s also reported as part of the current image:
|
1 2 3 4 5 6 7 8 9 10 |
bettini@fedora:~$ which zsh /usr/bin/zsh bettini@fedora:~$ rpm-ostree status State: idle Deployments: ● fedora:fedora/43/x86_64/silverblue Version: 43.20260416.0 (2026-04-16T00:29:49Z) BaseCommit: 9dc7c1c7f5eff240a1a805a249786d4ab82c8a789e26e489e5cd0783ae3849c3 GPGSignature: Valid signature by C6E7F081CF80E13146676E88829B606631645531 LayeredPackages: zsh |
Here I show the packages I layer.
Before that, I need to add external repositories for:
- Visual Studio Code, because the flatpak version is too sandboxed and I’m not willing to spend time on further configuration without further benefits
- Dropbox, because the flatpak version breaks now and then (actually, too often for my taste)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sudo tee /etc/yum.repos.d/vstudio_code.repo >/dev/null <<'EOF' [code] name=Visual Studio Code baseurl=https://packages.microsoft.com/yumrepos/vscode enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc EOF sudo tee /etc/yum.repos.d/dropbox.repo >/dev/null <<'EOF' [dropbox] name=Dropbox baseurl=https://linux.dropbox.com/fedora/${releasever}/ enabled=1 gpgcheck=1 gpgkey=https://linux.dropbox.com/fedora/rpm-public-key.asc EOF |
And then I run
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
rpm-ostree install --idempotent --allow-inactive \ zsh \ gnupg2 \ git-gui \ gitk \ kitty \ alacritty \ gcc \ code \ plocate \ nautilus-dropbox \ libappindicator \ cronie \ java-25-openjdk-devel \ distrobox \ gnome-tweaks \ gnome-terminal \ guake |
In particular,
gccis required fortree-sitter-cliandneoviminstallation via Homebrew.- the two gnome applications are not available as flatpaks
- I prefer having the JDK (my most used application being Java, my main programming language) as a system package, especially to have Eclipse pick it automatically