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.
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.
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.
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.
The below list is an excerpt of some of my applications:
- Firefox as browser
- Geary for mails
- GNOME Calendar for appointments
- Endeavour for tasks and To-Do items
- Paper for note-taking
- NewsFlash RSS reader
- Element for Matrix
- GNOME Text as editor
- Amberol for music playing
- Totem for video playback
- GIMP for graphic editing
- Secrets for password management
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.
- Visual Studio Code needs tons of integrations and is easier to handle as overlay
- cryfs is needed for Vaults
- micro is an awesome command line editor
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
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.
- minikube for local Kubernetes
- cirrus-cli for local CI/CD that also works in the cloud
- kubectl, kubens, kubectx for kubernetes interaction
- Skaffold for local development
- ngrok as web proxy tunnel for development
- starship as my prompt, which is no longer in the Fedora repos
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.
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.
Fedora Silverblue ships with GNOME shell. For me, it is a nice UI, but there are cool options to tweak it even more.
The screenshot shows a couple of cool extensions and tweaks, that I applied.
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.
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.
- 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.
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.
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
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.