Fedora 44 from scratch on a Surface Go: my full setup

Every time I reinstall Fedora I spend a couple of hours trying to remember what I did last time. This post is my personal reference so I never have to improvise again. If it’s useful to you too, great.

Hardware: Surface Go with Intel Pentium/Core m3. Distro: Fedora 44 with DNF5, kernel 7.0 and GNOME 50.


1. Optimize DNF

First thing before touching anything else. Edit /etc/dnf/dnf.conf:

sudo vim /etc/dnf/dnf.conf

Add at the end of the [main] section:

fastestmirror=True
max_parallel_downloads=10
defaultyes=True
best=False
clean_requirements_on_remove=True
  • fastestmirror automatically picks the fastest mirror.
  • max_parallel_downloads=10 downloads in parallel (default is 3).
  • defaultyes skips confirmation on every operation.
  • best=False avoids unnecessary dependency errors.
  • clean_requirements_on_remove cleans up orphaned packages on uninstall.

2. Vim as default editor

sudo dnf install -y vim
echo 'export EDITOR=vim' >> ~/.bashrc
echo 'export VISUAL=vim' >> ~/.bashrc
source ~/.bashrc

Make sudo inherit the editor:

sudo EDITOR=vim visudo

Find Defaults env_reset and add below it:

Defaults    env_keep += "EDITOR VISUAL"

From now on sudo visudo opens vim directly.


3. DNF without password for your user

sudo EDITOR=vim visudo -f /etc/sudoers.d/dnf-nopasswd

Content:

qtekfun ALL=(ALL) NOPASSWD: /usr/bin/dnf

Verify the file is valid:

sudo visudo -c -f /etc/sudoers.d/dnf-nopasswd

4. RPM Fusion

sudo dnf install -y \
  https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
  https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

5. Flathub

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Prioritize Flathub over Fedora’s OCI repo:

flatpak remote-modify --prio=1 flathub
flatpak remote-modify --prio=0 fedora

6. Firmware

sudo fwupdmgr refresh
sudo fwupdmgr get-updates
sudo fwupdmgr update

7. Multimedia codecs

With RPM Fusion already active:

sudo dnf group install multimedia -y
sudo dnf group install sound-and-video -y

8. Intel drivers (Surface Go)

The Surface Go uses a 7th-8th gen Intel GPU, so the correct driver is the legacy libva-intel-driver, not intel-media-driver.

sudo dnf install -y libva-intel-driver mesa-vulkan-drivers vulkan-tools libva-utils

Verify VA-API is working:

vainfo

You should see H264, HEVC and VP9 profiles without errors. If the driver loads as iHD driver for Intel Gen Graphics, everything is correct.


9. Disable unnecessary repos

On a Surface Go with Intel you don’t need the NVIDIA or Steam repos from RPM Fusion:

sudo dnf config-manager setopt rpmfusion-nonfree-nvidia-driver.enabled=0
sudo dnf config-manager setopt rpmfusion-nonfree-steam.enabled=0

10. VS Code

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo dnf install -y code

11. Prompt: Starship + Nerd Font

Install Starship

curl -sS https://starship.rs/install.sh | sh
echo 'eval "$(starship init bash)"' >> ~/.bashrc
source ~/.bashrc

Gruvbox Rainbow preset

starship preset gruvbox-rainbow -o ~/.config/starship.toml

JetBrains Mono Nerd Font

The version in Fedora’s repo doesn’t include the icons. Download the official Nerd Font:

mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLo "JetBrainsMono.zip" https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip
rm JetBrainsMono.zip
fc-cache -fv

Configure Terminator

Go to Preferences → Profiles → Default → General, disable the system font and select JetBrainsMono Nerd Font Mono at size 12.


End result

qtekfun  ~/repos/qtekfun.github.io   master  12:40

Username, directory, git branch and time. No noise, no weird dependencies, reproducible in under 5 minutes on any fresh install.


Notes on the Surface kernel

The stock Fedora 44 kernel (7.0) has decent Surface Go support out of the box. The linux-surface project provides a patched kernel, but the official repo has no Fedora 44 packages yet and the F43 workaround conflicts with libwacom, which can take GNOME down with it. Not worth the risk until the project updates the repo.