Hey there! So you just installed Fedora and now you're staring at a fresh desktop wondering "what next?" I've been there, and honestly, setting up a new Linux install can feel overwhelming. That's why I put together this guide - it's basically everything I wish someone had told me when I first switched to Fedora.
This isn't some corporate documentation. It's just me sharing what actually works, what breaks, and how to fix it when things go sideways (because they will, and that's totally normal).
Who's this for?
- Brand new to Fedora? Perfect.
- Coming from Ubuntu or another distro? Also perfect.
- Been using Fedora for years but want a solid checklist? Yep, you too.
- Complete Linux newbie? You might struggle a bit, but stick with it!
Quick heads up about commands:
- When you see
sudoat the start, that means "run as admin" - it'll ask for your password - The
-yflag just means "yes to everything" so you don't have to keep pressing enter - Copy-paste is your friend, but always read what you're about to run first
- ๐ฅ First Things First
- ๐ฆ Getting More Software
- ๐ฎ Graphics Drivers
- ๐ต Making Media Work
- ๐ง Useful Stuff
- โก Making Things Faster
- ๐ Security Stuff
- ๐พ Backup Your Stuff
- ๐ฎ Gaming Setup
- ๐ Apps I Actually Use
- ๐ฅ๏ธ Desktop environment
- ๐งน Keeping Things Clean
- ๐ Thanks
Okay, first thing - Fedora ships pretty bare-bones because of legal reasons. RPM Fusion is where all the actually useful stuff lives (codecs, drivers, etc.). You want this.
# Get the free repository (most stuff you need)
sudo dnf install -y \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
# Get the nonfree repository (NVIDIA drivers, some codecs)
sudo dnf install -y \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
# Update everything so it all plays nice together
sudo dnf group upgrade core -y
sudo dnf check-updateYeah, I know, updates are boring. But seriously, do this first. Fresh installs always have outdated packages.
# Update everything
sudo dnf update -y
# If it updated the kernel, reboot
sudo rebootYour hardware probably has newer firmware available. This actually matters for things like WiFi and battery life.
# See what can be updated
sudo fwupdmgr get-devices
# Refresh the firmware database
sudo fwupdmgr refresh --force
# Check for updates
sudo fwupdmgr get-updates
# Apply them
sudo fwupdmgr updateSome firmware updates need a reboot. Just do it.
This is purely cosmetic but makes you feel more at home. Pick something fun!
# Replace with whatever you want
sudo hostnamectl set-hostname hungry-beastFlathub Setup
Fedora comes with a neutered version of Flatpak. Flathub is where the actual apps are.
# Remove the limited Fedora repo
flatpak remote-delete fedora
# Add the real Flathub
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Update everything
flatpak update --appstreamTerra Repository (If You're Feeling Adventurous Like Finn and Jacke)
Caution
Terra has some community packages that aren't in the main repos. It's optional but sometimes useful.
#Add Terra Repository
sudo dnf install -y --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-releaseNVIDIA on Linux is... complicated. This works most of the time, but if you have issues, welcome to the club.
Before you start:
- Turn off Secure Boot in your BIOS (or learn to sign kernel modules โ your choice)
- Make sure everything is updated and rebooted
# Update and reboot first
# Install kernel headers and dev tools
sudo dnf install -y kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig
# Enable RPM Fusion (if not already)
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpmNote
Special Note for RTX 4000 and Newer Series: If you're using a 4000 or 5000 series GPU (e.g. 4060, 4080, 5090), Fedora needs a build macro set before installing the driver. This enables the open kernel module.
# Set open kernel module macro (one-time step)
sudo sh -c 'echo "%_with_kmod_nvidia_open 1" > /etc/rpm/macros.nvidia-kmod'Install the NVIDIA driver:
sudo dnf install -y akmod-nvidia xorg-x11-drv-nvidia-cudaNow wait. Seriously. It takes 5โ15 minutes to build the module.
You can monitor progress with:
sudo journalctl -f -u akmodsOnce done:
sudo rebootCheck if it worked:
nvidia-smiIf it doesn't work:
# Force rebuild and try again
sudo akmods --force --kernels $(uname -r)
sudo rebootNote
- Secure Boot: The NVIDIA module isn't signed by default. Either disable Secure Boot or manually sign the module.
- 5000 Series (May 2025): Fedora 42's live installer lacks proper Nouveau support for 5000 series GPUs. You might get stuck in 800ร600 resolution during install, which can break the UI.
- Manual rebuilds: After kernel updates, especially on newer GPUs, you might need to run:
sudo akmods --kernels $(uname -r) --rebuild
sudo rebootIf you're stuck in 800ร600, a black screen, or land in a terminal (tty) instead of your desktop, the NVIDIA module probably didn't build correctly. Use an older kernel from GRUB > Advanced Options and rerun the rebuild commands.
These usually just work, but let's make them work better.
Both AMD & Intel:
# Basic drivers and Vulkan support
sudo dnf install -y mesa-dri-drivers mesa-vulkan-drivers vulkan-loader mesa-libGLUAMD:
# AMD video acceleration (makes videos smoother)
sudo dnf install -y mesa-va-drivers-freeworld mesa-vdpau-drivers-freeworldNewer Intel GPUs:
# Intel video acceleration (for newer Intel GPUs)
sudo dnf install -y intel-media-driverOlder Intel GPUs:
# Intel video acceleration (for Grandfather Intel GPUs)
sudo dnf install libva-intel-driverFedora ships with basically no codecs because of patent issues. This fixes that.
# Replace the neutered ffmpeg with the real one
sudo dnf swap -y ffmpeg-free ffmpeg --allowerasing
# Install all the GStreamer plugins
sudo dnf install -y gstreamer1-plugins-{bad-\*,good-\*,base} gstreamer1-plugin-openh264 gstreamer1-libav lame\* --exclude=gstreamer1-plugins-bad-free-devel
# Install multimedia groups
sudo dnf4 group install multimedia
sudo dnf group install -y sound-and-videoThis makes video playback use your GPU instead of hammering your CPU.
# Install VA-API stuff
sudo dnf install -y ffmpeg-libs libva libva-utils# If you have NVIDIA, add this too
sudo dnf install -y nvidia-vaapi-driverFirefox needs a little help with H.264 videos.
# Install the Cisco codec (it's free but weird licensing)
sudo dnf install -y openh264 gstreamer1-plugin-openh264 mozilla-openh264
# Enable the Cisco repo
sudo dnf config-manager setopt fedora-cisco-openh264.enabled=1
sudo dnf update -yRestart Firefox and check that the OpenH264 plugin is enabled in about:addons.
Because you'll definitely need to extract a .rar file someday.
sudo dnf install -y p7zip p7zip-plugins unrarWeb pages and documents still look weird without these.
# Install dependencies
sudo dnf install -y curl cabextract xorg-x11-font-utils fontconfig
# Install the fonts
sudo rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm
# Update font cache
sudo fc-cache -fvSome apps only come as AppImages. This makes them work.
# Install FUSE
sudo dnf install -y fuse libfuse2
# Optional: AppImage manager (actually pretty useful)
flatpak install -y flathub it.mijorus.gearleverYou can keep your Flatpak apps up to date automatically. This setup updates your Flatpaks every 24 hours and especially helpful if you disable GNOME Software on startup.
# Create the service unit
sudo tee /etc/systemd/system/flatpak-update.service > /dev/null <<'EOF'
[Unit]
Description=Update Flatpak apps automatically
[Service]
Type=oneshot
ExecStart=/usr/bin/flatpak update -y --noninteractive
EOF
# Create the timer unit
sudo tee /etc/systemd/system/flatpak-update.timer > /dev/null <<'EOF'
[Unit]
Description=Run Flatpak update every 24 hours
Wants=network-online.target
Requires=network-online.target
After=network-online.target
[Timer]
OnBootSec=120
OnUnitActiveSec=24h
[Install]
WantedBy=timers.target
EOF
# Reload systemd and enable the timer
sudo systemctl daemon-reload
sudo systemctl enable --now flatpak-update.timer
# Check the status to verify everything is working
sudo systemctl status flatpak-update.timerThis one's easy and makes a noticeable difference.
sudo systemctl disable NetworkManager-wait-online.serviceFedora's power management is pretty good, but I personally prefer TLP For my Laptop:
Caution
#Add TLP Repository
sudo dnf install https://repo.linrunner.de/fedora/tlp/repos/releases/tlp-release.fc$(rpm -E %fedora).noarch.rpm
# Install TLP
sudo dnf install tlp tlp-rdw
#Remove conflicting power profile demone
sudo dnf remove tuned tuned-ppd
# Enable TLP service
sudo systemctl enable tlp.service
#Mask the following services to avoid conflicts with TLPโs Radio Device Switching options
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
Only install TLP if Fedora's built-in power management isn't working for you.
If you dual boot with Windows, this fixes the clock being wrong.
# Tell Fedora to use UTC for hardware clock
sudo timedatectl set-local-rtc 0 --adjust-system-clockCaution
# To disable CPU mitigations (NOT recommended)
# sudo grubby --update-kernel=ALL --args="mitigations=off"
# To re-enable them later (DO THIS)
# sudo grubby --update-kernel=ALL --remove-args="mitigations=off"This encrypts your DNS queries so your ISP can't see what websites you're visiting.
First add the cloudflared repository and install it with:
#Add Cloudflared repository
sudo dnf config-manager addrepo --from-repofile=https://pkg.cloudflare.com/cloudflared.repo
# Install cloudflared
sudo dnf install -y cloudflaredThen do The rest:
# Create a systemd service for cloudflared
sudo tee /etc/systemd/system/cloudflared.service > /dev/null <<'EOF'
[Unit]
Description=Cloudflared DNS-over-HTTPS proxy
After=network.target
[Service]
ExecStart=/usr/bin/cloudflared proxy-dns --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Restart=on-failure
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
# Reload and enable the service
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable --now cloudflared
# Configure systemd-resolved to use 127.0.0.1 (cloudflared)
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/dns-over-https.conf > /dev/null <<'EOF'
[Resolve]
DNS=127.0.0.1
FallbackDNS=1.1.1.1
DNSSEC=yes
Cache=yes
EOF
# Tell NetworkManager to use systemd-resolved
sudo tee /etc/NetworkManager/conf.d/dns.conf > /dev/null <<'EOF'
[main]
dns=systemd-resolved
EOF
# Restart services
sudo systemctl restart cloudflared
sudo systemctl restart systemd-resolved
sudo systemctl restart NetworkManager
# Test DNS resolution
dig +short example.com
# Check current DNS status
resolvectl statusIf you're using Btrfs (default in newer Fedora), you can take snapshots with btrfs assistant.
sudo dnf install -y btrfs-assistant btrbk snapperSetup:
- Run
btrfs-assistantto set up snapshots with a GUI - Enable automatic snapshots:
sudo systemctl enable --now snapper-timeline.timer
sudo systemctl enable --now snapper-cleanup.timerImportant: This only backs up system files, not your personal stuff unless you configure it differently.
Use Dรฉjร Dup for your documents, photos, etc.
# Install it
sudo dnf install -y deja-dup
# Or get it from Flathub
flatpak install -y flathub org.gnome.DejaDupAlways backup to external storage or cloud, not the same disk.
Steam works great on Fedora thanks to Proton.
sudo dnf install -y steamThat's it. Seriously. Most Windows games just work now.
Note
If you're using an NVIDIA Newer GPU and Steam doesn't launch or acts weird, it's probably a missing dependency issue. Just remove the RPM version and install the Flatpak one instead should work better and do a search how setup flatpak permissions if needed for some games or so...
#Removes Steam RPM version
sudo dnf remove steam
#Install steam Flatpak version
flatpak install flathub com.valvesoftware.SteamBrave blocks ads, pretty fast:
sudo dnf install dnf-plugins-core
sudo dnf config-manager addrepo --from-repofile=https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
sudo dnf install brave-browserVivaldi tons of customization options:
sudo dnf config-manager addrepo --from-repofile=<(curl -s https://repo.vivaldi.com/archive/vivaldi-fedora.repo)
sudo rpm --import https://repo.vivaldi.com/archive/linux_signing_key.pub
sudo dnf install -y vivaldi-stableVS Code basically spy software from the other world.VSCodium which is VS Code without the telemetry that's the one I'd recommend, but I still use regular VS Code anyway:
# Import Microsoft GPG key
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
# Add VS Code repository to system packages
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'
# Install VS Code
sudo dnf install -y codeJetBrains Toolbox Personally I use it for Rider and Android Studio,but you can find other JetBrains IDEs on it:
# Create temporary directory for download process
TMP_DIR=$(mktemp -d)
# Fetch latest JetBrains Toolbox download URL from official site
ARCHIVE_URL=$(curl -s 'https://data.services.jetbrains.com/products/releases?code=TBA&latest=true&type=release' \
| jq -r '.TBA[0].downloads.linux.link')
# Download the toolbox archive to temporary directory
curl -Lo "$TMP_DIR/toolbox.tar.gz" "$ARCHIVE_URL"
# Create installation directory in local share fold for JetBrains Toolbox
mkdir -p "$HOME/.local/share/JetBrains/Toolbox"
# Extract toolbox
tar -xzf "$TMP_DIR/toolbox.tar.gz" --strip-components=1 -C "$HOME/.local/share/JetBrains/Toolbox"
# Clean up temporary files we did for the installation
rm -rf "$TMP_DIR"
# Launch JetBrains Toolbox
"$HOME/.local/share/JetBrains/Toolbox/jetbrains-toolbox" &Git Mostly installed but let's confirm:
sudo dnf install -y gitContainers
Podman is better than Docker, fight me :):
#Podman core
sudo dnf install -y podman podman-compose podman-docker
#Podmman GUI
flatpak install flathub io.podman_desktop.PodmanDesktopVLC VLC is my go-to multimedia player, but it's totally up to you whether you use it or choose something else:
# Install VLC
sudo dnf install vlcOnlyOffice better For MS Office compatibility:
sudo dnf install -y https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors.x86_64.rpmStop GNOME Software autostart This thing launches every boot and just sits there hogging memory. I always remove it:
sudo rm /etc/xdg/autostart/org.gnome.Software.desktopNote: Removing GNOME Software from autostart disables update notifications (you'll need to open Software manually to check for updates) and stops automatic Flatpak updates. You'll need to update Flatpaks manually or use the auto-update methods mentioned above.
Get GNOME Tweaks You literally can't use GNOME without this. Need to add minimize/maximize buttons to Window? This is where you do it:
sudo dnf install gnome-tweaksExtra themes if you're into that I stick with default but some people like options. Up to you:
sudo dnf install gnome-themes-extraExtension Manager is essential Don't even think about skipping this one. Makes managing extensions actually easy:
flatpak install -y flathub com.mattjakeman.ExtensionManagerTerminal Transparency it's just better with it for me:
gsettings set org.gnome.Ptyxis.Profile:/org/gnome/Ptyxis/Profiles/$PTYXIS_PROFILE/ opacity .90My must-have extensions: Its Just my personal preference do what you want :)
- Vitals - shows CPU/RAM usage in top bar, pretty handy
- Blur my Shell - makes everything look less flat and boring
- Dash to Dock - turns the dock into something actually useful
nothing for now XD
Caution
Be careful here. Only remove stuff you're sure you don't need.
# See what's installed
dnf list installed | less
# Check what depends on a package before removing it
dnf info package-name
dnf repoquery --whatrequires package-name
# Example removals (modify for your needs)
# sudo dnf remove -y cheese rhythmboxDo this occasionally to free up space.
# Clean package cache
sudo dnf clean all
# Remove orphaned packages
sudo dnf autoremove -y
# Remove old kernels (if you have too many)
# sudo dnf remove $(dnf repoquery --installonly --latest-limit=-3 -q)This guide exists because a bunch of people before me figured this stuff out and shared it. Big thanks to folks like devangshekhawat, paulsorensen, Mohammed Besar, and countless others on forums and Reddit who've helped people get Fedora working properly.
This isn't official Fedora documentation - it's just what works for me. Your mileage may vary. Always backup important stuff before making big changes, and don't blame me if something breaks (but feel free to ask for help on the Fedora forums).
Final note: Linux can be frustrating sometimes, but it's also incredibly rewarding once you get it set up the way you like. Don't give up if something doesn't work the first time - that's just part of the experience!