Garuda Linux is an Arch-based rolling-release Linux distribution focused on gaming, performance, and aesthetics.
First released in March 2020 by the Garuda Linux team — a community project based in India.
Built on top of Arch Linux — uses the same pacman package manager and AUR ecosystem.
Ships with the linux-zen kernel by default — optimized for desktop responsiveness and gaming.
Uses Btrfs with automatic Snapper snapshots — every pacman transaction creates a snapshot.
Who
Founded by dr460nf1r3 (Nico), TNE, Librewish (Shrinivas Kumbhar), and other community contributors.
Maintained by the Garuda Linux Team — fully community-driven, no corporate backing.
Based in India — one of the few major distros with Indian roots.
Why
Arch Linux is powerful but requires manual setup for gaming and performance tuning.
Goal: deliver a ready-to-game Arch experience out of the box — no manual tweaking needed.
Combines Arch’s cutting-edge packages with automated performance optimizations, beautiful theming, and safety nets (Btrfs snapshots).
Introduction
What is Garuda Linux?
A rolling-release, Arch-based Linux distro designed for gaming, performance, and daily desktop use.
Ships with the linux-zen kernel, Btrfs + auto-snapshots, ZRAM, and gaming tools pre-configured.
Default desktop: Dr460nized KDE Plasma — a heavily customized, visually stunning KDE setup.
Uses pacman + Chaotic-AUR — access to all Arch packages plus thousands of pre-built AUR packages.
Garuda Editions
Garuda Dr460nized → KDE Plasma (default, most popular, gaming-focused)
Garuda Dr460nized Gaming → Dr460nized + full gaming suite pre-installed
Garuda GNOME → GNOME desktop variant
Garuda Xfce → lightweight Xfce desktop
Garuda Cinnamon → Cinnamon desktop (familiar for Mint users)
Garuda MATE → MATE desktop
Garuda LXQt-kwin → ultra-lightweight LXQt
Garuda Wayfire → Wayland compositor (experimental/advanced)
Garuda Sway → tiling Wayland WM
Garuda i3 → tiling X11 WM
Garuda vs Other Gaming Distros
Feature
Garuda Linux
Pop!_OS
Nobara
SteamOS
Base
Arch (rolling)
Ubuntu LTS
Fedora (rolling)
Arch (immutable)
Kernel
linux-zen
linux-generic
linux-fsync
linux-neptune
Gaming tools
Pre-installed
Partial
Pre-installed
Steam-focused
Snapshots
Btrfs auto
No
No
No
AUR access
Yes (Chaotic-AUR)
No
No
Limited
Target
Gaming + general
Gaming + creative
Gaming + general
Steam Deck only
Advantages
Ready-to-game out of the box, linux-zen kernel for low latency, Btrfs auto-snapshots (safe to experiment), Chaotic-AUR (pre-built AUR packages — no compile time), ZRAM enabled by default, beautiful Dr460nized KDE theme, full Arch ecosystem access, rolling release (always latest), Garuda Assistant GUI for system management.
Disadvantages
Rolling release can occasionally break, heavier than vanilla Arch (more pre-installed software), Btrfs snapshots consume disk space over time, not ideal for servers, requires more RAM than lightweight distros (~4GB minimum for Dr460nized), less documentation than Ubuntu/Fedora.
Use Cases
PC gaming (Steam, Lutris, Heroic), daily desktop use, content creation, development workstation, learning Arch Linux with safety nets, performance-critical workloads.
# Download ISO from: https://garudalinux.org/downloads# Using Ventoy (recommended — multi-boot)# Just copy the ISO to the Ventoy USB drive# Using dd (Linux)sudo dd if=Garuda-dr460nized-linux-zen-*.iso of=/dev/sdX bs=4M status=progresssync# Using Rufus (Windows) — select DD mode, not ISO mode
Installation (Calamares Installer)
1. Boot from USB → "Boot with open source drivers" (AMD/Intel)
or "Boot with proprietary drivers" (NVIDIA)
2. Try or Install Garuda Linux
3. Language & Keyboard
4. Partitioning:
- Erase disk (recommended — sets up Btrfs automatically)
- Manual: /boot/efi (512MB FAT32), / (rest, Btrfs)
- Swap: use ZRAM instead (Garuda default — no swap partition needed)
5. User creation
6. Install → ~10-15 min
7. Reboot → remove USB
First Boot Setup
# Garuda Welcome app opens automatically# Run system update first (critical on fresh install)sudo pacman -Syu# Or use Garuda Assistant → System Maintenance → Update System# Install Chaotic-AUR (usually pre-configured, verify):sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.comsudo pacman-key --lsign-key 3056513887B78AEBsudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst'sudo pacman -U '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# Enable multilib (for 32-bit gaming libraries)# Uncomment in /etc/pacman.conf:# [multilib]# Include = /etc/pacman.d/mirrorlistsudo pacman -Syu
NVIDIA Driver Setup
# Garuda includes nvidia-installer-dkms for easy NVIDIA setupsudo nvidia-installer-dkms# Reboot after installation# Or manually:sudo pacman -S nvidia-dkms nvidia-utils lib32-nvidia-utils nvidia-settings# Check NVIDIA driver is loadednvidia-smilsmod | grep nvidia# For older cards (Kepler/Maxwell):sudo pacman -S nvidia-470xx-dkms # from AUR/Chaotic-AUR
Package Management
Package Resolution Pipeline
graph TD
UserQuery[User runs pacman/yay Command] --> CacheCheck{Is package in local package database cache?}
CacheCheck -->|Yes| LocalInstall[Install instantly from local cache /var/cache/pacman/pkg]
CacheCheck -->|No| RepoSearch[Search configured repositories in /etc/pacman.conf]
RepoSearch --> CoreExtra[1. Search official core & extra repositories]
RepoSearch --> ChaoticAUR[2. Search pre-built Chaotic-AUR mirrorlist]
RepoSearch --> UserSelect{Is package found in binary repositories?}
UserSelect -->|Yes| DownloadBinary[Download pre-compiled ZSTD package]
UserSelect -->|No| AURSearch[Search Arch User Repository AUR via yay/paru]
AURSearch --> BuildAUR{Found in AUR?}
BuildAUR -->|Yes| CloneBuild[Clone PKGBUILD, check dependencies, and build from source code]
BuildAUR -->|No| Error([Package not found in any repository])
DownloadBinary --> InstallSync[Install package & register in local pacman DB]
CloneBuild --> InstallSync
pacman (Core Package Manager)
# Update systemsudo pacman -Syu # sync + upgrade all packagessudo pacman -Syuu # force downgrade if needed (dangerous, use with care)# Install & removesudo pacman -S package # installsudo pacman -S package1 package2 # install multiple packagessudo pacman -R package # remove (leaves dependencies behind)sudo pacman -Rs package # remove package + its unneeded dependenciessudo pacman -Rns package # remove package + unneeded deps + configuration files# Search & querypacman -Ss keyword # search remote database for keywordpacman -Si package # display remote package detailed informationpacman -Qi package # display locally installed package infopacman -Ql package # list all files owned by packagepacman -Qo /usr/bin/python # query package that owns a specific file pathpacman -Qs keyword # search locally installed packages for keywordpacman -Q # list all installed packagespacman -Qe # list explicitly installed packagespacman -Qdt # list orphaned packages (installed as dependency but no longer needed)# Cache management (Crucial for Btrfs space)sudo pacman -Sc # remove uninstalled package archives from cachesudo pacman -Scc # remove all cached package archivessudo paccache -r # keep only the last 3 versions of active packagessudo paccache -rk 1 # keep only the last 1 version (extreme cleanup)
Advanced Pacman Configuration & Troubleshooting
Optimize Mirror Speeds:
# Install rate-mirrors (much faster and more accurate than reflector)sudo pacman -S rate-mirrors# Test and update Arch mirrorsrate-mirrors arch | sudo tee /etc/pacman.d/mirrorlist# Test and update Chaotic-AUR mirrorsrate-mirrors chaotic | sudo tee /etc/pacman.d/chaotic-mirrorlist
Creating Custom Pacman Hooks:
Custom hooks let you run scripts automatically before or after package installations. Created in /etc/pacman.d/hooks/.
Example Hook: Auto-clean old package caches after every upgrade transaction (/etc/pacman.d/hooks/clean_cache.hook):
# Chaotic-AUR is pre-configured on Garuda# It provides pre-compiled AUR packages — no need to compile from source# Search Chaotic-AUR packagespacman -Ss package # searches all repos including chaotic-aur# Popular packages available in Chaotic-AUR:sudo pacman -S visual-studio-code-binsudo pacman -S google-chromesudo pacman -S spotifysudo pacman -S discordsudo pacman -S heroic-games-launchersudo pacman -S proton-ge-custom-binsudo pacman -S mangohudsudo pacman -S gamemodesudo pacman -S bottles
yay / paru (AUR Helpers)
# yay is pre-installed on Garudayay -Syu # update system + AUR packagesyay -S package # install from AURyay -Ss keyword # search AURyay -R package # removeyay -Yc # remove unneeded deps# paru (Rust-based, more features)sudo pacman -S paru # install paru (from Chaotic-AUR)paru -Syu # update allparu -S package # install from AURparu -Ss keyword # searchparu -c # clean orphans
Flatpak
# Flatpak is pre-installed on Garudaflatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepoflatpak install flathub org.gimp.GIMPflatpak update # update all Flatpaksflatpak listflatpak uninstall org.gimp.GIMPflatpak run org.gimp.GIMP
Gaming Setup & Tools
Steam
# Install Steam (from Chaotic-AUR or multilib)sudo pacman -S steam# Enable Steam Play (Proton) for Windows games# Steam → Settings → Steam Play → Enable Steam Play for all titles# Select Proton version (Proton Experimental or Proton-GE recommended)# Install Proton-GE (better compatibility than official Proton)sudo pacman -S proton-ge-custom-bin # from Chaotic-AUR# Or use ProtonUp-Qt to manage Proton versions:sudo pacman -S protonup-qt# Steam native runtime librariessudo pacman -S lib32-mesa lib32-vulkan-icd-loader# For NVIDIA:sudo pacman -S lib32-nvidia-utils# For AMD:sudo pacman -S lib32-vulkan-radeon lib32-amdvlk
sudo pacman -S heroic-games-launcher # from Chaotic-AUR# Heroic supports:# - Epic Games Store (free games, AAA titles)# - GOG Galaxy (DRM-free games)# - Amazon Prime Gaming# Uses Wine/Proton under the hood for Windows games
GameMode (CPU/GPU Performance Boost)
# GameMode is pre-installed on Garuda Gaming editionsudo pacman -S gamemode lib32-gamemode# Enable GameMode servicesystemctl --user enable --now gamemoded# Run a game with GameMode:gamemoderun ./gamegamemoderun steam steam://rungameid/APPID# In Steam: add launch option:# gamemoderun %command%# What GameMode does:# - Sets CPU governor to "performance"# - Applies GPU performance tweaks (NVIDIA/AMD)# - Disables CPU mitigations temporarily# - Renice game process for priority# - Inhibits screensaver/sleep# Check GameMode status:gamemoded -s
MangoHud (In-Game Performance Overlay)
sudo pacman -S mangohud lib32-mangohud# Run with MangoHud:mangohud ./gamemangohud steam steam://rungameid/APPID# In Steam launch options:# mangohud %command%# MangoHud shows: FPS, frametime, CPU/GPU usage, temps, VRAM, RAM# Config file: ~/.config/MangoHud/MangoHud.conf# Example config:# fps# cpu_stats# gpu_stats# ram# vram# cpu_temp# gpu_temp# frametime# position=top-left# font_size=24# GOverlay — GUI for MangoHud config:sudo pacman -S goverlay
1. Win32 API Mapping: Wine translates Windows API calls (like memory allocation, threading, and window creation) directly into POSIX standards and Linux system calls in real-time, eliminating emulator overhead.
2. DirectX Translation:
DXVK intercepts Direct3D 9, 10, and 11 calls and translates them to Vulkan command buffers. This bypasses the old, slower OpenGL translation path.
VKD3D-Proton maps Direct3D 12 calls to Vulkan. Because D3D12 is structurally similar to Vulkan, this provides low-overhead, high-performance execution.
3. Vulkan Execution: High-efficiency Vulkan graphics drivers execute the translated rendering pipeline directly on the GPU hardware.
Core Installation & Configuration
# Wine — run Windows .exe files (Staging has latest experimental fixes)sudo pacman -S wine-staging winetricks# Create a Wine prefix (isolated Windows environment)WINEPREFIX=~/.wine32 WINEARCH=win32 wine winebootWINEPREFIX=~/.wine64 wine wineboot# Install DirectX, Visual C++ runtimes via winetrickswinetricks d3dx9 d3dx11 vcrun2019 dotnet48# DXVK — DirectX 9/10/11 → Vulkan (much better performance)sudo pacman -S dxvk-binWINEPREFIX=~/.wine64 setup_dxvk install# VKD3D-Proton — DirectX 12 → Vulkansudo pacman -S vkd3d-proton-bin # from Chaotic-AUR# Bottles — GUI Wine manager (easier than raw Wine)sudo pacman -S bottles
Advanced Custom Wine Prefix Script
Setup a wrapper script to run games under an optimized, isolated Wine prefix with performance environment variables (run-wine-game.sh):
#!/usr/bin/env bash# Custom Wine gaming runtime wrapper script# Config directoriesexport WINEPREFIX="${HOME}/.local/share/wineprefixes/gaming_prefix"export WINEARCH="win64"export WINEDEBUG="-all" # Disable debugging for minor performance boost# Performance optimizationsexport DXVK_HUD="fps,compiler" # Display DXVK FPS and pipeline compile indicatorsexport DXVK_ASYNC=1 # Enable asynchronous pipeline compilation (minimizes stutter)export PROTON_NO_ESYNC=0 # Ensure Eventfd synchronization is allowedexport PROTON_NO_FSYNC=0 # Ensure Futex synchronization is allowed (Zen kernel supports fsync)# CPU & GPU Driver optimizationsexport __GL_THREADED_OPTIMIZATIONS=1 # For NVIDIA cardsexport mesa_glthread=true # For AMD/Intel Mesa drivers# Create prefix directory if missingif [ ! -d "$WINEPREFIX" ]; then echo "[*] Initializing gaming Wine prefix at: $WINEPREFIX" mkdir -p "$(dirname "$WINEPREFIX")" wine wineboot --init # Setup DXVK within the new prefix setup_dxvk installfi# Run the targeted game executableif [ -z "$1" ]; then echo "Usage: $0 path/to/game.exe" exit 1fiecho "[*] Executing game under gamemoderun + wine..."gamemoderun wine "$@"
Custom DXVK Configuration File
Optimize game behavior by configuring variables in dxvk.conf inside the WINEPREFIX or custom path exported via export DXVK_CONFIG_FILE=/path/to/dxvk.conf:
# RetroArch (multi-system emulator frontend)sudo pacman -S retroarch retroarch-assets-xmb# Individual emulatorssudo pacman -S dolphin-emu # GameCube / Wiisudo pacman -S rpcs3 # PlayStation 3 (from Chaotic-AUR)sudo pacman -S yuzu # Nintendo Switch (from Chaotic-AUR)sudo pacman -S pcsx2 # PlayStation 2sudo pacman -S ppsspp # PSPsudo pacman -S desmume # Nintendo DSsudo pacman -S mgba # Game Boy Advancesudo pacman -S cemu # Wii U (from Chaotic-AUR)# Emulation Station DE (frontend for all emulators)sudo pacman -S emulationstation-de
Performance Tuning
linux-zen Kernel
Resource Management & Scheduling Flow
graph TD
SystemLoad["User Session / Active Gaming"] -->|Triggers performance profile| GameModeDaemon["GameMode Daemon (gamemoded)"]
subgraph Resource Allocation Stack
GameModeDaemon -->|Configures governor| CPUPower["cpupower (Sets Governor to 'performance')"]
GameModeDaemon -->|Applies nice/ioprio| ZenScheduler["Zen Scheduler (BORE / PDS - Prioritizes game execution thread)"]
GameModeDaemon -->|Disables temporarily| KernelMitigations["CPU Security Mitigations (via sysctl or reboot)"]
GameModeDaemon -->|Optimizes virtual memory| VMManagement["VM / Swap Optimization (ZRAM, Swappiness=10)"]
end
CPUPower --> CPUCores["High Frequency CPU Cores"]
ZenScheduler --> ExecutionPriority["Low Latency Thread Execution"]
KernelMitigations --> PerformanceGain["Reduced Kernel-Space CPU Overhead"]
VMManagement --> RAMAlloc["Compressed Swap in RAM (No Disk Bottlenecks)"]
Resource Allocation Architecture:
1. CPU Scheduling: The linux-zen kernel utilizes the BORE (Burst-Oriented Response Enhancer) scheduler (or similar low-latency schedulers like PDS or BMQ in custom kernels). It prioritizes interactive tasks (games, audio, user interface) over background services, ensuring zero frame drops even under high background load.
2. Dynamic Power Management: The kernel works with cpupower and gamemoded to ramp up CPU core frequencies instantly when a process requests performance execution, overriding standard conservative scaling limits.
3. Compressed Swap (ZRAM): Swap requests are handled directly in RAM using compressed ZSTD algorithms, preventing any swap-to-disk disk-access latency.
Kernel Selection & Installation
# Garuda ships linux-zen by default — optimized for desktop/gaminguname -r # check current kernel# Should show: x.x.x-zen1-x-zen# Available kernels (install via pacman):# linux-zen → low-latency, desktop/gaming (Garuda default)# linux-tkg-pds → TKG patchset, best for gaming (from Chaotic-AUR)# linux-tkg-bmq → BMQ scheduler variant# linux-cachyos → CachyOS optimized kernel (from Chaotic-AUR)# linux-xanmod → XanMod kernel with extra patches# linux → vanilla Arch kernel# linux-lts → long-term support kernel (most stable)# Install alternative kernel:sudo pacman -S linux-tkg-pds linux-tkg-pds-headers# Select at GRUB boot menu# Check kernel scheduler details:cat /sys/kernel/debug/sched/features
Custom Gaming Sysctl Tuning
Configure custom system control parameters in /etc/sysctl.d/99-gaming.conf (linked here: 99-gaming.conf) to optimize virtual memory, network backlogs, and hardware watchdogs:
# /etc/sysctl.d/99-gaming.conf# Virtual Memory Managementvm.swappiness = 10 # Minimize swapping to disk (use ZRAM)vm.vfs_cache_pressure = 50 # Keep directory and inode caches longervm.dirty_bytes = 268435456 # Prevent massive disk write operations from freezing UI (256MB)vm.dirty_background_bytes = 67108864 # Flush dirty data earlier (64MB)# Process Schedulingkernel.sched_autogroup_enabled = 0 # Disable autogroup to allow direct thread renicingkernel.nmi_watchdog = 0 # Disable hardware watchdog (frees up CPU execution cycles)# Networking Buffer Limitsnet.core.netdev_max_backlog = 16384 # Allow larger packet backlog (prevents network drops)net.ipv4.tcp_fastopen = 3 # Enable TCP Fast Open for faster server handshake# File Descriptorsfs.file-max = 2097152 # Increase file descriptor limit for heavy modded games
Apply changes immediately:
sudo sysctl -p /etc/sysctl.d/99-gaming.conf
Laptop Power Limits & Energy Profiles
Tune thermal and power management on laptops running Garuda to prevent thermal throttling while gaming:
# 1. Install power-profiles-daemon (default for KDE/GNOME interfaces)sudo pacman -S power-profiles-daemonsudo systemctl enable --now power-profiles-daemon# Set execution profile to performancepowerprofilesctl set performancepowerprofilesctl list# 2. Advanced TLP battery management (alternative to power-profiles-daemon)sudo pacman -S tlp tlp-rdwsudo systemctl enable --now tlp# Configure /etc/tlp.conf settings when plugged in:# CPU_SCALING_GOVERNOR_ON_AC="performance"# CPU_ENERGY_PERF_POLICY_ON_AC="performance"# INTEL_GPU_MIN_FREQ_ON_AC=350# INTEL_GPU_MAX_FREQ_ON_AC=1100
ZRAM (Compressed RAM Swap)
# ZRAM is enabled by default on Garuda — no swap partition needed# ZRAM creates a compressed block device in RAM for swap# Much faster than disk swap, reduces I/O# Check ZRAM status:zramctlswapon --showfree -h# ZRAM config: /etc/systemd/zram-generator.conf# [zram0]# zram-size = ram / 2 # use half of RAM# compression-algorithm = zstd# Garuda default: zram-size = min(ram, 8192)# Compression: lz4 (fast) or zstd (better ratio)
CPU Governor & Power Management
# Check current CPU governorcat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor# Available governors:# performance → max frequency always (best for gaming)# schedutil → kernel scheduler-based (Garuda default)# powersave → minimum frequency (battery saving)# ondemand → scales with load# Set performance governor (temporary):echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor# Permanent via cpupower:sudo pacman -S cpupowersudo cpupower frequency-set -g performancesudo systemctl enable --now cpupower# Edit /etc/default/cpupower: governor='performance'# Garuda uses auto-cpufreq for laptop battery management:sudo pacman -S auto-cpufreqsudo systemctl enable --now auto-cpufreq
# Hourly, daily, weekly, monthly, and yearly limitsTIMELINE_LIMIT_HOURLY="5"TIMELINE_LIMIT_DAILY="7"TIMELINE_LIMIT_WEEKLY="0"TIMELINE_LIMIT_MONTHLY="0"TIMELINE_LIMIT_YEARLY="0"
Btrfs Filesystem Maintenance
Check Space Allocation:
# Show detailed space allocation (Metadata, Data, System chunks)sudo btrfs filesystem df /# Show human-readable device space usagesudo btrfs filesystem usage /
Filesystem Defragmentation:
# Recursively defragment files and directories on Btrfs filesystemsudo btrfs filesystem defragment -r -v -czstd /
Filesystem Scrub (Data Corruption Check):
# Start scrubbing in the background to verify checksums and repair corrupted blockssudo btrfs scrub start /# Check scrubbing statussudo btrfs scrub status /
Filesystem Balance (Chunk Re-allocation):
# Rebalance chunks to optimize disk space allocation (reclaims empty chunks)# Only balance chunks that are less than 50% utilized to prevent heavy SSD loadsudo btrfs balance start -dusage=50 -musage=50 /# Check balancing statussudo btrfs balance status /
1. UEFI POST: System hardware verification. UEFI reads NVRAM to locate the bootloader binary (usually /boot/EFI/BOOT/BOOTX64.EFI or /boot/EFI/Garuda/grubx64.efi).
2. GRUB 2: The GRUB configuration file /boot/grub/grub.cfg is executed. Garuda uses grub-btrfs to parse the snapper snapshot subvolumes and generate bootable read-only kernel entries dynamically.
3. Zen Kernel & initramfs: The system loads vmlinuz-linux-zen and the RAM disk image initramfs-linux-zen.img. The kernel decompresses, runs hooks defined in /etc/mkinitcpio.conf (e.g., keyboard, udev, btrfs), and boots.
4. systemd & Btrfs Mounts: Control shifts to systemd (PID 1). It mounts Btrfs subvolumes from /etc/fstab using specific mount options:
compress=zstd:3 (enables transparent ZSTD compression to save disk space and SSD wear).
noatime (prevents updating file access times to eliminate constant disk writes).
discard=async (asynchronously releases unused blocks to keep the SSD fast).
5. SDDM & Desktop: The display manager SDDM launches the graphical environment, executing the fish shell environment wrappers and starting KDE Plasma Dr460nized.
Linux File System Hierarchy (FHS)
/ Root filesystem (Btrfs @ subvolume)
├── /boot Kernel, initramfs, GRUB2
├── /dev Device files
├── /etc System configuration
├── /home User home dirs (Btrfs @home subvolume)
├── /opt Optional software (Steam, games)
├── /proc Virtual: process + kernel info
├── /root Root user home
├── /run Runtime data
├── /srv Service data
├── /sys Virtual: hardware info
├── /tmp Temporary files (tmpfs — RAM)
├── /usr Programs, libraries, docs
│ ├── /usr/bin User commands
│ ├── /usr/lib Libraries
│ └── /usr/share Shared data
└── /var Variable data (logs, cache, pacman db)
Garuda Btrfs subvolumes (default layout):
@ → mounted at /
@home → mounted at /home
@cache → mounted at /var/cache
@log → mounted at /var/log
@snapshots → Snapper snapshot storage
GRUB & Snapshot Boot
# Garuda installs grub-btrfs — GRUB shows Btrfs snapshots as boot entries# If system breaks after update:# 1. Reboot → GRUB menu → "Garuda Linux snapshots"# 2. Select a snapshot from before the problem# 3. Boot into it (read-only snapshot)# 4. From inside snapshot, run: sudo garuda-update (or pacman rollback)# 5. Or: sudo snapper rollback <number># Update GRUB snapshot list:sudo grub-mkconfig -o /boot/grub/grub.cfg# grub-btrfs auto-updates on snapshot creation (systemd path unit)systemctl status grub-btrfsd
Shell & Terminal
Default Shell & Terminal
# Garuda Dr460nized uses fish shell by defaultecho $SHELL # /usr/bin/fish# fish features: auto-suggestions, syntax highlighting, tab completion# No need to source config — fish auto-loads ~/.config/fish/config.fish# Switch to bash/zsh if preferred:chsh -s /bin/bashchsh -s /bin/zshsudo pacman -S zsh zsh-autosuggestions zsh-syntax-highlighting# Default terminal: Konsole (KDE) or Alacritty (GPU-accelerated)sudo pacman -S alacritty # fast GPU terminalsudo pacman -S kitty # another GPU terminal
Essential Commands
# File operationsls -la / exa -la / lsd -la # list files (exa/lsd are modern ls replacements)sudo pacman -S exa lsd bat # install modern CLI toolsbat file.txt # cat with syntax highlightingfd pattern # modern find replacementrg pattern # ripgrep — fast grep# System infoneofetch # system info + ASCII art (pre-installed)fastfetch # faster neofetch alternativebtop # modern htop (pre-installed on Garuda)# Disk usagedf -hT # disk space + filesystem typedust # modern du replacementsudo pacman -S dust ncdu# Process managementbtop / htop / top # process monitorkill PID / killall name # kill process
fish Shell Basics
# fish config: ~/.config/fish/config.fish# Variablesset name "Garuda"echo $name# Functionsfunction greet echo "Hello, $argv[1]"endgreet "World"# Aliases (fish calls them abbreviations)abbr -a update 'sudo pacman -Syu'abbr -a install 'sudo pacman -S'# Conditionalsif test $status -eq 0 echo "Success"else echo "Failed"end# Loopsfor i in (seq 1 5) echo $iend
# Garuda uses the "wheel" group for sudo (same as Arch/Fedora)sudo visudo# Uncomment: %wheel ALL=(ALL:ALL) ALL# Passwordless sudo (for gaming/automation — less secure):# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
Systemd & Services
systemctl
systemctl status servicenamesudo systemctl start|stop|restart servicenamesudo systemctl enable|disable servicenamesystemctl list-units --type=service --state=runningsystemctl --failed # show failed servicessudo systemctl daemon-reload
Gaming-Related Services
# GameMode daemonsystemctl --user status gamemodedsystemctl --user enable --now gamemoded# Sunshine (game streaming server — GeForce NOW alternative)sudo pacman -S sunshinesudo systemctl enable --now sunshine# Web UI: https://localhost:47990# Pipewire (audio — pre-installed, replaces PulseAudio)systemctl --user status pipewiresystemctl --user status wireplumberpactl info # audio server info
Dr460nized KDE Desktop
KDE Plasma Basics
Super key → Application launcher (KRunner)
Super + Tab → Switch windows
Alt + Tab → Switch windows (classic)
Super + D → Show desktop
Super + E → File manager (Dolphin)
Super + L → Lock screen
Ctrl + Alt + T → Terminal
Super + PrtSc → Screenshot (Spectacle)
Super + Shift + S → Screenshot region
KDE Customization
# KDE System Settings → Appearance → Global Theme# Garuda Dr460nized uses: Sweet theme + Latte Dock + custom icons# Install additional themes:sudo pacman -S kvantum-qt5 # Kvantum theme enginesudo pacman -S latte-dock # macOS-style dock# KDE Plasma widgets (right-click desktop → Add Widgets)# Useful widgets: System Monitor, Weather, Clipboard, Notes# Virtual desktops# System Settings → Workspace → Virtual Desktops# Ctrl + F1/F2/F3/F4 → switch desktops# Meta + Ctrl + Left/Right → switch desktops
Display & HiDPI
# KDE Wayland session (recommended for HiDPI):# Select "Plasma (Wayland)" at SDDM login screenecho $WAYLAND_DISPLAY # check if Wayland activeecho $XDG_SESSION_TYPE # "wayland" or "x11"# HiDPI scaling: System Settings → Display → Global Scale# Fractional scaling supported natively on Wayland# Multi-monitor: System Settings → Display → Arrangement
# ~/.config/fish/functions/venv.fishfunction venv --description "Create or activate a Python virtual environment" if test -d .venv source .venv/bin/activate.fish echo "Active Python Virtualenv: "(python -V) else if test -d venv source venv/bin/activate.fish echo "Active Python Virtualenv: "(python -V) else echo "No virtualenv found (.venv/ or venv/). Creating one..." python3 -m venv .venv source .venv/bin/activate.fish pip install --upgrade pip endend
Network Port Monitor (ports.fish):
# ~/.config/fish/functions/ports.fishfunction ports --description "List open and listening ports with process info" sudo ss -tulnpend
System Cleaner Hook (sysclean.fish):
# ~/.config/fish/functions/sysclean.fishfunction sysclean --description "Clean pacman cache, orphaned packages, and snapper history" echo "==========================================" echo " Running System Cleanup " echo "==========================================" echo "[*] Removing orphaned packages..." sudo pacman -Rns (pacman -Qdtq) 2>/dev/null; or echo "No orphan packages to remove." echo "[*] Pruning old pacman cached archives..." sudo paccache -r echo "[*] Cleaning user cache..." rm -rf ~/.cache/* echo "==========================================" echo " Cleanup Complete " echo "=========================================="end
Troubleshooting
System Won’t Boot After Update
1. Reboot → GRUB menu → "Garuda Linux snapshots"
2. Select snapshot from before the update
3. Boot into it
4. Open terminal → run: sudo snapper rollback <snapshot-number>
or: sudo pacman -U /var/cache/pacman/pkg/package-old-version.pkg.tar.zst
5. Reboot normally
Pacman Errors
# Error: failed to synchronize databasessudo pacman -Syy # force refresh all databases# Error: signature is unknown trustsudo pacman-key --refresh-keyssudo pacman -S archlinux-keyring garuda-keyring# Error: database is lockedsudo rm /var/lib/pacman/db.lck# Partial upgrade issues (never do pacman -Sy without -u)sudo pacman -Syu # always full upgrade# Reinstall broken package:sudo pacman -S --overwrite '*' package
NVIDIA Issues
# Black screen after NVIDIA install:# Boot from snapshot → reinstall driverssudo pacman -S nvidia-dkms nvidia-utils# Check NVIDIA is working:nvidia-smiglxinfo | grep "OpenGL renderer"# Force NVIDIA for specific app (Optimus laptops):__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia app# Or use prime-run:sudo pacman -S nvidia-primeprime-run game
Audio Issues
# Check Pipewire status:systemctl --user status pipewire wireplumber# Restart audio:systemctl --user restart pipewire wireplumber# Check audio devices:pactl list sinks shortpactl list sources short# Set default output:pactl set-default-sink sink-name# Install PulseAudio compatibility (if app needs it):sudo pacman -S pipewire-pulse
Gaming Performance Issues
# Check if GameMode is active:gamemoded -s# Check CPU governor:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor# Check GPU usage:radeontop # AMDnvidia-smi dmon # NVIDIA# Check for thermal throttling:watch -n 1 "cat /sys/class/thermal/thermal_zone*/temp"# Enable fsync (better than esync for Wine/Proton):# Use linux-tkg kernel which has fsync built-in# Or check: ulimit -Hn (should be > 524288)# Add to /etc/security/limits.conf:# * hard nofile 524288