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.
1sudo hostnamectl set-hostname amon
2hostnamectl
3sudo 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.
1mokutil --sb-state
2sudo dnf install -y akmod-nvidia xorg-x11-drv-nvidia-cuda nvidia-settings kernel-devel-matched
3sudo akmods --force
4sudo dracut --force
5sudo reboot
6nvidia-smi
7lsmod | grep nvidia
8__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.
1sudo dnf swap -y ffmpeg-free ffmpeg --allowerasing
2sudo dnf group install -y multimedia
3sudo dnf install -y libva libva-utils intel-media-driver libva-nvidia-driver
4vainfo
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.
1sudo tee -a /etc/dnf/dnf.conf >/dev/null <<'EOF'
2# Amon tuning
3max_parallel_downloads=10
4fastestmirror=True
5defaultyes=True
6keepcache=False
7EOF
8
9sudo dnf clean all
10sudo dnf makecache
11sudo 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.
1sudo systemctl enable --now tuned
2sudo tuned-adm profile throughput-performance
3tuned-adm active
4sudo 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.
1mkdir -p ~/.config/ghostty
2
3cat > ~/.config/ghostty/config <<'EOF'
4font-family = JetBrains Mono
5font-size = 12
6theme = light:Catppuccin Latte,dark:Catppuccin Mocha
7window-padding-x = 8
8window-padding-y = 8
9copy-on-select = clipboard
10confirm-close-surface = false
11EOF
12
13ghostty +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.
1flatpak 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
2
3sudo 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.
1mkdir -p ~/.var/app/org.squidowl.halloy/config
2nano ~/.var/app/org.squidowl.halloy/config/config.toml
3chmod 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.
1sudo dnf install -y openssh-server
2sudo systemctl enable --now sshd
3systemctl status sshd --no-pager
4tailscale ip -4
5tailscale 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.
1mkdir -p ~/Downloads
2cd ~/Downloads
3curl -L -A "Mozilla/5.0" -o ExpanDrive.rpm "https://www.expandrive.com/api/download/expandrive?platform=linux&ext=rpm"
4file ExpanDrive.rpm
5sudo dnf install -y ./ExpanDrive.rpm
6rpm -qa | grep -i expandrive
7command -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.
1sudo dnf install -y papirus-icon-theme google-noto-sans-fonts google-noto-serif-fonts jetbrains-mono-fonts kvantum qt6ct qt5ct breeze-gtk
2
3kwriteconfig6 --file kdeglobals --group General --key ColorScheme BreezeDark
4kwriteconfig6 --file kdeglobals --group KDE --key LookAndFeelPackage org.kde.breezedark.desktop
5kwriteconfig6 --file kdeglobals --group KDE --key widgetStyle Breeze
6kwriteconfig6 --file kdeglobals --group Icons --key Theme Papirus-Dark
7kwriteconfig6 --file kdeglobals --group General --key fixed "JetBrains Mono,10,-1,5,50,0,0,0,0,0"
8kwriteconfig6 --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.
1kwriteconfig6 --file powerdevilrc --group AC --group DPMSControl --key idleTime 0
2kwriteconfig6 --file powerdevilrc --group AC --group DimDisplay --key idleTime 0
3kwriteconfig6 --file powerdevilrc --group AC --group SuspendSession --key idleTime 0
4kwriteconfig6 --file powerdevilrc --group AC --group HandleButtonEvents --key lidAction 1
5systemctl --user restart plasma-powerdevil.service 2>/dev/null || systemctl --user restart plasma-powerdevil
6
7sudo tee /etc/systemd/logind.conf.d/99-amon-power.conf >/dev/null <<'EOF'
8[Login]
9HandleLidSwitchExternalPower=suspend
10HandleLidSwitchDocked=suspend
11IdleAction=ignore
12EOF
13
14sudo 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.
1sudo dnf install -y kleopatra gnupg2 pinentry-qt kgpg
2
3sudo 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
4
5claude doctor
6claude --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.
1flatpak 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