How to set up a comfortable computing environment with Arch Linux

Below are the details and installation instructions for the Linux setup I’m running. This configuration is quite specific for my hardware and my personal needs, so it might require some adaptation if you are installing your own version. Furthermore the instructions are quite minimal and without much explaination. For more detailed explaination and troubleshooting if you encounter issues please see wiki.archlinux.org/title/Installation_guide
NOTE: This post was written 31.07.2025. For the latest version of the instructions please see the dotfiles repo and the accompanying NOTES.txt.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * COMFORTABLE COMPUTING ENVIRONMENT SET UP * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#1: ABOUT
1.1: SYSTEM
1.2: THEME
1.3: KEYBINDINGS
1.4: TERMINAL KEYBINDINGS
1.5: TERMINAL APPLICATIONS
1.6: GUI APPLICATIONS
#2: INSTALLATION
2.1: ARCH
2.2: DISABLE SUSPEND
2.3: QUIET BOOT
2.4: TOUCHPAD GESTURES
2.5: PACKAGES
2.6: YAY PACKAGES
2.7: ADDITIONAL PACKAGES
2.8: DOTFILES
2.9: VIM
////////////////////////////////////////////////////////////////////////////////
// #1 | ABOUT
////////////////////////////////////////////////////////////////////////////////
1.1 | SYSTEM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Operating system: Arch Linux
* Shell: zsh
* Display manager: Ly
* Window manager: i3
* Launcher: Rofi
* Terminal emulator: kitty
1.2 | THEME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* System theme: Apprentice (https://romainl.github.io/Apprentice/)
* Neovim theme: Habamax
* Font: ToshibaSat 8x16 (https://int10h.org/oldschool-pc-fonts/)
1.3 | KEYBINDINGS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Win] + Enter = Launch terminal emulator
[Win] + d = Launch rofi
[Win] + 0-9 = Change workspace
[Win] + [Shift] + q = Kill (quit)
[Win] + [Shift] + e = Lock
[Win] + f = Fullscreen
[Win] + r = Resize
[Win] + h = Split horizontal
[Win] + v = Split verical
[Win] + Left = Focus left
[Win] + Right = Focus right
[Win] + Up = Focus up
[Win] + Down = Focus down
[Win] + [Shift] + Left = Move left
[Win] + [Shift] + Right = Move right
[Win] + [Shift] + Up = Move up
[Win] + [Shift] + Down = Move down
PrtSc = Take screenshot
[Ctrl] + PrtSc = Take screenshot of selected area
[Shift] + PrtSc = Take delayed (5 sec) screenshot
1.4 | TERMINAL KEYBINDINGS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Ctrl] + r = fzf-history-widget
[Ctrl] + t = fzf-file-widget
[Alt] + c = fzf-cd-widget
1.5 | TERMINAL APPLICATIONS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Specs: fastfetch
* Text editor: nvim
* Diff tool: nvim -d <file1> <file2>
* File manager: yazi
* Process manager: htop
* Calculator: calc
* Calendar: calcurse
* Music player: cmus
* Audio mixer: alsamixer
* Wifi menu: nmtui
* List wifi networks: nmcli device wifi list
* Connect to wifi: nmcli device wifi connect <ssid> password <password>
1.6 | GUI APPLICATIONS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* File manager: thunar
* Text editor: subl
* Markdown editor: obsidian
* Pdf reader: okular
* Web browser: firefox
* Messaging: signal-desktop
* Torrent client: qbittorrent
* Bluetooth manager: blueman-manager
* Audio mixer: pavucontrol
////////////////////////////////////////////////////////////////////////////////
// #2 | INSTALLATION
////////////////////////////////////////////////////////////////////////////////
2.1 | ARCH
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(for norwegian keyboard) $ loadkeys no
$ cat /sys/firmware/efi/fw_platform_size
$ iwctl
$ adapter phy0 set-property Powered on
$ device wlan0 set-property Powered on
$ station wlan0 scan
$ station wlan0 connect <wifi name>
$ ping archlinux.org
$ timedatectl
$ fdisk -l
$ cfdisk /dev/<disk name>
* Make EFI partion (if not dual boot)
* Make swap partion (8GB?)
* Make main partion
* Format EFI partion (if not dual boot)
$ mkswap /dev/<swap partion>
$ swapon /dev/<swap partion>
$ free -m
$ mkfs.ext4 /dev/<main partion>
$ mount /dev/<main partion> /mnt
$ mount /dev/<efi partion> --mkdir /mnt/boot/efi
$ lsblk
$ pacstrap -K base base-devel intel-ucode linux linux-firmware linux-headers grub efibootmgr os-prober vim networkmanager dhcpcd
$ genfstab -U /mnt >> /mnt/etc/fstab
$ arch-chroot /mnt
$ ln -sf /usr/share/zoneinfo/Europe/Oslo /etc/localtime
$ hwclock --systohc
$ vim /etc/locale.gen
* Uncomment line: en_US.UTF-8 UTF-8
* Uncomment line: nb_NO.UTF-8 UTF-8
$ locale-gen
$ vim /etc/locale.conf
* LANG=en_US.UTF-8
$ vim /etc/vconsole.conf
* KEYMAP=no
$ vim /etc/hostname
# <hostname>
$ vim /etc/hosts
* Add these lines:
* 127.0.0.1 localhost
* ::1 localhost
* 127.0.1.1 <hostname>.localdomain localhost
(usually not required) $ mkinitcpio -P linux
$ passwd
$ useradd -m <username>
$ passwd <username>
$ visudo
* <username> ALL=(ALL:ALL) NOPASSWD: ALL
$ vim /etc/default/grub
* Uncomment line: GRUB_DISABLE_OS_PROBER=false
$ grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
$ grub-mkconfig -o /boot/grub/grub.cfg
$ vim /etc/pacman.conf/
* Uncomment these lines:
* [multilib]
* Include = /etc/pacman.d/mirrorlist
$ pacman -Syu
$ pacman -S nvidia-open nvidia-utils lib32-nvidia-utils
$ pacman -S ly xorg i3 rofi kitty
$ pacman -S git fzf zsh rxvt-unicode
$ pacman -S yazi cmus htop tree calcurse calc zoxide
$ pacman -S numlockx unclutter picom redshift hsetroot playerctl pulsemixer alsa-utils
$ pacman -S acpi xf86-input-synaptics
$ pacman -S feh shotgun imagemagick unzip 7zip fastfetch
$ pacman -S nodejs python python-pip
$ systemctl enable systemd-timesyncd.service
$ systemctl enable dhcpcd.service
$ systemctl enable NetworkManager.service
$ systemctl enable ly.service
$ exit
$ umount -lR /mnt
$ reboot
* login with <username>
(for norweigan keyboard) $ localectl --no-convert set-x11-keymap no pc104
(for dual boot setup) $ sudo grub-mkconfig -o /boot/grub/grub.cfg
$ vim /etc/modprobe.d/nobeep.conf
* blacklist pcspkr
* blacklist snd_pcsp
$ nmcli device wifi list
$ nmcli device wifi connect <ssid> password <password>
$ chsh -s /usr/bin/zsh
2.2 | DISABLE SUSPEND
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ sudo mkdir /etc/systemd/sleep.conf.d/
$ sudo vim /etc/systemd/sleep.conf.d/disable-suspend.conf
* Add these lines:
[Sleep]
AllowSuspend=no
AllowHibernation=no
AllowSuspendThenHibernate=no
AllowHybridSleep=no
2.3 | QUIET BOOT
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Redirect Xorg stdout and stderr to file:
$ sudo vim /etc/ly/config.ini
* Change the "x_cmd" line to:
x_cmd = /usr/bin/X > ~/.xorg_log 2>&1
* Redirect i3 sdout and stderr to log file:
$ sudo vim /usr/share/xsessions/i3.desktop
* Change the "Exec" line to:
rxec=i3 > ~/.i3_log 2>&1
2.4 | TOUCHPAD GESTURES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ sudo vim /etc/X11/xorg.conf.d/70-synaptics.conf
* Add these lines:
Section "InputClass"
Identifier "touchpad"
Driver "synaptics"
MatchIsTouchpad "on"
Option "TapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "VertEdgeScroll" "on"
Option "VertTwoFingerScroll" "on"
Option "HorizEdgeScroll" "on"
Option "HorizTwoFingerScroll" "on"
Option "EmulateTwoFingerMinZ" "40"
Option "EmulateTwoFingerMinW" "8"
Option "CoastingSpeed" "0"
Option "FingerLow" "30"
Option "FingerHigh" "50"
Option "MaxTapTime" "125"
Option "PalmDetect" "1"
Option "PalmMinWidth" "6"
Option "PalmMinZ" "300"
EndSection
2.5 | PACKAGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ pacman -S neovim xclip ripgrep tree-sitter-cli ttf-jetbrains-mono-nerd
$ pacman -S okular zathura zathura-pdf-mupdf pdfarranger
$ pacman -S texlive texlive-binextra
$ pacman -S bluez bluez-utils blueman pulseaudio-bluetooth pavucontrol
$ pacman -S thunar firefox obsidian qbittorrent ark mplayer signal-desktop vlc
$ pacman -S adobe-source-han-serif-cn-fonts adobe-source-han-serif-jp-fonts adobe-source-han-serif-kr-fonts adobe-source-han-serif-otc-fonts adobe-source-han-serif-tw-fonts
2.6 | YAY PACKAGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
$ cd
$ rm -rf ~/yay/
$ yay -S xcursor-retrosmart
$ yay -S sublime-text-4
$ yay -S bluetooth-autoconnect
$ yay -S nvidia-settings
$ yay -S grub-customizer
$ sudo systemctl enable bluetooth-autoconnect
$ systemctl --user enable pulseaudio-bluetooth-autoconnect
2.7 | ADDITIONAL PACKAGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ Development:
$ pacman -S blender godot
$ pacman -S cmake gdb github-cli lua dotnet-runtime dotnet-sdk dotnet-sdk-8.0
$ pacman -S raylib sdl3 sdl2-compat
+ Games:
$ pacman -S dwarffortress cataclysm-dda nethack
$ pacman -S steam
+ Math & studies:
$ sudo pacman -S libreoffice xournalpp hunspell libmythes mythes-en geogebra
$ yay -S mathpix-snipping-tool
+ Printing:
$ sudo pacman -S cups gedit
$ systemctl enable cups.service
+ Misc. other packages:
$ sudo pacman -S obs-studio screenkey handbrake
$ yay -S cmusfm
2.8 | DOTFILES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ git clone https://github.com/lzzrhx/lzzrhx.git
* Copy contents of /dotfiles to appropriate folders
2.9 | VIM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
$ vim
* :PluginInstall
$ python3 .vim/plugged/YouCompleteMe/install.py --clangd-completer --cs-complete --rust-completer --go-completer
Here is a short video of the final result: