< the skull AMON: HOW I MADE FEDORA FEEL RIGHT ON THE MSI PULSE 16 AI ========================================================= 2026-06-30 I wiped the notebook and installed Fedora KDE because I wanted a fast, clean and current machine. The idea was not to turn the installation into an eternal lab project. I wanted it ready for work, writing, coding, server access, IRC, cloud storage and full use of the hardware without fighting drivers all day. The machine was named Amon. The goal was simple: install the system, get the NVIDIA driver right, build a strong writing environment, make SSH and Tailscale work, configure power behavior without annoying surprises and customize KDE without filling the system with questionable themes. This text does not include passwords, private domains, IP addresses, tokens or sensitive details. Commands only appear when they help document what was actually done. The machine ----------- The notebook is an MSI Pulse 16 AI C1VGKG. According to the official MSI specification for the Pulse 16 AI C1V line, the configuration includes a 16 inch QHD+ 2560x1600 display at 240 Hz, an NVIDIA GeForce RTX 4070 Laptop GPU with 8 GB GDDR6 in the C1VGKG model, DDR5 5600 memory with two slots and support for up to 96 GB, two M.2 NVMe PCIe Gen4 slots, Wi-Fi 6E with Bluetooth 5.3, a 90 Wh battery, a 240 W power adapter and a weight of 2.5 kg. Source: MSI Pulse 16 AI C1V Specification, https://www.msi.com/Laptop/Pulse-16-AI-C1VX/Specification [1] Item Specification Model MSI Pulse 16 AI C1VGKG Display 16 inch QHD+ 2560x1600, 240 Hz, IPS-Level CPU Intel Core Ultra 9, with Intel AI Boost NPU GPU NVIDIA GeForce RTX 4070 Laptop GPU, 8 GB GDDR6 Memory DDR5 5600, two slots, up to 96 GB Storage 2 M.2 NVMe PCIe Gen4 slots Network Wi-Fi 6E and Bluetooth 5.3 Battery and power 90 Wh battery and 240 W adapter Weight 2.5 kg First step: hostname and a clean base ------------------------------------- After the installation, the first thing I did was give the machine a proper name. That avoids the usual mess of generic hostnames in the network, terminal, Tailscale and SSH. sudo hostnamectl set-hostname amon hostnamectl sudo dnf upgrade --refresh -y RPM Fusion and NVIDIA without the manual installer -------------------------------------------------- The sensitive part was NVIDIA. Instead of downloading the `.run` installer from NVIDIA and creating a maintenance problem for myself, I used RPM Fusion and `akmod-nvidia`. That is the cleaner path on Fedora because the module follows kernel updates instead of becoming a manual hack. Before installing the driver, I checked that Secure Boot was disabled. That avoids the whole module signing soap opera. Then I installed the driver, let `akmods` build the module, regenerated initramfs and validated everything with `nvidia-smi`. mokutil --sb-state sudo dnf install -y akmod-nvidia xorg-x11-drv-nvidia-cuda nvidia-settings kernel-devel-matched sudo akmods --force sudo dracut --force sudo reboot nvidia-smi lsmod | grep nvidia __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer" Multimedia, codecs and video acceleration ----------------------------------------- Fedora is more careful with codecs by default. That is nice in theory, but in real use I want video working, media players behaving and hardware acceleration doing its job. So I finished the multimedia setup through RPM Fusion and installed VA-API pieces for Intel and NVIDIA. sudo dnf swap -y ffmpeg-free ffmpeg --allowerasing sudo dnf group install -y multimedia sudo dnf install -y libva libva-utils intel-media-driver libva-nvidia-driver vainfo DNF and diagnostic tools ------------------------ I also tuned DNF a little and installed diagnostic tools. Not because I want to stare at pretty graphs all day, but because it is useful when something heats up, freezes or starts eating resources without asking permission. sudo tee -a /etc/dnf/dnf.conf >/dev/null <<'EOF' # Amon tuning max_parallel_downloads=10 fastestmirror=True defaultyes=True keepcache=False EOF sudo dnf clean all sudo dnf makecache sudo dnf install -y btop htop fastfetch inxi lm_sensors pciutils usbutils lshw nvtop powertop tuned tuned-ppd tuned-utils mesa-demos vulkan-tools mangohud goverlay akmods kernel-devel-matched Power profile ------------- For performance, I enabled `tuned` and used `throughput-performance`. It is great on AC power, but it is not magic. More performance usually means more heat and more power draw. For normal use, `balanced` is still the smarter default. sudo systemctl enable --now tuned sudo tuned-adm profile throughput-performance tuned-adm active sudo tuned-adm profile balanced Ghostty as the default terminal ------------------------------- Ghostty became the default terminal. I wanted something modern, fast and good looking. The only small trap was the theme name. On Linux, theme names are literal. `catppuccin-latte` did not work. `Catppuccin Latte` did. mkdir -p ~/.config/ghostty cat > ~/.config/ghostty/config <<'EOF' font-family = JetBrains Mono font-size = 12 theme = light:Catppuccin Latte,dark:Catppuccin Mocha window-padding-x = 8 window-padding-y = 8 copy-on-select = clipboard confirm-close-surface = false EOF ghostty +list-themes | grep -i cat Writing, PDF and EPUB --------------------- The machine was also built as a writing workstation. I installed ghostwriter for Markdown, LibreOffice for traditional documents, Okular for reading and annotating PDFs, PDF Arranger for simple PDF surgery, Calibre for ebook management and conversion, Sigil for proper EPUB editing and Zotero for references. In the terminal, I installed the tools that actually solve problems: Pandoc for document conversion, qpdf and poppler-utils for PDF work, OCRmyPDF and Tesseract for OCR, ImageMagick for images, ExifTool for metadata and TeX Live for PDF generation through LaTeX. flatpak install -y flathub org.kde.ghostwriter org.libreoffice.LibreOffice org.kde.okular com.github.jeromerobert.pdfarranger com.calibre_ebook.calibre com.sigil_ebook.Sigil org.zotero.Zotero sudo dnf install -y pandoc qpdf poppler-utils ocrmypdf tesseract tesseract-langpack-por tesseract-langpack-eng ImageMagick djvulibre perl-Image-ExifTool unpaper texlive-scheme-medium texlive-collection-fontsrecommended texlive-collection-latexrecommended texlive-collection-latexextra IRC with Halloy --------------- For IRC, I installed Halloy through Flatpak and replicated my Windows configuration into `config.toml`. The important part was not publishing passwords or private server details. Anything with credentials stays local. mkdir -p ~/.var/app/org.squidowl.halloy/config nano ~/.var/app/org.squidowl.halloy/config/config.toml chmod 600 ~/.var/app/org.squidowl.halloy/config/config.toml Tailscale and SSH ----------------- Remote access is handled through Tailscale and SSH. That lets me work on the machine from Windows without exposing SSH to the whole internet. `sshd` was enabled, and the machine became reachable through the Tailnet address. sudo dnf install -y openssh-server sudo systemctl enable --now sshd systemctl status sshd --no-pager tailscale ip -4 tailscale status Cloud storage on Fedora KDE --------------------------- I did not want to depend on KDE native Google Drive integration. It exists, but it is not something I would build my whole workflow around. To mount cloud services as a local filesystem, I installed ExpanDrive through its RPM. The installation completed properly and left the binary available on the system. mkdir -p ~/Downloads cd ~/Downloads curl -L -A "Mozilla/5.0" -o ExpanDrive.rpm "https://www.expandrive.com/api/download/expandrive?platform=linux&ext=rpm" file ExpanDrive.rpm sudo dnf install -y ./ExpanDrive.rpm rpm -qa | grep -i expandrive command -v expandrive Dark KDE, fonts and icons ------------------------- The visual side was handled carefully because I was doing it remotely over SSH. I did not try to rebuild panels or install random KDE Store themes without seeing the screen. I applied a safe base: Breeze Dark, Papirus Dark, Noto Sans for the interface and JetBrains Mono for fixed-width text. sudo dnf install -y papirus-icon-theme google-noto-sans-fonts google-noto-serif-fonts jetbrains-mono-fonts kvantum qt6ct qt5ct breeze-gtk kwriteconfig6 --file kdeglobals --group General --key ColorScheme BreezeDark kwriteconfig6 --file kdeglobals --group KDE --key LookAndFeelPackage org.kde.breezedark.desktop kwriteconfig6 --file kdeglobals --group KDE --key widgetStyle Breeze kwriteconfig6 --file kdeglobals --group Icons --key Theme Papirus-Dark kwriteconfig6 --file kdeglobals --group General --key fixed "JetBrains Mono,10,-1,5,50,0,0,0,0,0" kwriteconfig6 --file kdeglobals --group General --key font "Noto Sans,10,-1,5,50,0,0,0,0,0" Power: plugged in, no sleeping from idle ---------------------------------------- The power behavior ended up exactly how I wanted it. When plugged in, the notebook should not turn off the display or suspend by itself because of inactivity. But when I close the lid, it can suspend. That is the correct middle ground for a notebook. kwriteconfig6 --file powerdevilrc --group AC --group DPMSControl --key idleTime 0 kwriteconfig6 --file powerdevilrc --group AC --group DimDisplay --key idleTime 0 kwriteconfig6 --file powerdevilrc --group AC --group SuspendSession --key idleTime 0 kwriteconfig6 --file powerdevilrc --group AC --group HandleButtonEvents --key lidAction 1 systemctl --user restart plasma-powerdevil.service 2>/dev/null || systemctl --user restart plasma-powerdevil sudo tee /etc/systemd/logind.conf.d/99-amon-power.conf >/dev/null <<'EOF' [Login] HandleLidSwitchExternalPower=suspend HandleLidSwitchDocked=suspend IdleAction=ignore EOF sudo systemctl restart systemd-logind OpenPGP, development and AI in the terminal ------------------------------------------- For OpenPGP, the natural choice on Fedora KDE was Kleopatra, together with GnuPG and `pinentry-qt`. For development, I installed a Python and Go base. For AI in the terminal, I installed Claude Code through the official repository, with the rule of running it inside project directories, not across my whole home folder. sudo dnf install -y kleopatra gnupg2 pinentry-qt kgpg sudo dnf install -y python3 python3-pip python3-devel python3-virtualenv pipx golang git gcc gcc-c++ make cmake pkgconf-pkg-config openssl-devel libffi-devel zlib-devel bzip2-devel xz-devel sqlite-devel readline-devel claude doctor claude --version Image work and visual creation ------------------------------ For images, GIMP, Krita and Inkscape already cover a lot of ground. GIMP is for general editing, Krita is for art and covers, and Inkscape is for vector work. darktable and RawTherapee are next candidates if I want a more serious photography and RAW workflow. flatpak list --app | grep -Ei "gimp|krita|inkscape" Amon now has Fedora KDE, working NVIDIA support, Wayland, RTX 4070 offload, codecs, a complete writing setup, remote access through SSH and Tailscale, cloud mounting prepared with ExpanDrive, Ghostty as the terminal, IRC in Halloy and a clean KDE visual base. There is still room to tune panels, wallpaper, widgets and small visual details when I am physically in front of the machine. Over SSH, I stopped at the right point. Going further with visuals without looking at the screen would be vanity with a decent chance of breaking something that already works. The best part is that the installation did not turn into a monster. It has strong tools, but not random packages installed just because they looked nice in a Reddit screenshot. Source used only for the notebook specification: MSI, Pulse 16 AI C1V Specification, https://www.msi.com/Laptop/Pulse-16-AI-C1VX/Specification [2] Links: [1] https://www.msi.com/Laptop/Pulse-16-AI-C1VX/Specification [2] https://www.msi.com/Laptop/Pulse-16-AI-C1VX/Specification < the skull