7 min read

Amon: how I made Fedora feel right on the MSI Pulse 16 AI

A practical write-up of how I configured Fedora KDE on an MSI Pulse 16 AI: NVIDIA, Ghostty, writing tools, cloud access, SSH, Tailscale, power settings and a clean KDE setup.
Amon: how I made Fedora feel right on the MSI Pulse 16 AI

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

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

Reply

Got a thought? Reply by email, or publish a response on your own site and it'll show up above via Webmention.

Reply by email