Silverblue: Setting Up My Environment

codenomad
4 min readDec 3, 2023

--

I made a decision to move away from NixOS and continue puddle jumping in search of my perfect OS. I doubt I’ll ever find the perfect OS, but I continue to keep an open mind. After all, there are always new and interesting OSes popping up, but I digress. Silverblue is at bat.

The install for Silverblue is pretty much like any other modern Linux installation: a few clicks and you are done. On reboot you are greeted with a setup that walks you through enabling location services, third-party repositories, setting up user accounts and linking any online accounts.

Post Install

I turned off location services, enabled 3rd party repos, setup my main account, and skipped additional online accounts. Now I need to get my environment going. As a rule of thumb after installing a new distro, I check for updates before attempting environment configurations.

Full Disclosure: I have a rolling update bias for my workstation so I (irrationally??) question when there aren’t upgrades during or post install…🙊

After the updates completed, I was prompted to reboot. This is rpm-ostree inside Silverblue at work: host level changes require reboots, it’s what enables immutability — you don’t always have to reboot (especially if you use -A), but I don’t mind, yet…

Environment: The Goal

What are my current needs in 2023? Well, I want to use my computer as a developer workstation to create and distribute GNOME applications, a creative workstation where I could use lmms and pitivi to make music and movies, and a general computing device for web browsing, minor gaming, office work, and movie watching. The major requirements I have for my system are:

  • Must be appliance like (think iOS or Android) — easy application install
  • Must limit super user operations
  • Must have a base system that is immutable with rollbacks
  • Must be easy to develop and distribute apps with

Additionally, a family member may want to use this machine, and those users should have control over the applications they want to install. They might want their own icon or cursor theme or do their own development or content creation and need access to gitand ffmpeg.

I ask a simple question of myself: What would I be pissed off about not having access to when I remote (vnc/rdp/ssh) into a machine that isn’t connected to the internet with non-sudo user? Those are the apps I’ll install globally. Probably not the most security-centric approach, but it’s good enough for my workstation.

My family members and I can install whatever is available in the “App Store,” without using sudo guaranteeing we don’t bork each other or the system. For shared applications, I install via rpm-ostree keeping a base system immutable with rollback capability if I screw something up. Between the App Store (flatpaks) and rpm-ostree, I have satisfied some of my requirements:

  • ✅ Must be appliance like
  • ✅ Must limit super user operations
  • ✅ Must have a base system that is immutable with rollbacks
  • ❓Must be easy to develop and distribute apps with

Install

I started with the system wide packages. This included themes and a handful of cli utilities, libraries to support content creation and python development, and gnome-tweaks so users can customize their environment.

Notes: Fedora has a cheatsheet, and I don’t need sudo for a ‘global’ install. This is my first pass at Silverblue, so I will likely reassess this selection in the future as I get more acquainted with the OS and it’s philosophies.

rpm-ostree install flatpak-builder git blackbox-terminal \
python3-virtualenv arc-theme blackbox-terminal breeze-icon-theme \
breeze-icon-theme-devel elementary-icon-theme sweet-gtk-theme \
gnome-tweaks ffmpeg-free perl-Image-ExifTool intel-opencl \
gstreamer1-vaapi gstreamer1-plugin-openh264 cairo-gobject \
cairo-devel cairo-gobject-devel cairo-tools

Host changes are done for now, so I reboot…

Using rpm-ostree install -A avoids rebooting. I didn’t use it, so I’ll just do what I’m told and reboot.

Now, I setup my user environment applications. Since I’m installing via flatpak, I compiled a list of Application IDs and separated by categories that I can squirrel away until I consume them in a script or something. I found the application IDs using the following command:

flatpak list — columns=name,application | grep -i <app name>

After about 5 app ids I considered writing a shell script, but I was watching TV and the mindlessness was fine… maybe next time…

For those interested, here’s my breakdown:

Media creation:

flatpak install fr.handbrake.ghb io.lmms.LMMS org.inkscape.Inkscape \
org.pitivi.Pitivi org.pitivi.Pitivi.Codecs org.gimp.GIMP \
nl.hjdskes.gcolor3 com.obsproject.Studio com.makemkv.MakeMKV

General Computing:

flatpak install md.obsidian.Obsidian org.gnome.Recipes org.gnome.Todo \
org.videolan.VLC org.signal.Signal com.slack.Slack dev.alextren.Spot \
org.gnome.DejaDup org.gabmus.gfeeds com.brave.Browser \
com.discordapp.Discord com.github.alexhuntley.Plots \
org.libreoffice.LibreOffice

Development:

flatpak install app.drey.Biblioteca ar.xjuan.Cambalache \
org.zealdocs.Zeal re.sonny.Workbench org.gnome.Boxes \
org.gnome.Builder com.github.marhkb.Pods io.podman_desktop.PodmanDesktop \
com.vscodium.codium

Last, I need to make a quick kernel args update. On other distros I had issues with sleep on my framework laptop. To avoid any of those issues I added mem_sleep_default=deep to the arg list.

To get an editor for modifying the args run:

rpm-ostree kargs --editor

Now that everything is installed, I fired up Deja Dup and restored my home directory from last week. With my data copied over I’m now ready to dive in…

Next up:

Getting my feet wet by building a simple GNOME application using PyGObject, GNOME Builder, and Blueprint.

--

--

codenomad

I'm a code nomad. I'm traveling, coding, sharing, and helping whenever I can.