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
Member discussion