arch-everforest
arch-everforest copied to clipboard
Arch Linux Installation and Customization Guide. This configuration uses Wayland as display protocol and Hyprland as compositor. Also included are Neovim config files written in Lua and other programs...
Arch Linux Install & Everforest Ricing
This is a full installation and customization guide for Arch Linux. This updated guide uses Wayland instead of X11. The theme is based off the Everforest color scheme from sainnhe.
ℹ️ If you already have a running Arch system with the necessary packets installed, you can go to the Quick Ricing section.
Preview
https://github.com/3rfaan/arch-everforest/assets/28968837/67925316-bbc5-4717-952c-056470362965
⚠️ Caution: If you are installing Arch on a virtual machine you won't have the blur effect like in the image above because there is no hardware acceleration.
Arch Installation Guide
Download ISO image
Go to the download page of the official Arch Linux webpage and download the ISO image from one of the mirrors: https://archlinux.org/download/.
Prepare an installation medium
Check this Arch Wiki article to prepare an installation medium, e.g. a USB flash drive or an optical disc: https://wiki.archlinux.org/title/installation_guide#Prepare_an_installation_medium
Console keyboard layout
Find out which keyboard layout you are using and then set it using loadkeys
:
$ ls /usr/share/kbd/keymaps/**/*.map.gz
$ loadkeys de_CH-latin1
Connect to the web
To connect to the web we use iwctl:
To start iwctl run the following command:
$ iwctl
We can then look for the device name:
[iwd]# device list
Then we can use the device name to scan for networks (Note: This command won't output anything!):
[iwd]# station <device-name> scan
Now we can list all available networks:
[iwd]# station <device-name> get-networks
Finally, we connect to a network:
[iwd]# station <device-name> connect <SSID>
Check if you successfully established a connection by pinging the Google server:
$ ping 8.8.8.8
Console font
This step is not really necessary, but the Terminus font may appear cleaner than the default one:
$ setfont Lat2-Terminus16
Partitioning
UEFI or BIOS?
Run the following command:
$ ls /sys/firmware/efi/efivars
If the command shows the directory without error, then the system is booted in UEFI mode. Else you have to use BIOS mode.
Check the name of the hard disk:
fdisk -l
Use the name (in my case sda) to start the fdisk
partitioning tool:
fdisk /dev/sda
UEFI with GPT
Press g to create a new GUID Partition Table (GPT).
We will do it according to the example layout of the Arch wiki:
Mount point | Partition | Partition type | Suggested size |
---|---|---|---|
/mnt/boot | /dev/efi_system_partition | uefi | At least 300 MiB |
[SWAP] | /dev/swap_partition | swap | More than 512 MiB |
/mnt | /dev/root_partition | linux | Remainder of device |
Create boot partition
- Press n.
- Press Enter to select the default partition number.
- Press Enter to use the default first sector.
- Enter +300M for the last sector.
- Press t and choose 1 and write uefi.
Create swap partition
- Press n.
- Press Enter to select the default partition number.
- Press Enter to use the default first sector.
- Enter +512M for the last sector.
- Press t and choose 2 and write swap.
Create root partition
- Press n.
- Press Enter to select the default partition number.
- Press Enter to use the default first sector.
- Enter Enter to use the default last sector.
- Press t and choose 3 and write linux.
⚠️\ When you are done partitioning don't forget to press w to save the changes!
After partitioning check if the partitions have been created using fdisk -l
.
Partition formatting
$ mkfs.ext4 /dev/<root_partition>
$ mkswap /dev/<swap_partition>
$ mkfs.fat -F 32 /dev/<efi_system_partition>
Mounting the file system
$ mount /dev/<root_partition> /mnt
$ mount --mkdir /dev/<efi_system_partition> /mnt/boot
$ swapon /dev/<swap_partition>
BIOS with MBR
Press o to create a new MBR partition table.
We will do it according to the example layout of the Arch wiki:
Mount point | Partition | Partition type | Suggested size |
---|---|---|---|
[SWAP] | /dev/swap_partition | swap | More than 512 MiB |
/mnt | /dev/root_partition | linux | Remainder of device |
Create swap partition
- Press n.
- Press Enter to select the default partition number.
- Press Enter to select the default primary partition type.
- Press Enter to use the default first sector.
- Enter +512M for the last sector.
- Press t and choose 1 and write swap.
Create root partition
- Press n.
- Press Enter to select the default partition number.
- Press Enter to select the default primary partition type.
- Press Enter to use the default first sector.
- Enter Enter to use the default last sector.
- Press t and choose 2 and write linux.
Make partition bootable
Press a and choose 2 to make the root partition bootable.
⚠️\ When you are done partitioning don't forget to press w to save the changes!
After partitioning check if the partitions have been created using fdisk -l
.
Partition formatting
$ mkfs.ext4 /dev/<root_partition>
$ mkswap /dev/<swap_partition>
Mounting the file system
$ mount /dev/<root_partition> /mnt
$ swapon /dev/<swap_partition>
Package install
For a minimal system download and install these packages:
$ pacstrap -K /mnt base base-devel linux linux-firmware e2fsprogs dhcpcd networkmanager sof-firmware git neovim man-db man-pages texinfo
ℹ️ If you are installing Arch Linux on a computer with ARM architecture add the following to the above pacstrap
command:
archlinuxarm-keyring
⚠️ If you get errors due to key then do the following:
- Initialize pacman keys and populate them:
pacman-key --init
pacman-key --populate
- Synchronize Arch keyring:
archlinux-keyring-wkd-sync
Last steps
Generate fstab file
$ genfstab -U /mnt >> /mnt/etc/fstab
Change root into new system
$ arch-chroot /mnt
Set time zone
$ ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
$ hwclock --systohc
Localization
Edit /etc/locale.gen and uncomment en_US.UTF-8 UTF-8 and other needed locales. Generate the locales by running:
$ locale-gen
Create /etc/locale.conf and set the LANG variable according to your preferred language:
LANG=de_CH.UTF-8
Create /etc/vconsole.conf and set the following variables according to your preferred language:
KEYMAP=de_CH-latin1
FONT=Lat2-Terminus16
Network configurations
Create /etc/hostname and type any name you wish as your hostname:
arch
Edit /etc/hosts like this:
127.0.0.1 localhost
::1 localhost
127.0.1.1 arch (your host name here!)
Initramfs
$ mkinitcpio -P
Root password
Set a new password for root:
$ passwd
Bootloader
UEFI
Install grub
and efibootmgr
:
$ pacman -S grub efibootmgr
Run the following command:
$ grub-install --efi-directory=/boot --bootloader-id=GRUB
Then create a GRUB config file:
$ grub-mkconfig -o /boot/grub/grub.cfg
BIOS
Install grub
:
$ pacman -S grub
Check using fdisk -l
to see the name of the disk (not partition!) and run the following command:
$ grub-install /dev/sdX
/dev/sdX could for example stand for /dev/sda (not /dev/sda1!)
Then create a GRUB config file:
$ grub-mkconfig -o /boot/grub/grub.cfg
Final step
Exit out of the chroot environment by typing exit
or pressing Ctrl+d.
Unmount all the partitions:
$ umount -R /mnt
Then type poweroff
and remove the installation disk.
System-related Configurations
Enable network connection
To use pacman you first have to have a working internet connection by enabling NetworkManager:
$ systemctl start NetworkManager
$ systemctl enable NetworkManager
Now we can connect to the web using NetworkManager:
First, we list all nearby Wi-Fi networks:
$ nmcli device wifi list
We can then connect to a network:
$ nmcli device wifi connect <SSID> password <password>
Check if you receive data from the Google Server by running this command:
$ ping 8.8.8.8
Update the system
First things first: Update the system!
$ pacman -Syu
sudo
Command
Install the sudo
command:
$ pacman -S sudo
Add your personal user account
$ useradd -m -g users -G wheel,storage,power,video,audio,input <your username>
$ passwd <your username>
Grant root access to our user
$ EDITOR=nvim visudo
Uncomment the following line in order to use the sudo
command without password prompt:
%wheel ALL=(ALL) NOPASSWD: ALL
You can then log in as your newly created user:
$ su <your username>
If you wish to have the default XDG directories (like Downloads, Pictures, Documents etc.) do:
$ sudo pacman -S xdg-user-dirs
$ xdg-user-dirs-update
Install AUR package manager
To install yay:
$ cd $HOME && mkdir aur
$ cd aur
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
Guest tools
SPICE support on guest (for UTM)
This will enhance graphics and improve support for multiple monitors or clipboard sharing.
$ sudo pacman -S spice-vdagent xf86-video-qxl
Guest additions (for VirtualBox)
This will enhance graphics and improve support for multiple monitors or clipboard sharing.
$ sudo pacman -S virtualbox-guest-utils
Sound
$ sudo pacman -S alsa-utils alsa-plugins
$ sudo pacman -S pipewire pipewire-alsa pipewire-pulse wireplumber
Network
$ sudo pacman -S openssh
$ sudo pacman -S iw wpa_supplicant
Enable SSH, DHCP:
$ sudo systemctl enable sshd
$ sudo systemctl enable dhcpcd
Bluetooth
$ sudo pacman -S bluez bluez-utils blueman
$ sudo systemctl enable bluetooth
Pacman
To beautify Pacman use:
$ sudo nvim /etc/pacman.conf
Uncomment Color
and add below it ILoveCandy
.
ℹ️ If you have a good internet connection, you can uncomment the option ParallelDownloads = 5
.
Enable SSD Trim
$ sudo systemctl enable fstrim.timer
Enable Time Synchronization
$ sudo pacman -S ntp
$ sudo systemctl enable ntpd
Then enable NTP:
$ timedatectl set-ntp true
Graphical User Interface (GUI) Settings
Wayland
$ sudo pacman -S hyprland hyprpaper swayidle
$ yay -S wlogout swaylock-effects-git
-
hyprland: A compositor for Wayland
-
hyprpaper: Set wallpaper in Hyprland
-
swayidle: DPMS, turning screen off after timeout period
-
wlogout: Menu for logging out, rebooting, shutting down, etc
-
swaylock-effects-git: Lockscreen
⚠️ Caution: If you don't have an NVIDIA graphics card you have to delete the environment variables concerning NVIDIA in ~/.config/hyprland/hyprland.conf later when configuring the system!
Drivers
Intel:
sudo pacman -S mesa intel-media-driver libva-intel-driver vulkan-intel
NVIDIA:
sudo pacman -S nvidia
Fonts
$ sudo pacman -S noto-fonts ttf-opensans ttf-firacode-nerd
Emojis:
$ sudo pacman -S noto-fonts-emoji
To support Asian letters:
$ sudo pacman -S noto-fonts-cjk
Shell
$ sudo pacman -S zsh
Change default shell to zsh:
$ chsh -s $(which zsh)
Terminal
$ sudo pacman -S alacritty kitty
Editor
Neovim should already be installed after running the pacstrap command in the installation process. You can use other editors like nano too.
$ sudo pacman -S neovim gedit nano
Program Launcher
$ sudo pacman -S wofi
Status Bar
$ sudo pacman -S waybar
File Manager
$ sudo pacman -S ranger nemo
For image previews in ranger
, kitty
needs a dependency:
$ sudo pacman -S python-pillow
Image Viewer
$ sudo pacman -S imv
Browser
$ sudo pacman -S firefox chromium
Screenshot
$ yay -S hyprshot
Screen Recorder
$ yay -S obs-studio-git
You have to install additional packages. Please follow these instructions: https://gist.github.com/PowerBall253/2dea6ddf6974ba4e5d26c3139ffb7580
Media Player
$ sudo pacman -S vlc
PDF Viewer
$ sudo pacman -S zathura zathura-pdf-mupdf
Color Temperature Adjustment
$ sudo pacman -S gammastep
Wallpapers
Check these amazing wallpapers that harmonize with the Everforest theme: https://github.com/Apeiros-46B/everforest-walls
GTK Dark Theme
To make GTK applications (e.g. nemo) use dark theme, execute the following commands:
$ gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
$ gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
Other Tools
Programming Languages
These languages are needed for Mason, the LSP package manager in Neovim:
$ sudo pacman -S nodejs npm rust go ruby rubygems php composer lua luarocks python python-pip dotnet-runtime dotnet-sdk julia java-runtime-common java-environment-common jdk-openjdk
CLI utilities
$ sudo pacman -S tldr fzf wget curl tar unzip gzip htop neofetch
$ yay -S pfetch
- tldr: Commands cheat sheet
- fzf: Fuzzy finder
- wget: Fetching packages from the web
- curl: Fetching packages from the web
- tar: Enzipping/Unzipping
- unzip: Enzipping/Unzipping
- gzip: Enzipping/Unzipping
- htop: CLI task manager
- neofetch: System information
- pfetch: More concise system information
Alternatives to traditional commands
$ sudo pacman -S fd ripgrep bat eza tree-sitter tree-sitter-cli
- fd: Alternative to find command
- ripgrep: Alternative to grep command
- bat: Alternative to cat command
-
eza: Alternative to ls command (fork of
exa
) - tree-sitter & tree-sitter-cli: Real syntax highlighting in Neovim
Reboot
When done installing the necessary packages, run the sudo reboot
command.
Quick Ricing
You can either clone the repository and move the files manually to your ~/.config directory or you could use the hyprforest-installer:
Manual Installs
Troubleshooting
Missing seatd socket
If you get the following warning:
"[libseat/backend/seatd.c:70] Could not connect to socket /run/seatd.sock: no such file or directory"
Then open /etc/environment
and add the following line:
LIBSEAT_BACKEND=logind
Unable to load such font with such kernel version
If you get the warning "Unable to load such font with such kernel version" when starting up then edit the /etc/mkinitcpio.conf
file as follows:
- Check for the line
BINARIES=
and set it to setfont:
BINARIES=(setfont)
- Check for the line
HOOKS=
and replacekeymap
andconsolefont
withsd-vconsole
:
HOOKS=(base udev autodetect modconf kms keyboard sd-vconsole block filesystems fsck)
Then run:
mkinitcpio -P
Missing Firmware when (re-)generating presets
When mkinitcpio -P
outputs warnings about missing firmware you can install this AUR packet:
$ yay -S mkinitcpio-firmware
Then run:
mkinitcpio -P
org.freedesktop.Notifications: No such file or directory
Install the package notification-daemon
:
$ sudo pacman -S notification-daemon
Create the file org.freedesktop.Notifications.service in /usr/share/dbus-1/services
with following content:
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/notification-daemon-1.0/notification-daemon
No such interface org.freedesktop.portal.settings
Install the following package:
$ sudo pacman -S xdg-desktop-portal-gtk