<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pizidavi</title>
    <description>The latest articles on DEV Community by pizidavi (@pizidavi).</description>
    <link>https://dev.to/pizidavi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758152%2F170a4330-bac4-4b58-ac8b-efaa4222c90b.jpeg</url>
      <title>DEV Community: pizidavi</title>
      <link>https://dev.to/pizidavi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pizidavi"/>
    <language>en</language>
    <item>
      <title>Minimal Fedora install with Niri + DankMaterialShell</title>
      <dc:creator>pizidavi</dc:creator>
      <pubDate>Tue, 28 Apr 2026 16:19:56 +0000</pubDate>
      <link>https://dev.to/pizidavi/minimal-fedora-install-with-niri-dankmaterialshell-34md</link>
      <guid>https://dev.to/pizidavi/minimal-fedora-install-with-niri-dankmaterialshell-34md</guid>
      <description>&lt;p&gt;I wanted a &lt;em&gt;minimal Fedora base&lt;/em&gt; without giving up a modern Wayland desktop.&lt;/p&gt;

&lt;p&gt;This guide shows a reproducible flow to install Fedora from the &lt;strong&gt;Everything ISO&lt;/strong&gt;, then layer on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Niri&lt;/strong&gt; as the Wayland window manager&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DankMaterialShell (DMS)&lt;/strong&gt; as the desktop shell (Quickshell + Go) via the &lt;strong&gt;DankLinux&lt;/strong&gt; installer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your hardware differs (especially Wi‑Fi and GPU), driver/firmware steps may differ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;0) Before you start&lt;/li&gt;
&lt;li&gt;1) Install Fedora minimal&lt;/li&gt;
&lt;li&gt;2) First boot: baseline setup&lt;/li&gt;
&lt;li&gt;3) Install Niri + DMS via DankLinux&lt;/li&gt;
&lt;li&gt;4) Post-install: drivers + core functionality&lt;/li&gt;
&lt;li&gt;5) Optional: daily driver packages&lt;/li&gt;
&lt;li&gt;Final checklist&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  0) Before you start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A USB drive with the &lt;strong&gt;Fedora Everything ISO&lt;/strong&gt; written to it&lt;/li&gt;
&lt;li&gt;Basic familiarity with the Fedora installer&lt;/li&gt;
&lt;li&gt;Internet connection (for updates + packages)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re installing on a laptop, keep an Ethernet adapter/hotspot handy — Wi‑Fi firmware is the most common “minimal install” snag.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) Install Fedora minimal
&lt;/h2&gt;

&lt;p&gt;Boot from the USB and follow these steps in the Fedora installer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your language&lt;/li&gt;
&lt;li&gt;Set your keyboard layout&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Software Selection&lt;/strong&gt;, pick the minimal/custom option (keep it minimal)&lt;/li&gt;
&lt;li&gt;Configure the disk (choose your layout — Btrfs is a solid default)&lt;/li&gt;
&lt;li&gt;Create a user account and keep &lt;strong&gt;root disabled&lt;/strong&gt; (recommended)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point you should boot into a minimal Fedora shell environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  2) First boot: baseline setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Maximize DNF download speed
&lt;/h3&gt;

&lt;p&gt;Edit DNF’s configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/dnf/dnf.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add (or edit) this option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[main]&lt;/span&gt;
&lt;span class="py"&gt;max_parallel_downloads&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enable RPM Fusion repositories
&lt;/h3&gt;

&lt;p&gt;RPM Fusion is needed for some codecs and (commonly) NVIDIA drivers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm &lt;span class="se"&gt;\&lt;/span&gt;
  https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-&lt;span class="si"&gt;$(&lt;/span&gt;rpm &lt;span class="nt"&gt;-E&lt;/span&gt; %fedora&lt;span class="si"&gt;)&lt;/span&gt;.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf group upgrade core
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf upgrade &lt;span class="nt"&gt;--refresh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create XDG user directories
&lt;/h3&gt;

&lt;p&gt;This sets up the standard home folders (Downloads, Documents, etc.) using &lt;code&gt;xdg-user-dirs&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;xdg-user-dirs
xdg-user-dirs-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3) Install Niri + DMS via DankLinux
&lt;/h2&gt;

&lt;p&gt;Run the installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://install.danklinux.com | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the wizard I selected:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Niri&lt;/strong&gt; as Window Manager&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alacritty&lt;/strong&gt; as terminal emulator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dms-greeter&lt;/strong&gt; as display manager/greeter (a &lt;code&gt;greetd&lt;/code&gt; greeter)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ensure a graphical boot target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl set-default graphical.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now reboot!&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Post-install: drivers + core functionality
&lt;/h2&gt;

&lt;p&gt;Now that Fedora + Niri + DMS are installed, validate the “core stuff” (networking, graphics, portals, audio). The goal is to catch driver/firmware issues early.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install core software and firmware packages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;which wget pciutils linux-firmware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: &lt;code&gt;pciutils&lt;/code&gt; provides &lt;code&gt;lspci&lt;/code&gt; for hardware identification; &lt;code&gt;linux-firmware&lt;/code&gt; provides firmware blobs for many peripherals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wi‑Fi (NetworkManager)
&lt;/h3&gt;

&lt;p&gt;Install and enable NetworkManager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;NetworkManager NetworkManager-wifi
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; NetworkManager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli device status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
  If Wi‑Fi doesn’t work: diagnose driver/firmware
  &lt;p&gt;Troubleshooting commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Identify the Wi‑Fi adapter + kernel driver&lt;/span&gt;
lspci &lt;span class="nt"&gt;-nnk&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-iA3&lt;/span&gt; net

&lt;span class="c"&gt;# Check if common Wi‑Fi modules are loaded&lt;/span&gt;
lsmod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"iwl|rtl|ath9k|ath10k|mt76|b43|bcma"&lt;/span&gt;

&lt;span class="c"&gt;# Scan logs for firmware/driver errors&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dmesg | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-iE&lt;/span&gt; &lt;span class="s2"&gt;"firmware|wifi|wlan|iwl|rtl|ath|error"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;
  Intel Wi‑Fi firmware manual install (if your adapter needs it)
  &lt;p&gt;Download firmware from the upstream linux-firmware repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0-89.ucode
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/iwlwifi/iwlwifi-so-a0-gf-a0.pnvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move into &lt;code&gt;/lib/firmware/&lt;/code&gt; and fix ownership/permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mv &lt;/span&gt;iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;iwlwifi-so-a0-gf-a0.pnvm /lib/firmware/

&lt;span class="nb"&gt;sudo chown &lt;/span&gt;root:root /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;644 /lib/firmware/iwlwifi-so-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-so-a0-gf-a0.pnvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart the driver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;modprobe &lt;span class="nt"&gt;-r&lt;/span&gt; iwlwifi
&lt;span class="nb"&gt;sudo &lt;/span&gt;modprobe iwlwifi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  GPU (Intel + NVIDIA)
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Intel iGPU (Mesa)
&lt;/h4&gt;

&lt;p&gt;Install Mesa drivers and the &lt;code&gt;glxinfo&lt;/code&gt; tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;mesa-dri-drivers mesa-vulkan-drivers mesa-libGL mesa-demos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;glxinfo | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"OpenGL renderer"&lt;/span&gt;
&lt;span class="c"&gt;# Expected: "Mesa Intel(R) ..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  NVIDIA dGPU
&lt;/h4&gt;

&lt;p&gt;Install NVIDIA drivers from RPM Fusion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;akmod-nvidia xorg-x11-drv-nvidia-cuda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify PRIME offload rendering:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;__NV_PRIME_RENDER_OFFLOAD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nv"&gt;__GLX_VENDOR_LIBRARY_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nvidia glxinfo | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"OpenGL renderer"&lt;/span&gt;
&lt;span class="c"&gt;# Expected: "NVIDIA GeForce RTX ..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;
  Quick tip
  &lt;p&gt;Add a shell alias for easier PRIME offload testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;prime-run&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  XDG Desktop Portals (Flatpak + screenshots/screencast)
&lt;/h3&gt;

&lt;p&gt;Install portal backends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;xdg-desktop-portal xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-wlr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add or edit the configuration in &lt;code&gt;~/.config/xdg-desktop-portal/portal.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[preferred]&lt;/span&gt;
&lt;span class="py"&gt;default&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;gnome;gtk&lt;/span&gt;
&lt;span class="py"&gt;org.freedesktop.impl.portal.Screenshot&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;wlr&lt;/span&gt;
&lt;span class="py"&gt;org.freedesktop.impl.portal.ScreenCast&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;wlr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This uses &lt;code&gt;xdg-desktop-portal-gnome&lt;/code&gt; as default and keeps &lt;code&gt;gtk&lt;/code&gt;/&lt;code&gt;wlr&lt;/code&gt; available for Wayland-specific functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keyring
&lt;/h3&gt;

&lt;p&gt;Install &lt;code&gt;GNOME Keyring&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;gnome-keyring gnome-keyring-pam seahorse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the portal Secret provider in &lt;code&gt;~/.config/xdg-desktop-portal/portal.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[preferred]&lt;/span&gt;
&lt;span class="c"&gt;# ... existing config&lt;/span&gt;
&lt;span class="py"&gt;org.freedesktop.impl.portal.Secret&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;gnome-keyring&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Enable keyring auto-unlock (PAM)
&lt;/h4&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/pam.d/system-auth&lt;/code&gt; and add these lines in the appropriate sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# auth section (after other auth lines)
&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;       &lt;span class="n"&gt;optional&lt;/span&gt;    &lt;span class="n"&gt;pam_gnome_keyring&lt;/span&gt;.&lt;span class="n"&gt;so&lt;/span&gt;

&lt;span class="c"&gt;# session section (before session optional pam_systemd.so)
&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;    &lt;span class="n"&gt;optional&lt;/span&gt;    &lt;span class="n"&gt;pam_gnome_keyring&lt;/span&gt;.&lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="n"&gt;start_only&lt;/span&gt;

&lt;span class="c"&gt;# password section
&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;   &lt;span class="n"&gt;optional&lt;/span&gt;    &lt;span class="n"&gt;pam_gnome_keyring&lt;/span&gt;.&lt;span class="n"&gt;so&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;/etc/pam.d/greetd-greeter&lt;/code&gt; and add at the end:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;session&lt;/span&gt;    &lt;span class="n"&gt;optional&lt;/span&gt;    &lt;span class="n"&gt;pam_gnome_keyring&lt;/span&gt;.&lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="n"&gt;start_only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Audio and microphone (PipeWire)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf group upgrade multimedia &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;PackageKit-gstreamer-plugin
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-sof-firmware

systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; pipewire pipewire-pulse wireplumber
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bluetooth
&lt;/h3&gt;

&lt;p&gt;Troubleshooting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rfkill list
rfkill unblock bluetooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Battery power profiles
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;power-profiles-daemon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fingerprint
&lt;/h3&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;fprintd fprintd-pam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enroll / list fingerprints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fprintd-list &amp;lt;user&amp;gt;
fprintd-enroll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable fingerprint for sudo access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;authselect enable-feature with-fingerprint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Printer
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;cups-pk-helper
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  "Open With" / URL handler
&lt;/h3&gt;

&lt;p&gt;Install the common helper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;xdg-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set DankMaterialShell’s browser picker (&lt;code&gt;dms-open.desktop&lt;/code&gt;) as the default browser handler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xdg-settings &lt;span class="nb"&gt;set &lt;/span&gt;default-web-browser dms-open.desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Other quick checks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keyboard function keys (volume, mute, brightness)&lt;/li&gt;
&lt;li&gt;Camera&lt;/li&gt;
&lt;li&gt;Screen sharing / recording&lt;/li&gt;
&lt;li&gt;External monitor&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5) Optional: daily driver packages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Nautilus file manager + quick preview
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;nautilus sushi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: &lt;code&gt;sushi&lt;/code&gt; provides quick previews inside Nautilus.&lt;/p&gt;

&lt;h3&gt;
  
  
  FFmpeg (H.264 codecs)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf swap ffmpeg-free ffmpeg &lt;span class="nt"&gt;--allowerasing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flatpak + Flathub
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;flatpak

&lt;span class="c"&gt;# Add Flathub repository for Flatpak packages&lt;/span&gt;
flatpak remote-add &lt;span class="nt"&gt;--if-not-exists&lt;/span&gt; flathub https://dl.flathub.org/repo/flathub.flatpakrepo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fedora Everything ISO: &lt;a href="https://fedoraproject.org/misc/#everything" rel="noopener noreferrer"&gt;https://fedoraproject.org/misc/#everything&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DankLinux docs: &lt;a href="https://danklinux.com/docs" rel="noopener noreferrer"&gt;https://danklinux.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Arch Wiki (for general Linux concepts): &lt;a href="https://wiki.archlinux.org/" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AI is your best friend!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>fedora</category>
      <category>niri</category>
      <category>dankmaterialshell</category>
    </item>
    <item>
      <title>Jurnal: A Voice-First Journal App with On-Device Whisper + LLM Note</title>
      <dc:creator>pizidavi</dc:creator>
      <pubDate>Sun, 15 Feb 2026 21:18:42 +0000</pubDate>
      <link>https://dev.to/pizidavi/jurnal-a-voice-first-journal-app-with-on-device-whisper-llm-note-36le</link>
      <guid>https://dev.to/pizidavi/jurnal-a-voice-first-journal-app-with-on-device-whisper-llm-note-36le</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Jurnal is a simple mobile journaling app that makes it easy to capture "what happened today" using your voice. Instead of starting from a blank page, you record a short voice note, and the app turns it into a clean, structured journal entry you can skim later.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Jurnal&lt;/code&gt; is a &lt;em&gt;Romanian&lt;/em&gt; term that translates into English as &lt;em&gt;diary&lt;/em&gt; or &lt;em&gt;journal&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The core flow is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Record audio in-app&lt;/li&gt;
&lt;li&gt;Transcribe locally on-device using a Whisper model &lt;/li&gt;
&lt;li&gt;Send the transcription to a larger LLM to turn it into a real note, with sections like summary/highlights/intentions in Mardown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I like about this approach is the combination of privacy-first transcription with the "writing assistant" part happening after: I still speak naturally, and the app handles organizing the content into something readable.&lt;/p&gt;

&lt;p&gt;Teck stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native with Expo&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;react-native-executorch&lt;/code&gt; to handle local transcription model&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@tanstack/ai&lt;/code&gt; to provide online LLM utility&lt;/li&gt;
&lt;li&gt;TailwindCSS by Uniwind for styling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future improvements I'm excited about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Custom templates for different styles&lt;/li&gt;
&lt;li&gt;Choosing custom models for transcription and enrichment&lt;/li&gt;
&lt;li&gt;Manual editing of the final note in-app&lt;/li&gt;
&lt;li&gt;Smarter search with local &lt;strong&gt;RAG&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A background queue for long-running processing&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 Repo: &lt;a href="https://github.com/pizidavi/jurnal-app" rel="noopener noreferrer"&gt;https://github.com/pizidavi/jurnal-app&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Home&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;th&gt;Recording&lt;/th&gt;
&lt;th&gt;Settings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz8ebp3czyt3zzx445jp.jpg" alt="Home screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmxfkui33xnbu950cm9xz.jpg" alt="Recording new note" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fey8t58jk4uyx6vvpu9t5.jpg" alt="Note screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzwu5vzs7sykxbqhcrvh.jpg" alt="Setting screen" width="591" height="1280"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Copilot CLI was most helpful when I treated planning as a first-class step, not a formality. The biggest productivity boost came from writing a tight plan, implementing in small slices, and then letting the AI validate (and correct) itself.&lt;/p&gt;

&lt;p&gt;To support that workflow, I made the project intentionally strict: ESLint rules are restrictive, TypeScript is in strict mode with other custom strict types, and I pushed the assistant to run &lt;code&gt;lint&lt;/code&gt; and &lt;code&gt;typecheck&lt;/code&gt; command before considering anything as done. That created fast feedback loops and prevents subtle regressions from piling up.&lt;/p&gt;

&lt;p&gt;I also built a custom &lt;strong&gt;Orchestrator&lt;/strong&gt; agent that follows a &lt;code&gt;plan → implement → review&lt;/code&gt; cycle and repeats until the plan is completed. It was really fun to see the agents correct themselves when they missed a step or introduced a bug.&lt;/p&gt;

&lt;p&gt;I'm extremely positive about the future of Copilot CLI: the UI is good and the interaction model fits real development.&lt;br&gt;
One thing I'd love to see next is a persistent &lt;strong&gt;allowlist for safe commands&lt;/strong&gt; (like lint/typecheck/format), so that I don't have to approve them every time.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
