Skip to content

Instantly share code, notes, and snippets.

@themagicalmammal
Last active March 6, 2026 11:15
Show Gist options
  • Select an option

  • Save themagicalmammal/37276c97897d40598e975f5e563252a6 to your computer and use it in GitHub Desktop.

Select an option

Save themagicalmammal/37276c97897d40598e975f5e563252a6 to your computer and use it in GitHub Desktop.
Set of optimizations, I use on my Artix Setup

Artix Linux — Complete System Optimization Guide

Warning: This guide contains system-level modifications. Some steps are irreversible or can render your system unbootable. Read every section fully before executing any command. Know what you are doing, or do not proceed.

All examples are written for runit. Adapt service commands for OpenRC or s6 as needed.


Index

# Section
1 Selecting Your Init
2 rEFInd Bootloader
3 Silent GRUB
4 Disable CPU Mitigations
5 Disable Watchdog
6 Kernel Parameters
7 Remove Artix Boot Logo
8 Arch & Third-Party Repositories
9 Custom Kernel
10 Xorg Config (iGPU)
11 Intel GPU Kernel Parameters
12 NVIDIA Drivers
13 Universe Repository
14 Optimus Manager (Multiple GPUs)
15 Backlight Persistence
16 Profile Sync Daemon (PSD)
17 Colord
18 EarlyOOM
19 Thermald
20 Ananicy-CPP
21 Preload
22 Powersaving
23 Intel Undervolt
24 Fstab Modifications
25 Remove Unnecessary Services
26 Remove Fallback Initramfs Image

1. Selecting Your Init

Each init system has trade-offs. Choose based on your priorities — there is no universally correct option.

Criterion runit OpenRC s6-rc
Boot Speed Mid Mid Fastest
Ease of Use Simplest Moderate Complex
Codebase Simplicity Minimal Moderate Moderate
RAM Usage Lowest* Low Higher
Feature Set Basic Good Most complete

* The runit Busybox variant is significantly more memory-efficient than the standard build.


2. rEFInd Bootloader

rEFInd is a graphical, auto-detecting bootloader that is faster and simpler to configure than GRUB. It supports BIOS mode and adapts to hardware automatically.

Warning: rEFInd has known issues with XFS filesystems. Do not use it if your root partition is XFS.

sudo pacman -S refind
sudo refind-install --usedefault /dev/sda  # Replace with your actual EFI disk

After installation, configure rEFInd at /boot/EFI/refind/refind.conf and add a pacman hook so the bootloader stays updated on kernel upgrades.


3. Silent GRUB

Suppress all GRUB and boot output for a clean, splash-free startup. Add the following to GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub, then regenerate the config.

loglevel=0 console=tty2 udev.log_level=0 vt.global_cursor_default=0

The "Welcome to GRUB!" message can be suppressed with grub-shusher. You can also manually remove echo lines from /boot/grub/grub.cfg:

sudo nano /boot/grub/grub.cfg  # Remove all echo "..." lines

Note: /boot/grub/grub.cfg is overwritten every time you run grub-mkconfig. Re-apply manual edits after GRUB updates.


4. Disable CPU Mitigations

Disabling CPU vulnerability mitigations (Spectre, Meltdown, etc.) can yield measurable performance gains, particularly on older Intel CPUs. This is a deliberate security trade-off.

Danger: Do not disable mitigations on machines that run untrusted code, shared workloads, or are exposed to the network. Read meltdownattack.com and this performance guide before proceeding.

Add to GRUB_CMDLINE_LINUX_DEFAULT, then update GRUB:

mitigations=off

5. Disable Watchdog

The hardware watchdog timer forces a reboot if the system hangs. On a personal machine you can reboot manually — the watchdog is unnecessary overhead.

Add to GRUB_CMDLINE_LINUX_DEFAULT:

nowatchdog

To also prevent the watchdog kernel module from loading entirely:

echo "blacklist iTCO_wdt" | sudo tee /etc/modprobe.d/nowatchdog.conf

6. Kernel Parameters

The following parameters reduce kernel self-checks and tune scheduling for desktop workloads. Most originate from Clear Linux's performance work.

intel_idle.max_cstate=1 cryptomgr.notests initcall_debug intel_iommu=igfx_off no_timer_check noreplace-smp page_alloc.shuffle=1 rcupdate.rcu_expedited=1 tsc=reliable

A complete /etc/default/grub with all optimizations from this guide applied:

# GRUB Configuration
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=0 console=tty2 udev.log_level=0 vt.global_cursor_default=0 mitigations=off nowatchdog msr.allow_writes=on pcie_aspm=force module.sig_unenforce intel_idle.max_cstate=1 cryptomgr.notests initcall_debug intel_iommu=igfx_off no_timer_check noreplace-smp page_alloc.shuffle=1 rcupdate.rcu_expedited=1 tsc=reliable resume=UUID=YOUR-SWAP-UUID-HERE"
GRUB_DISABLE_OS_PROBER=true
GRUB_DISABLE_RECOVERY=true
GRUB_DISABLE_SUBMENU=true

Apply changes:

sudo grub-mkconfig -o /boot/grub/grub.cfg

7. Remove Artix Boot Logo

Even with a silent GRUB, the Artix banner in /etc/issue may still flash at tty login. Remove it:

sudo rm /etc/issue

Note: If you use a display manager (LightDM, SDDM, etc.), the tty banner is irrelevant during normal desktop usage.


8. Arch & Third-Party Repositories

Artix is compatible with Arch Linux repositories. Adding them gives you access to the full Arch package ecosystem.

sudo pacman -S artix-archlinux-support
sudo pacman-key --populate archlinux

Add the following to /etc/pacman.conf after all Artix repos:

[extra]
Include = /etc/pacman.d/mirrorlist-arch

[community]
Include = /etc/pacman.d/mirrorlist-arch

# Uncomment if you need 32-bit support:
#[multilib]
#Include = /etc/pacman.d/mirrorlist-arch

Third-party repos provide pre-built AUR binaries — only add repos you trust. A compromised repo can silently inject malicious code into packages.

Chaotic-AUR

sudo pacman-key --recv-key FBA220DFC880C036 --keyserver keyserver.ubuntu.com
sudo pacman-key --lsign-key FBA220DFC880C036
sudo pacman -U \
  'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' \
  'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'

Add to /etc/pacman.conf:

[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlist

Andontie-AUR

sudo pacman-key --recv-key B545E9B7CD906FE3
sudo pacman-key --lsign-key B545E9B7CD906FE3

Add to /etc/pacman.conf:

[andontie-aur]
Server = https://aur.andontie.net/$arch

9. Custom Kernel

Custom kernels offer lower latency, better scheduling, and hardware-specific tuning. The best kernel depends on your workload — test several before committing.

Kernel Best For
linux-tkg-bmq Desktop responsiveness, task scheduling
linux-zen General desktop, conservative tuning
linux-xanmod Aggressive tuning, gaming
linux-hardened Security-focused (not performance)
# Requires Chaotic-AUR
sudo pacman -S linux-tkg-bmq-generic_v3 linux-tkg-bmq-generic_v3-headers

Warning: bbswitch breaks on TKG kernels. Use bbswitch-dkms instead if you need Optimus Manager.


10. Xorg Config (iGPU)

Screen tearing and graphical artifacts on Intel iGPUs can be fixed with an Xorg device config.

sudo nano /usr/share/X11/xorg.conf.d/20-intel.conf
Section "Device"
  Identifier  "Intel Graphics"
  Driver      "intel"
  Option      "AccelMethod"      "sna"
  Option      "TearFree"         "true"
  Option      "Tiling"           "true"
  Option      "SwapbuffersWait"  "true"
  Option      "DRI"              "3"
EndSection

Danger: If Xorg fails to start after adding this file, comment out options one by one to isolate the conflict. If nothing works, delete the file — your system will revert to the default driver config.


11. Intel GPU Kernel Parameters

The i915 module accepts hardware-specific tunables. Verify each parameter against the Arch Wiki for your GPU generation before applying.

sudo nano /etc/modprobe.d/i915.conf
options i915 enable_guc=2 enable_dc=4 enable_hangcheck=0 error_capture=0 enable_dp_mst=0 fastboot=1

Rebuild the initramfs after editing (replace the kernel name as needed):

sudo mkinitcpio -p linux-tkg-bmq-generic_v3

Danger: Incorrect i915 parameters can cause an unbootable system. If this happens, boot from a live USB, mount your root partition, and remove or correct /etc/modprobe.d/i915.conf, then rebuild the initramfs.


12. NVIDIA Drivers

Install the appropriate driver for your kernel. Use nvidia-dkms for custom or DKMS kernels.

# Standard Artix/Arch kernel
sudo pacman -S nvidia nvidia-utils

# Custom or DKMS kernels
sudo pacman -S nvidia-dkms nvidia-utils

For a performance-patched NVIDIA driver:

yay -S nvidia-dkms-performance

Note: Always match the driver series to your GPU generation. See ArchWiki: NVIDIA for legacy vs. current driver compatibility.


13. Universe Repository

The Artix Universe repo contains init-specific service packages not available in the main repos (e.g. optimus-manager-runit).

Add to /etc/pacman.conf:

[universe]
Server = https://universe.artixlinux.org/$arch

Run sudo pacman -Sy after adding to sync the database.


14. Optimus Manager (Multiple GPUs)

Optimus Manager switches between or disables your discrete GPU when not in use, reducing heat and power draw on NVIDIA Optimus laptops.

sudo pacman -S optimus-manager-git optimus-manager-runit bbswitch-dkms lightdm-optimus-runit

Configure the switching mechanism in /etc/optimus-manager/optimus-manager.conf:

[optimus]
switching=bbswitch
pci_power_control=no
pci_remove=no
pci_reset=no

After rebooting, verify the discrete GPU is powered off:

cat /proc/acpi/bbswitch  # Expected output: 0000:01:00.0 OFF

Warning: If bbswitch reports ON after boot, another service (e.g. powertop's auto-tune) may be conflicting. Investigate with journalctl -b and dmesg | grep bbswitch. If bbswitch is incompatible with your hardware, try acpi_call as the switching method instead.


15. Backlight Persistence

Brightness is not saved across reboots by default. Install and enable the backlight service to persist brightness settings.

sudo ln -sfv /etc/runit/sv/backlight /run/runit/service/

Note: The exact package name varies. Search for backlight in the Universe or AUR for your init variant.


16. Profile Sync Daemon (PSD)

PSD symlinks browser profiles (Firefox, Chromium, Librewolf, etc.) to a tmpfs RAM filesystem, reducing disk I/O and speeding up browser operations. Especially beneficial on HDDs.

yay -S profile-sync-daemon
git clone https://github.com/madand/runit-services
cd runit-services
sudo mv psd /etc/runit/sv/
sudo ln -sfv /etc/runit/sv/psd /run/runit/service/
sudo sv start psd

Warning: rsync must also be running. PSD relies on it to sync the in-RAM profile back to disk on shutdown. Without rsync, browser data written since the last boot may be lost on power failure.


17. Colord

Colord is a daemon for managing ICC color profiles on input and output devices. Required by some applications (GIMP, Darktable, color-managed DEs) for accurate color reproduction.

sudo pacman -S colord colord-runit
sudo ln -sfv /etc/runit/sv/colord /run/runit/service/

18. EarlyOOM

EarlyOOM monitors available memory and swap, and kills the most memory-hungry process before the system fully runs out of memory — preventing the system from freezing for minutes under the kernel's default OOM killer.

sudo pacman -S earlyoom earlyoom-runit
sudo ln -sfv /etc/runit/sv/earlyoom /run/runit/service/
sudo nano /etc/default/earlyoom
# Kill when free memory drops below 4% (notify at 8%), swap below 1% (notify at 1%)
# Avoid killing: init, Xorg, SSH
EARLYOOM_ARGS="-m 96,92 -s 99,99 -r 5 -n --avoid '(^|/)(runit|Xorg|sshd)$'"

Note: Replace runit in the avoid pattern with your init system (openrc, s6, etc.).


19. Thermald

Thermald monitors CPU temperature and applies cooling strategies before hardware thermal throttling kicks in. Most useful on thin laptops or systems with inadequate cooling.

Tip: Verify you actually need this first. Run watch -n1 sensors under load — if temperatures are acceptable without intervention, skip thermald.

sudo pacman -S thermald thermald-runit
sudo ln -sfv /etc/runit/sv/thermald /run/runit/service/

20. Ananicy-CPP

Ananicy-CPP automatically adjusts CPU and I/O priorities for known applications using a crowdsourced ruleset, reducing stuttering when multiple demanding processes compete for resources. Written in C++ (vs. the original Bash), it has negligible CPU and RAM overhead.

sudo pacman -S ananicy-cpp ananicy-cpp-runit
sudo ln -sfv /etc/runit/sv/ananicy-cpp /run/runit/service/

21. Preload

Preload is an adaptive readahead daemon that records which applications you use most frequently and preloads them into RAM, reducing cold-start times.

Warning: Preload is only beneficial on HDDs. On SSDs (SATA or NVMe), load times are already fast enough that preload offers minimal gain and wastes RAM.

yay -S preload

Since a dedicated runit service may not exist, enable it via /etc/rc.local:

preload

22. Powersaving

Use one of the two tools below — not both — to avoid conflicts.

Option A — TLP (Recommended)

TLP is the most comprehensive battery management tool for Linux laptops. It applies sensible defaults automatically and is highly configurable.

sudo pacman -S tlp tlp-runit
sudo ln -sfv /etc/runit/sv/tlp /run/runit/service/
sudo nano /etc/tlp.conf  # Defaults are already excellent; adjust as needed

Option B — PowerTop (Advanced Manual Tuning)

PowerTop identifies power-hungry devices and can auto-tune them. If using TLP, use PowerTop only to identify gaps TLP doesn't cover — do not run --auto-tune alongside TLP.

sudo pacman -S powertop
# Add to /etc/rc.local if running standalone (without TLP):
powertop --auto-tune

PowerTop's auto-tune aggressively suspends USB devices. If your keyboard or mouse disconnects or stutters, add the following to /etc/rc.local to increase the USB autosuspend delay:

for dev in /sys/bus/usb/devices/*/power/autosuspend_delay_ms; do
  echo 60000 > "$dev"
done

23. Intel Undervolt

Undervolting reduces the voltage supplied to the CPU and iGPU, lowering heat and power draw without sacrificing clock speed. Too aggressive an undervolt causes instability or crashes.

sudo pacman -S intel-undervolt intel-undervolt-runit
sudo ln -sfv /etc/runit/sv/intel-undervolt /run/runit/service/
sudo nano /etc/intel-undervolt.conf
sudo intel-undervolt apply  # Test immediately; stress-test before relying on it

Danger: Start conservatively — begin with -50mV on CPU and GPU. Stress-test for at least 30 minutes (stress-ng or Prime95) before increasing. If the system becomes unbootable, boot a live USB, mount the root partition, and remove execute permissions from the service run script:

chmod -x /etc/runit/sv/intel-undervolt/run

24. Fstab Modifications

Disable Filesystem Checks (fsck)

Linux runs periodic filesystem integrity checks on boot. On personal machines with reliable hardware and clean shutdowns, these are rarely necessary. Set the last two fields on each fstab line to 0 to disable them.

# /etc/fstab — fsck disabled
UUID=f634ad84-...  swap  swap  sw        0 0
UUID=5c24bcde-...  /     xfs   defaults  0 0
UUID=C61D-2685     /boot vfat  umask=0077 0 0
tmpfs              /tmp  tmpfs defaults,nosuid 0 0

Use noatime Instead of defaults

By default, Linux updates a file's last-accessed timestamp (atime) on every read — causing a write for every read. Replacing defaults with noatime eliminates this overhead.

# /etc/fstab — noatime
UUID=45bfdbc4-...  swap  swap  sw               0 0
UUID=5A68-E64A     /boot vfat  noatime          0 0
UUID=57f97d04-...  /     xfs   noatime          0 0
tmpfs              /tmp  tmpfs noatime,mode=1777 0 0

Tip: For full POSIX compliance with most of the benefit, use relatime instead. It only updates atime when the file has been modified more recently than its last access — the kernel default on modern Linux.


25. Remove Unnecessary Services

A default Artix install starts many services you likely do not need. Removing them reduces RAM usage and shortens boot time.

Remove extra getty terminals (keep tty1 and tty2 as a minimum fallback):

sudo rm /run/runit/service/agetty-tty{3,4,5,6}

Remove unused services:

sudo rm /run/runit/service/{cupsd,cronie,syslog-ng}

Uninstall associated packages:

sudo pacman -Rscn \
  memtest86+ os-prober \
  artix-gtk-presets artix-qt-presets artix-grub-theme artix-branding-base \
  syslog-ng-runit rsync-runit rpcbind-runit openssh-runit ntp-runit \
  nfs-utils-runit mdadm-runit lvm2-runit haveged-runit dhcpcd-runit \
  device-mapper-runit cups-runit cryptsetup-runit cronie-runit alsa-utils-runit

Danger: Do not blindly copy-paste the removal command. Review each package carefully. Keep openssh-runit if you use SSH, alsa-utils-runit if you use ALSA directly, dhcpcd-runit if you use DHCP without NetworkManager, etc.


26. Remove Fallback Initramfs Image

Artix generates two initramfs images per kernel: a default and a fallback. The fallback includes all kernel modules and is used if the default image fails to boot. Removing it saves space on small EFI partitions.

Danger: The fallback image is your safety net. If a kernel update or misconfiguration breaks the default image, fallback lets you still boot. Only remove it if you have an alternative recovery method (e.g. Arch live USB) and understand the implications.

sudo rm /boot/*fallback*

Prevent future kernel upgrades from regenerating it by editing the kernel preset:

sudo nano /etc/mkinitcpio.d/linux-tkg-bmq-generic_v3.preset
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux-tkg-bmq-generic_v3"

PRESETS=('default')  # Removed 'fallback'

default_image="/boot/initramfs-linux-tkg-bmq-generic_v3.img"

Rebuild to apply:

sudo mkinitcpio -p linux-tkg-bmq-generic_v3

Last revised: OCt 2025. Commands are verified against Artix with runit. Always review upstream documentation before applying system-level changes.

@themagicalmammal
Copy link
Author

Thanks to Qontinuum for his suggestions.

@JusticeBoi
Copy link

I have been observing the screen tearing issue with nvidia/intel igpu setup. Lets see if this helps =]. Thanks!

@themagicalmammal
Copy link
Author

I have been observing the screen tearing issue with nvidia/intel igpu setup. Lets see if this helps =]. Thanks!

Hope it works!

@themagicalmammal
Copy link
Author

Thanks pheonix9001 for his suggestions.

@ChausseBenjamin
Copy link

Any reason why ananicy was used instead of ananicy-cpp-runit? Seems like a free performance boost...

@themagicalmammal
Copy link
Author

Yeah, I am also using that, I just forgot to update it.

@GeorgeZack
Copy link

earlyoom-runit does not seem to support the EARLYOOM_ARGS set in /etc/default/earlyoom. Do you have any idea why?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment