Fedora - My Workstation Setup

With the release of Fedora Linux 37, I switched back to Fedora Silverblue. I took this opportunity to revamp my Fedora Workstation repository and therefore my Ansible playbook for the same.

Fedora - My Workstation Setup
Screenshot - Fedora Silverblue workstation

With the release of Fedora Linux 37, I switched back to Fedora Silverblue. I took this opportunity to revamp my Fedora Workstation repository and therefore my Ansible playbook for the same.

I want to show you, how I am using Kubernetes, Ansible and much more on my setup and how I tweaked my setup to my liking.

Fedora Silverblue

First, I am back on Silverblue. In the past, I was switching back to Workstation, since there was so much stuff not working for me. But, I never laid Silverblue down, I just had to learn more and wait for better integration.

With the Fedora 37 release, I am finally back and therefore have full access to immutability and rollbacks. If you never heard of Fedora Silverblue, I recommend to check out my previous articles about Silverblue and Kinoite.

For the installation part, I stick to a trivial "base" installation. In fact, everything is "on default". I am doing proper backups daily and my disk is (good enough) protected via UEFI passwords for the system, settings and hard disk.

After the setup, I ran two commands manually:

# Uninstall all flatpaks
$ flatpak uninstall --all

# Upgrade and Reboot
$ rpm-ostree upgrade --reboot

Afterwards, everything is deployed with the Ansible playbook at the end of this article. But, let me give an overview beforehand.

Applications

The standard way for applications is Flatpak for me. But, I also have some overrides in place. In addition, I heavily rely on some binaries and container workflow.

Flatpaks via Flathub

I am using Flatpaks for almost all Desktop applications. But, I also disabled all Fedora Flatpaks and uninstalled them. If there is a flatpak on my machine, it comes from flathub.org.

Screenshot - Fedora Silverblue workstation

The below list is an excerpt of some of my applications:

Since GNOME online accounts integrates very well in Nextcloud, Contacts, Calendar items and News are in sync with my mobile phone.

Overrides and Overlays

Due to restrictions in Flatpaks, I opted to install a couple of tools via overlays.

rpm-ostree status of my system

I also wanted to use Firefox via Flatpak and get rid of the GNOME classic shell, bundled in Fedora. The manual part for this would look like:

# Remove Firefox and GNOME Classic from base image
$ rpm-ostree override remove firefox firefox-langpacks gnome-classic-session

Additional binaries

As you might be aware, I am heavily relying on commands for Kubernetes. These are not available via Flatpak and overlaying them is quite unflexible. Instead, I am downloading these to /usr/local/bin, which makes them available for all users. Furthermore, I am able to have multiple versions.

The above binaries can also be consumed via VSCode. But, I need to take care of software updates on my own.

The manual approach for something like this is pretty easy.

# Download kubectl for local use
$ sudo curl https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl > /usr/local/bin/kubectl

But, I automated these tools, as described in the below automation section.

Containers

Some tooling requires more than a binary. The Golang compiler for example can be installed in /usr/local/bin/, but it's quite uncomfortable. Instead, I am running containers for the same and made some aliases.

The below example shows how this can look like for Golang.

# ~/.bashrc

alias go="podman run -it --rm -v "$PWD":/build -w /build golang:1.19 go"

This way, I don't need to re-learn things, but can use containers as if they are locally available. Plus, I can use different versions of the same tools.

GNOME tuning

Fedora Silverblue ships with GNOME shell. For me, it is a nice UI, but there are cool options to tweak it even more.

Screenshot - Fedora Silverblue workstation

The screenshot shows a couple of cool extensions and tweaks, that I applied.

Configuration

There are not a lot of configuration changes, I made.

  • Enable "Tap to Click"
  • Change how "Alt-Tab" behaves
  • Display minimize, maximize and close
  • Create new shortcuts for Terminal, Calendar, and Mail
  • Set a cool background wallpaper
  • Enable Night Light on schedule

Everything else is untouched.

Extensions

In addition to the above applications, containers and configurations, I am using a couple of extensions. These allow me to tweak GNOME shell, so it looks like above.

I am using the Extension Manager from Flathub to install and configure extensions.

Screenshot - Extension Manager
  • Blur my Shell is totally optional, but adds some blur here and there
  • Custom Accent Colors is somewhat a preview for accent colors in GNOME
  • Dash to Dock provides a configurable dock
  • Desktop Clock will display a Clock and Date as an overlay of the wallpaper. Since I removed the Clock menu, this is pretty useful.
  • Dynamic Calendar, Clocks and Weather Icons reconfigures the icons of GNOME Calendar, GNOME Clocks and GNOME Weather to represent the current date, time, weather.
  • Just Perfection is a collection with tons of tuning for GNOME Shell. You can remove and tweak things like the Workspace Switchers, Menu items and many more.
  • Night Theme Switcher is an extension that switches the theme (Default to Dark) alongside NightLight. This way, I am having a dark theme in the night.
  • OSD Volume Number displays numbers for Screen brightness and sound volume
  • Quick Settings Tweaker moves notifications and media control to the system menu and allows many other tweaks.
  • Space Bar displays the Workspaces in the top panel, which is useful, since I removed the Workspace overview.
  • User Themes allows applying custom themes, which was needed to change it to the Custom Accent Colors theme.

Automation and Repository

This is, maybe the part, you are waiting for. In my initial repository, I maintained all the roles alongside the playbook. Recently, I started a new Ansible collection in the GitHub whiletruedoio organisation. The repository "whiletruedoio.desktop" is meant to provide tooling, for desktop workstations.

GitHub - whiletruedoio/whiletruedoio.desktop: Ansible collection for desktop workstation and notebook plugins, roles and playbooks.
Ansible collection for desktop workstation and notebook plugins, roles and playbooks. - GitHub - whiletruedoio/whiletruedoio.desktop: Ansible collection for desktop workstation and notebook plugins...

In my new repository "fedora-workstation", I maintain a small playbook, that consumes this collection. This allows me to add even more features for the future use. And, even more, it provides a way to add your pull requests to a meaningful collection. I will ensure to push this collection to Ansible Galaxy, too. But, it needs some love beforehand.

GitHub - dschier-wtd/fedora-workstation: Ansible setup of my development workstation
Ansible setup of my development workstation. Contribute to dschier-wtd/fedora-workstation development by creating an account on GitHub.

The documentation should be quite conclusive. In case you are missing something or want to provide a feature, please feel free to reach out, open an issue or provide code.

Applying the code is super easy, too.

# Install Ansible locally
$ rpm-ostree install ansible -r

# Install requirements
$ ansible-galaxy collection install -r ansible/requirements.yml

# Apply the playbook
ansible-playbook -K ansible/playbooks/configure.yml

Conclusion

Well, this sums my setup. I hope this article was not too much of a show-off, but helped you to understand how Silverblue can be used.

I really would like to get your feedback about the same. Please feel free to add tools to the collection or tell me what I missed.