Start with the programs

You should begin with the programs you’re willing to use, then choose the suitable hardware with your targeted OS in mind. Examples:

  • The free version of Davinci Resolve on Linux doesn’t support H264 codec unlike Windows, but supports AV1, so you need a graphic card with AV1 encoder or to buy the paid version of Davinci Resolve.
  • If you’ll use Blender then, you should buy some Nvidia GPU as CUDA is very supported on Blender. Blender and CUDA works very well on both Linux and Windows.
  • Running LLMs locally, VRAM will be very important, Apple’s unified memory may be very useful.
  • Adobe programs, Microsoft Office, Valorant, … Not working on Linux but very supported on Windows.

Have a program or two to run on Windows? Very simple, dual-boot.

Choosing a Linux distribution

In my opinion easing the use of Linux makes it harder. Any problem may faces you, you’re on your own to fix it. So, at least the ability to read and write English well is a must to get started e.g. to:

  • Search online or ask AI tools like ChatGPT
  • Read a wiki or documentation
  • Read forums and Reddit posts
  • Read a comprehensive guide like this

The fear and difficulty of using a terminal is what makes you a beginner, and “Easy distros” is very bad in making you in no need to open a one.

Searching, basic commands, basic vim usage, basic knowledge about Linux filesystem and the most important is… getting started.

Why Arch Linux

I’ve had a good experience with Arch Linux + Hyprland. What I mean by good experience is whether the system fits my needs or not.

  • Arch Wiki is one of the most comprehensive and valuable resources for Linux users not just Arch.
  • Rolling release Arch Linux follows a rolling release model, meaning it receives continuous updates instead of periodic major releases
  • Bleeding-edge packages and drivers You get access to the latest versions of software, libraries, and drivers as soon as they’re released.
  • Endless Software Availability The AUR is a community-driven repository that offers packages not included in the official Arch Linux repositories.
  • Community You’ll find so many solved problems you may face in Arch Linux, also there’s a newbie corner that almost will cover all beginner’s questions.

My reasons to use Arch Linux

  • Building the latest versions of open-source projects like Hyprland, Waybar and Quran-Companion to modify and tinker with the code.
  • New packages and drivers, specially Nvidia GPU drivers. A newer GPU driver may affect the performance to make Arch Linux better than gaming distros like Nobara Linux
  • AUR make it very easy to install latest versions of libraries, IDEs, programs. e.g. clipse-bin, google-chrome, clion, intellij, android-studio, … instead of building from source or installing appimage from a website. AUR helpers like yay makes it more easier to manage and update these packages.

Installing Arch Linux + Hyprland

Connect to internet (WIFI)

rfkill unblock wifi

iwctl
device list
# replace wlan0 with your device
station wlan0 scan
station wlan0 connect SSID

archinstall

proceed with minimal profile with NetworkManager, pipewire and grub selected.

Post fresh minimal installation

sudo without password

To run all commands without password (you still need sudo for root permission)

# add this at the end of /etc/sudoers
%wheel ALL=(ALL:ALL) NOPASSWD: ALL

connect to internet:

nmtui # Activate connection

Install yay (AUR helper):

mkdir .src
cd .src
git clone https://aur.archlinux.org/yay.git
cd yay-git
makepkg -si

Enable multilib from /etc/pacman.conf

[multilib]
Include = /etc/pacman.d/mirrorlist

Install Hyprland dependencies:

git clone https://github.com/hyprwm/hyprland-wiki

open using vim pages/Getting Started/Installation copy the dependencies of Arch Linux manual installation (y in vim) :term in vim and paste it and enjoy you don’t have to write them one by one :‘D

Build and install Hyprland

git clone --recursive https://github.com/hyprwm/hyprland
cd Hyprland
make all && sudo make install

Install kitty, the default terminal for Hyprland and give a look to the default keybindings, just the necessary ones until you apply your configuration.

sudo pacman -S kitty

Multi-GPU or NVIDIA

Display manager and Hyprland session

The recommended way to start Hyprland is using uwsm in systemd distros (or just write Hyprland after login in tty). Also you can use SDDM with some fancy theme.

Using uwsm (Universal Wayland Session Manager)

uwsm - Arch Wiki

sudo pacman -S uwsm vim

To launch Hyprland directly after tty login : paste this in your shell profile (mostly ~/.bashrc)

if uwsm check may-start; then
    exec uwsm start hyprland.desktop
fi
Using SDDM

SDDM - Arch Wiki

sudo pacman -S sddm
sudo systemctl enable sddm

Install or make your dots

I already have configs for my workflow on Hyprland on a GitHub repo. You can also clone them and edit to fit yours. https://github.com/abdalrahmanshaban0/Arch-Dots

Install all your favorite programs from a script

You may install some programs or dependencies on demand or don’t remember to write then in a single script for installation, a tip for that is to open ~/.bash_history and search for every -S and collect these packages in a script. But first, you must know and choose what these programs are.

Programs

Fonts

sudo pacman -S noto-fonts noto-fonts-emoji ttf-liberation ttf-jetbrains-mono ttf-hack-nerd ttf-dejavu

Text editor

yay -S neovim gvim

Wallpapers

yay -S swww waypaper

Network manager and Bluetooth

yay -S network-manager-applet bluez bluez-utils bluez-obex blueman
sudo systemctl enable bluetooth.service

Firewall

sudo pacman -S ufw
sudo ufw enable
sudo systemctl enable ufw.service

File manager and archiving

sudo pacman -S thunar gvfs gvfs-mtp ntfs-3g thunar-volman ffmpegthumbnailer tumbler man-db lsd bzip2 gzip p7zip unrar zip unzip 

Terminal

sudo pacman -S alacritty

Clipboard

yay -S wl-clipboard wl-clip-persist clipse-bin

In ~/.conf/hypr/hyprland.conf

exec-once = clipse -listen

windowrulev2 = float, class:(clipse)
windowrulev2 = size 622 652, class:(clipse)
windowrulev2 = stayfocused, class:(clipse)

bind = $mainMod SHIFT, V, exec, alacritty --class clipse -e clipse

Audio

yay -S pipewire pipewire-pulse pipewire-alsa wireplumber pavucontrol

Authentication for GUI apps

Hyprland wiki

sudo pacman -S hyprpolkitagent
# exec-once = systemctl --user start hyprpolkitagent

Optional (just to be cool)

yay -S cava neofetch cmatrix
# A dock if you want
yay -S nwg-dock-hyprland

Notification daemon

sudo pacman -S mako jq

Screenshots

sudo pacman -S grim slurp

this script to take selected area screen shot and save it in ~/Pictures/Screenshots

mkdir -p ~/Pictures/Screenshots && grim -g "$(slurp)" - | wl-copy && wl-paste > ~/Pictures/Screenshots/Screenshot-$(date +%F_%T).png && notify-send "Screenshot saved in ~/Pictures/Screenshots" -t 3000

Web browser

yay -S brave-bin google-chrome firefox

PDF viewer

yay -S evince xournalpp

GTK settings (themes)

yay -S nwg-look papirus-icon-theme
# I use Catppuccin Mocha GTK Theme
# Download it from https://www.gnome-look.org/p/1996672
# unzip it and copy it to /usr/share/themes

media player

yay -S mpv playerctl

poweroff, reboot, logout, lock

yay -S wlogout hyprlock

Note taking

yay -S obsidian

Brightness control

yay -S brightnessctl

git commands UI

yay -S lazygit

System monitoring

yay -S btop

Image viewer and editor tool

yay -S swappy

Printing

yay -S cups cups-pdf ghostscript gsfonts gutenprint system-config-printer

Status bar (Waybar)

sudo pacman -S waybar

My Islamic prayer timings daemon and custom-module for Waybar.

Nice icons:

yay -S ttf-font-awesome ttf-bootstrap-icons ttf-nerd-fonts-symbols

Fid your icons:

Photo editing

yay -S gimp
# mostly I use online AI tools

Wine (Run windows programs)

enable multilib in /etc/pacman.conf

sudo pacman -Syyu wine wine-mono wine-gecko winetricks

Quran

yay -S quran-companion

Screen sharing

yay -S obs-studio xdg-desktop-portal-hyprland

Video editing

Kdenlive sucks and Davinci Resolve on Linux doesn’t support H.264 codec (the paid version does, also you can transcode all of your project videos for some hours and torture your hardware). The best solution for me is using a GPU that supports AV1 video encoder. For audio, the ACC is not supported, so I use PCM 24-bit, For further information about Supported Condecs

I’m currently using an AMD CPU that contains an integrated graphics that has AV1 encoder and Nvidia RTX4060 that also has AV1 encoder (I use the 4060 of course). This is my OBS studio settings: obs studio video output settings

Installing Davinci Resolve

After installing the program from the official website:

# necessary packages
sudo pacman -S libxcrypt libxcrypt-compat pango
# run the application with this command:
LD_PRELOAD="/usr/lib/libgio-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so" /opt/resolve/bin/resolve
# Note: you can edit the exec in the application launcher of davinci resolve at /usr/share/applications/com.blackmagicdesign.resolve.desktop
Exec=env LD_PRELOAD="/usr/lib/libgio-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so" /opt/resolve/bin/resolve %u
AMD GPU

You need to download packages to support OpenCl to make Davinci Resolve work:

sudo pacman -S rocm-opencl-runtime opencl-rusticl-mesa

Note: Maybe you’ll need to download packgaes for ROCm of AMD if Davinci Resolve supports it.

Nvidia GPU
# If needed only (No GPU problem)
sudo pacman -S cuda

Digital Camera as webcam

First make sure that your cam in Supported Cameras. Also you need to see the ArchWiki for more details.

sudo pacman -S v4l2loopback-dkms v4l2loopback-utils v4l-utils gphoto2 gvfs-gphoto2

First, connect your camera by usb to your computer. Runs this command and make sure you see your camera name gphoto2 --auto-detect. Show connected devices: v4l2-ctl --list-devices. You may find /dev/video0 , in a laptop you may find 2 devices.

Loading v4l2loopback kernel module:

# create /etc/modprobe.d/webcam.conf
options v4l2loopback card_label=Video-Loopback exclusive_caps=1

This is my aliases for some controls of my DSLR (Canon 2000d).

alias dslrcam="gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0"

alias dslrphoto="gphoto2 --capture-image-and-download"

In OBS studio, add video capture device, this is my settings: OBS webcam settings In my case, I don’t have a capture card, I connect the camera using usb, so the resolution I have is 1024x576 so I add a filer for upscaling to 1920x1080: obs scaling filter I recommend using capture card if your camera has clean HDMI output, if not you may try to crop the portion of the video the focus square appears in.

Gaming

sudo pacman -S lutris mangohud gamemode libxnvctrl goverlay vulkan-tools

Torrent client

sudo pacman -S qbittorrent

Dual Boot

I’m dual booting on 2 different drives and choose which one to boot in using Grub. This is the easier way, the order of installing linux or windows doesn’t matter.

If you want to dual boot on the same drive, Install Linux first with manual partitioning and let a free (unallocated) space at the end for Windows. like this: dual boot partitioning

To make Grub supports that :

yay -S os-prober

Edit /etc/default/grub to uncomment the line (maybe last line) :

GRUB_DISABLE_OS_PROBER=false

You can add a Grub theme (install one from gnome-look). The theme dir usually contains install.sh that you can run as root to install the theme.

For manual way, copy the theme dir (that contains theme.txt) to either /usr/share/grub/themes or /boot/grub/themes. Then edit this line in /etc/default/grub with the theme.txt path like this:

GRUB_THEME="/boot/grub/themes/Xenlism-Arch/theme.txt"

update grub (generating grub.cfg)

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