Tools: Minimal Fedora install with Niri + DankMaterialShell - 2025 Update
Table of contents
0) Before you start
1) Install Fedora minimal
2) First boot: baseline setup
Maximize DNF download speed
Enable RPM Fusion repositories
Create XDG user directories
3) Install Niri + DMS via DankLinux
4) Post-install: drivers + core functionality
Install core software and firmware packages
Wi‑Fi (NetworkManager)
GPU (Intel + NVIDIA)
Intel iGPU (Mesa)
NVIDIA dGPU
XDG Desktop Portals (Flatpak + screenshots/screencast)
Keyring
Enable keyring auto-unlock (PAM)
Audio and microphone (PipeWire)
Bluetooth
Battery power profiles
Fingerprint
Printer
"Open With" / URL handler
Other quick checks
5) Optional: daily driver packages
Nautilus file manager + quick preview
FFmpeg (H.264 codecs)
Flatpak + Flathub
References I wanted a minimal Fedora base without giving up a modern Wayland desktop. This guide shows a reproducible flow to install Fedora from the Everything ISO, then layer on: If your hardware differs (especially Wi‑Fi and GPU), driver/firmware steps may differ. If you’re installing on a laptop, keep an Ethernet adapter/hotspot handy — Wi‑Fi firmware is the most common “minimal install” snag. Boot from the USB and follow these steps in the Fedora installer: At this point you should boot into a minimal Fedora shell environment. Edit DNF’s configuration: Add (or edit) this option: RPM Fusion is needed for some codecs and (commonly) NVIDIA drivers. This sets up the standard home folders (Downloads, Documents, etc.) using xdg-user-dirs. In the wizard I selected: Ensure a graphical boot target: Now that Fedora + Niri + DMS are installed, validate the “core stuff” (networking, graphics, portals, audio). The goal is to catch driver/firmware issues early. NOTE: pciutils provides lspci for hardware identification; linux-firmware provides firmware blobs for many peripherals. Install and enable NetworkManager: Troubleshooting commands: Download firmware from the upstream linux-firmware repository: Move into /lib/firmware/ and fix ownership/permissions: Install Mesa drivers and the glxinfo tool: Install NVIDIA drivers from RPM Fusion: Verify PRIME offload rendering: Add a shell alias for easier PRIME offload testing: Install portal backends: Add or edit the configuration in ~/.config/xdg-desktop-portal/portal.conf: This uses xdg-desktop-portal-gnome as default and keeps gtk/wlr available for Wayland-specific functionality. Install GNOME Keyring: Set the portal Secret provider in ~/.config/xdg-desktop-portal/portal.conf: Edit /etc/pam.d/system-auth and add these lines in the appropriate sections: Edit /etc/pam.d/greetd-greeter and add at the end: Enroll / list fingerprints: Enable fingerprint for sudo access: Install the common helper: Set DankMaterialShell’s browser picker (dms-open.desktop) as the default browser handler: NOTE: sushi provides quick previews inside Nautilus. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse
$ -weight: 600;">sudo nano /etc/-weight: 500;">dnf/-weight: 500;">dnf.conf
-weight: 600;">sudo nano /etc/-weight: 500;">dnf/-weight: 500;">dnf.conf
-weight: 600;">sudo nano /etc/-weight: 500;">dnf/-weight: 500;">dnf.conf
[main]
max_parallel_downloads=10
[main]
max_parallel_downloads=10
[main]
max_parallel_downloads=10
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install \ 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
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install \ 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
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install \ 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
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade core
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">upgrade --refresh
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade core
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">upgrade --refresh
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade core
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">upgrade --refresh
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-user-dirs
xdg-user-dirs--weight: 500;">update
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-user-dirs
xdg-user-dirs--weight: 500;">update
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-user-dirs
xdg-user-dirs--weight: 500;">update
-weight: 500;">curl -fsSL https://-weight: 500;">install.danklinux.com | sh
-weight: 500;">curl -fsSL https://-weight: 500;">install.danklinux.com | sh
-weight: 500;">curl -fsSL https://-weight: 500;">install.danklinux.com | sh
-weight: 600;">sudo -weight: 500;">systemctl set-default graphical.target
-weight: 600;">sudo -weight: 500;">systemctl set-default graphical.target
-weight: 600;">sudo -weight: 500;">systemctl set-default graphical.target
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install which -weight: 500;">wget pciutils linux-firmware
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install which -weight: 500;">wget pciutils linux-firmware
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install which -weight: 500;">wget pciutils linux-firmware
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install NetworkManager NetworkManager-wifi
-weight: 600;">sudo -weight: 500;">systemctl -weight: 500;">enable --now NetworkManager
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install NetworkManager NetworkManager-wifi
-weight: 600;">sudo -weight: 500;">systemctl -weight: 500;">enable --now NetworkManager
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install NetworkManager NetworkManager-wifi
-weight: 600;">sudo -weight: 500;">systemctl -weight: 500;">enable --now NetworkManager
nmcli device -weight: 500;">status
nmcli device -weight: 500;">status
nmcli device -weight: 500;">status
# Identify the Wi‑Fi adapter + kernel driver
lspci -nnk | grep -iA3 net # Check if common Wi‑Fi modules are loaded
lsmod | grep -E "iwl|rtl|ath9k|ath10k|mt76|b43|bcma" # Scan logs for firmware/driver errors
-weight: 600;">sudo dmesg | grep -iE "firmware|wifi|wlan|iwl|rtl|ath|error"
# Identify the Wi‑Fi adapter + kernel driver
lspci -nnk | grep -iA3 net # Check if common Wi‑Fi modules are loaded
lsmod | grep -E "iwl|rtl|ath9k|ath10k|mt76|b43|bcma" # Scan logs for firmware/driver errors
-weight: 600;">sudo dmesg | grep -iE "firmware|wifi|wlan|iwl|rtl|ath|error"
# Identify the Wi‑Fi adapter + kernel driver
lspci -nnk | grep -iA3 net # Check if common Wi‑Fi modules are loaded
lsmod | grep -E "iwl|rtl|ath9k|ath10k|mt76|b43|bcma" # Scan logs for firmware/driver errors
-weight: 600;">sudo dmesg | grep -iE "firmware|wifi|wlan|iwl|rtl|ath|error"
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0-89.ucode
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0.pnvm
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0-89.ucode
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0.pnvm
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0-89.ucode
-weight: 500;">wget https://-weight: 500;">git.kernel.org/pub/scm/linux/kernel/-weight: 500;">git/firmware/linux-firmware.-weight: 500;">git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0.pnvm /lib/firmware/ -weight: 600;">sudo chown root:root /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo chmod 644 /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0.pnvm /lib/firmware/ -weight: 600;">sudo chown root:root /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo chmod 644 /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/
-weight: 600;">sudo mv iwlwifi-so-a0-gf-a0.pnvm /lib/firmware/ -weight: 600;">sudo chown root:root /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo chmod 644 /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
-weight: 600;">sudo modprobe -r iwlwifi
-weight: 600;">sudo modprobe iwlwifi
-weight: 600;">sudo modprobe -r iwlwifi
-weight: 600;">sudo modprobe iwlwifi
-weight: 600;">sudo modprobe -r iwlwifi
-weight: 600;">sudo modprobe iwlwifi
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install mesa-dri-drivers mesa-vulkan-drivers mesa-libGL mesa-demos
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install mesa-dri-drivers mesa-vulkan-drivers mesa-libGL mesa-demos
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install mesa-dri-drivers mesa-vulkan-drivers mesa-libGL mesa-demos
glxinfo | grep "OpenGL renderer"
# Expected: "Mesa Intel(R) ..."
glxinfo | grep "OpenGL renderer"
# Expected: "Mesa Intel(R) ..."
glxinfo | grep "OpenGL renderer"
# Expected: "Mesa Intel(R) ..."
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install akmod-nvidia xorg-x11-drv-nvidia-cuda
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install akmod-nvidia xorg-x11-drv-nvidia-cuda
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install akmod-nvidia xorg-x11-drv-nvidia-cuda
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer"
# Expected: "NVIDIA GeForce RTX ..."
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer"
# Expected: "NVIDIA GeForce RTX ..."
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer"
# Expected: "NVIDIA GeForce RTX ..."
alias prime-run="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"
alias prime-run="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"
alias prime-run="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-wlr
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-wlr
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-wlr
[preferred]
default=gnome;gtk
org.freedesktop.impl.portal.Screenshot=wlr
org.freedesktop.impl.portal.ScreenCast=wlr
[preferred]
default=gnome;gtk
org.freedesktop.impl.portal.Screenshot=wlr
org.freedesktop.impl.portal.ScreenCast=wlr
[preferred]
default=gnome;gtk
org.freedesktop.impl.portal.Screenshot=wlr
org.freedesktop.impl.portal.ScreenCast=wlr
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install gnome-keyring gnome-keyring-pam seahorse
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install gnome-keyring gnome-keyring-pam seahorse
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install gnome-keyring gnome-keyring-pam seahorse
[preferred]
# ... existing config
org.freedesktop.impl.portal.Secret=gnome-keyring
[preferred]
# ... existing config
org.freedesktop.impl.portal.Secret=gnome-keyring
[preferred]
# ... existing config
org.freedesktop.impl.portal.Secret=gnome-keyring
# auth section (after other auth lines)
auth optional pam_gnome_keyring.so # session section (before session optional pam_systemd.so)
session optional pam_gnome_keyring.so start_only # password section
password optional pam_gnome_keyring.so
# auth section (after other auth lines)
auth optional pam_gnome_keyring.so # session section (before session optional pam_systemd.so)
session optional pam_gnome_keyring.so start_only # password section
password optional pam_gnome_keyring.so
# auth section (after other auth lines)
auth optional pam_gnome_keyring.so # session section (before session optional pam_systemd.so)
session optional pam_gnome_keyring.so start_only # password section
password optional pam_gnome_keyring.so
session optional pam_gnome_keyring.so start_only
session optional pam_gnome_keyring.so start_only
session optional pam_gnome_keyring.so start_only
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade multimedia --exclude=PackageKit-gstreamer-plugin
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-sof-firmware -weight: 500;">systemctl --user -weight: 500;">enable --now pipewire pipewire-pulse wireplumber
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade multimedia --exclude=PackageKit-gstreamer-plugin
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-sof-firmware -weight: 500;">systemctl --user -weight: 500;">enable --now pipewire pipewire-pulse wireplumber
-weight: 600;">sudo -weight: 500;">dnf group -weight: 500;">upgrade multimedia --exclude=PackageKit-gstreamer-plugin
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-sof-firmware -weight: 500;">systemctl --user -weight: 500;">enable --now pipewire pipewire-pulse wireplumber
rfkill list
rfkill unblock bluetooth
rfkill list
rfkill unblock bluetooth
rfkill list
rfkill unblock bluetooth
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install power-profiles-daemon
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install power-profiles-daemon
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install power-profiles-daemon
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install fprintd fprintd-pam
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install fprintd fprintd-pam
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install fprintd fprintd-pam
fprintd-list <user>
fprintd-enroll
fprintd-list <user>
fprintd-enroll
fprintd-list <user>
fprintd-enroll
-weight: 600;">sudo authselect -weight: 500;">enable-feature with-fingerprint
-weight: 600;">sudo authselect -weight: 500;">enable-feature with-fingerprint
-weight: 600;">sudo authselect -weight: 500;">enable-feature with-fingerprint
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install cups-pk-helper
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install cups-pk-helper
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install cups-pk-helper
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-utils
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-utils
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install xdg-utils
xdg-settings set default-web-browser dms-open.desktop
xdg-settings set default-web-browser dms-open.desktop
xdg-settings set default-web-browser dms-open.desktop
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install nautilus sushi
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install nautilus sushi
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install nautilus sushi
-weight: 600;">sudo -weight: 500;">dnf swap ffmpeg-free ffmpeg --allowerasing
-weight: 600;">sudo -weight: 500;">dnf swap ffmpeg-free ffmpeg --allowerasing
-weight: 600;">sudo -weight: 500;">dnf swap ffmpeg-free ffmpeg --allowerasing
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install flatpak # Add Flathub repository for Flatpak packages
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install flatpak # Add Flathub repository for Flatpak packages
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
-weight: 600;">sudo -weight: 500;">dnf -weight: 500;">install flatpak # Add Flathub repository for Flatpak packages
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - Niri as the Wayland window manager
- DankMaterialShell (DMS) as the desktop shell (Quickshell + Go) via the DankLinux installer - 0) Before you -weight: 500;">start
- 1) Install Fedora minimal
- 2) First boot: baseline setup
- 3) Install Niri + DMS via DankLinux
- 4) Post--weight: 500;">install: drivers + core functionality
- 5) Optional: daily driver packages
- Final checklist - A USB drive with the Fedora Everything ISO written to it
- Basic familiarity with the Fedora installer
- Internet connection (for updates + packages) - Select your language
- Set your keyboard layout
- In Software Selection, pick the minimal/custom option (keep it minimal)
- Configure the disk (choose your layout — Btrfs is a solid default)
- Create a user account and keep root disabled (recommended) - Niri as Window Manager
- Alacritty as terminal emulator
- dms-greeter as display manager/greeter (a greetd greeter) - Keyboard function keys (volume, mute, brightness)
- Screen sharing / recording
- External monitor - Fedora Everything ISO: https://fedoraproject.org/misc/#everything
- DankLinux docs: https://danklinux.com/docs
- Arch Wiki (for general Linux concepts): https://wiki.archlinux.org/
- AI is your best friend!