Navigate with ← → keys or buttons below. Click a section to jump.
Edit /etc/locale.gen # Uncomment your locale # e.g. en_US.UTF-8 sudo locale-gen # /etc/locale.conf: LANG=en_US.UTF-8
sudo timedatectl set-timezone \ Europe/Warsaw # Enable NTP sync: sudo timedatectl \ set-ntp true
sudo hostnamectl \ set-hostname mymachine # Edit /etc/hosts: 127.0.1.1 mymachine .localdomain mymachine
# Intel: sudo pacman -S intel-ucode # AMD: sudo pacman -S amd-ucode
sudo pacman -S fwupd sudo fwupdmgr refresh sudo fwupdmgr get-updates sudo fwupdmgr update
sudo pacman -S nvidia nvidia-utils nvidia-settings lib32-nvidia-utils
nvidia_drm.modeset=1 to kernel paramsKWIN_DRM_USE_EGL_STREAMS=1nvidia-smisudo pacman -S mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon libva-mesa-driver
sudo pacman -S rocm-opencl-runtimeglxinfo | grep renderersudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel intel-media-driver
vainfo| Feature | Wayland (KWin) | X11 (Xorg) |
|---|---|---|
| Screen tearing | ✓ None (composited) | ⚠ Needs compositing |
| NVIDIA support | ⚠ Needs modeset=1 | ✓ Mature |
| Screen sharing | ✓ PipeWire/xdg-portal | ✓ Native |
| HiDPI / mixed DPI | ✓ Per-display scaling | ⚠ Global only |
| Gaming (Steam) | ✓ GameScope works | ✓ Traditional |
| Remote desktop | ⚠ RDP/VNC improving | ✓ Better today |
System Settings → Display & Monitor → Arrange displays drag-and-drop # CLI: kscreen-doctor output.HDMI-A-1.enable output.HDMI-A-1.mode.1920x1080@60 # X11 autorandr: sudo pacman -S autorandr && autorandr --save home
sudo pacman -S pipewire pipewire-alsa \ pipewire-pulse pipewire-jack wireplumber systemctl --user enable --now pipewire systemctl --user enable --now pipewire-pulse systemctl --user enable --now wireplumber
sudo pacman -S bluez bluez-utils systemctl enable --now bluetooth # /etc/bluetooth/main.conf: # AutoEnable=true # Enable=Source,Sink,Media,Socket
▸ Replaces PulseAudio AND JACK simultaneously
▸ Ultra-low latency — pro audio ready
▸ Bluetooth aptX-HD / LDAC support
▸ Screen audio capture in Wayland
sudo pacman -S tlp tlp-rdw sudo systemctl enable --now tlp # ThinkPads also: sudo pacman -S tp_smapi acpi_call # Check: sudo tlp-stat -b
sudo pacman -S thermald sudo systemctl enable --now thermald
Use either TLP OR power-profiles-daemon — not both! KDE Plasma uses PPD by default. TLP gives finer control for laptops.
powerprofilesctl list
1. Create swap file ≥ RAM size
2. Add resume=UUID=... to kernel params
3. Add resume hook to mkinitcpio.conf
4. Run mkinitcpio -P
5. systemctl edit systemd-suspend-then-hibernate.service → HibernateDelaySec=30min
sudo pacman -S fprintd libfprint
fprintd-enroll # scan 5 times fprintd-verify # test it
# /etc/pam.d/sudo — add at top: auth sufficient pam_fprintd.so
# /etc/pam.d/sddm — add at top: auth sufficient pam_fprintd.so
# /etc/pam.d/polkit-1 — add at top: auth sufficient pam_fprintd.so
yay -S libinput-gestures libinput-gestures-setup install libinput-gestures-setup autostart # ~/.config/libinput-gestures.conf: gesture swipe up 3 xdotool key super gesture swipe left 3 xdotool key alt+Right
localectl set-x11-keymap plsetxkbmap -option ctrl:nocapssudo pacman -S fcitx5 fcitx5-qt fcitx5-gtkLogitech: yay -S piper + sudo systemctl enable ratbagd | Razer: yay -S openrazer-meta polychromatic | Corsair: yay -S ckb-next
sudo pacman -S networkmanager nm-applet sudo systemctl enable --now NetworkManager # CLI: nmcli device wifi list nmcli device wifi connect "SSID" password "pw"
sudo pacman -S ufw gufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw enable sudo systemctl enable ufw
# WireGuard: sudo pacman -S wireguard-tools # OpenVPN: sudo pacman -S openvpn networkmanager-openvpn # Import .ovpn: nmcli connection import type openvpn file my.ovpn
# /etc/systemd/resolved.conf: [Resolve] DNS=9.9.9.9 DNSOverTLS=yes FallbackDNS=1.1.1.1
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes Port 2222 AllowUsers yourusername
sudo cryptsetup luksAddKey /dev/sdXn sudo cryptsetup luksHeaderBackup /dev/sdXn \ --header-backup-file luks-header.img
sudo pacman -S apparmor # kernel param: lsm=landlock,lockdown, # yama,integrity,apparmor,bpf sudo systemctl enable --now apparmor aa-status
sudo pacman -S yubikey-manager pam-u2f mkdir -p ~/.config/Yubico pamu2fcfg > ~/.config/Yubico/u2f_keys # /etc/pam.d/sudo: auth required pam_u2f.so
yay -S sddm-theme-sugar-candy-git → /etc/sddm.conf.d/sddm.conf → [Theme] Current=sugar-candy
sudo pacman -S zsh chsh -s /bin/zsh # Oh-My-Zsh: sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # Powerlevel10k: yay -S zsh-theme-powerlevel10k
sudo pacman -S bat eza fd ripgrep btop tmux neovim yay -S yakuake # F12 drop-down terminal
sudo pacman -S docker docker-compose sudo systemctl enable --now docker sudo usermod -aG docker $USER # Log out and back in! docker run hello-world
sudo pacman -S distrobox distrobox create --name ubuntu \ --image ubuntu:24.04 distrobox enter ubuntu # Apps appear in KDE launcher!
sudo pacman -S podman podman-compose # Rootless by default, no daemon alias docker=podman
sudo pacman -S qemu-full virt-manager \ libvirt dnsmasq sudo systemctl enable --now libvirtd sudo usermod -aG libvirt $USER # Nested VT-x/AMD-V: echo 'options kvm_intel nested=1' | \ sudo tee /etc/modprobe.d/kvm.conf
sudo pacman -S flatpak flatpak remote-add --if-not-exists flathub \ https://dl.flathub.org/repo/flathub.flatpakrepo # Install example: flatpak install flathub com.spotify.Client
# Enable multilib first in /etc/pacman.conf! sudo pacman -S steam # Steam → Settings → Compatibility → # Enable Steam Play → Proton Experimental sudo pacman -S gamemode lib32-gamemode # Launch option: gamemoderun %command% yay -S proton-ge-custom
sudo pacman -S snapper snap-pac snapper -c root create-config / # GUI: yay -S snapper-gui
sudo pacman -S restic restic -r /mnt/backup backup /home/user restic -r /mnt/backup snapshots
# Remove orphans: sudo pacman -Rns $(pacman -Qdtq) # Clean cache (keep 2 versions): sudo paccache -rk2 # Update mirrors: sudo reflector --save /etc/pacman.d/mirrorlist
sudo journalctl --vacuum-size=500M # /etc/systemd/journald.conf: SystemMaxUse=500M # Real-time errors: journalctl -f -p err
mount /dev/sdXn /mnt mount /dev/sdXp /mnt/boot # if separate arch-chroot /mnt
sudo pacman -U /var/cache/pacman/pkg/\ package-old-version.pkg.tar.zst # Or: yay -S downgrade && downgrade pkg
mkinitcpio -P # After kernel/hooks changes → reboot
grub-install /dev/sdX grub-mkconfig -o /boot/grub/grub.cfg
snapper create --description 'pre-update' — Subscribe to archlinux.org/news RSS!sudo pacman -S cups cups-pdf system-config-printer sudo systemctl enable --now cups # Access: http://localhost:631 # HP: sudo pacman -S hplip # Brother: yay -S brlaser
sudo pacman -S sane yay -S simple-scan # GUI scanimage -L # find scanner sudo pacman -S sane-airscan # network
sudo pacman -S kdeconnect # Sync Android notifications, clipboard, # files, battery — no cable needed
# KDE built-in: # System Settings → Display → Night Color # Set 3200K at night # Or redshift: sudo pacman -S redshift redshift -l 52.2:21.0 -t 6500:3200
#!/bin/bash export RESTIC_PASSWORD_FILE=/root/.restic-pass restic -r /mnt/backup/system backup \ /home /etc /root \ --exclude=/home/*/.cache \ --tag weekly-auto restic -r /mnt/backup/system forget \ --keep-weekly 4 --keep-monthly 6 --prune restic -r /mnt/backup/system check
#!/bin/bash # Keep last 2 versions of each package /usr/bin/paccache -rk2 # Remove all uninstalled packages /usr/bin/paccache -ruk0 echo "$(date): cache cleaned" >> /var/log/paccache.log
#!/bin/bash DESC="weekly-auto-$(date +%Y%m%d)" snapper -c root create \ --description "$DESC" \ --cleanup-algorithm number snapper -c root cleanup number
#!/bin/bash reflector --country Poland,Germany,Czech \ --sort rate --latest 20 \ --save /etc/pacman.d/mirrorlist echo "$(date): mirrors updated" >> /var/log/reflector.log
sudo pacman -S cronie sudo systemctl enable --now cronie crontab -e # user-level crontab sudo crontab -e # root crontab # System drop-in directories: /etc/cron.hourly/ # every hour /etc/cron.daily/ # daily ~midnight /etc/cron.weekly/ # every week /etc/cron.monthly/ # every month # Cron syntax: MIN HOUR DOM MON DOW CMD # 0 3 * * 0 /scripts/backup.sh # Always test first: bash -x /etc/cron.weekly/my-script.sh
# /etc/systemd/system/mybackup.timer [Timer] OnCalendar=Sun 03:00 Persistent=true [Install] WantedBy=timers.target sudo systemctl enable --now mybackup.timer systemctl list-timers
pacman -Rns $(pacman -Qdtq) --noconfirmjournalctl --vacuum-size=500Msystemctl enable fstrim.timer # built-in!fwupdmgr refresh && fwupdmgr get-updates