Tools: Minimal Fedora install with Niri + DankMaterialShell - 2025 Update

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

Command

Copy

$ -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!