• Stars
    star
    182
  • Rank 211,154 (Top 5 %)
  • Language
    Lua
  • Created about 1 year ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

Logo

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

arch-everforest_short.mp4

Preview

⚠ī¸ 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
  1. Press n.
  2. Press Enter to select the default partition number.
  3. Press Enter to use the default first sector.
  4. Enter +300M for the last sector.
  5. Press t and choose 1 and write uefi.
Create swap partition
  1. Press n.
  2. Press Enter to select the default partition number.
  3. Press Enter to use the default first sector.
  4. Enter +512M for the last sector.
  5. Press t and choose 2 and write swap.
Create root partition
  1. Press n.
  2. Press Enter to select the default partition number.
  3. Press Enter to use the default first sector.
  4. Enter Enter to use the default last sector.
  5. 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
  1. Press n.
  2. Press Enter to select the default partition number.
  3. Press Enter to select the default primary partition type.
  4. Press Enter to use the default first sector.
  5. Enter +512M for the last sector.
  6. Press t and choose 1 and write swap.
Create root partition
  1. Press n.
  2. Press Enter to select the default partition number.
  3. Press Enter to select the default primary partition type.
  4. Press Enter to use the default first sector.
  5. Enter Enter to use the default last sector.
  6. 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:

  1. Initialize pacman keys and populate them:
pacman-key --init
pacman-key --populate
  1. 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 xf86-video-intel xf86-video-qxl intel-media-driver mesa

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 neovide 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 lsd tree-sitter tree-sitter-cli
  • fd: Alternative to find command
  • ripgrep: Alternative to grep command
  • bat: Alternative to cat command
  • lsd: Alternative to ls command
  • 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:

  1. Check for the line BINARIES= and set it to setfont:
BINARIES=(setfont)
  1. Check for the line HOOKS= and replace keymap and consolefont with sd-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

More Repositories

1

courses

Notes of lessons
Rust
91
star
2

dotfiles

A collection of my configuration files. Mainly intended for configuring Arch Linux and Neovim (Lua).
Lua
75
star
3

rust_algorithms

Small Rust exercises from FreeCodeCamp's JavaScript course for web developers and people familiar with JavaScript
Rust
17
star
4

hyprforest-installer

Everforest Theme Installer for Hyprland on Arch Linux
Rust
11
star
5

cses

CSES Problem Set Solutions in the Rust Programming Language
Rust
5
star
6

tailwind-crash-course

Simple enterprise landing page built with Tailwind CSS
CSS
2
star
7

3rfaan-personal-page

My personal page
JavaScript
2
star
8

mern-social-media-app

A social media app built with MERN stack and Socket.io technology for chat features
JavaScript
1
star
9

react-meme-generator

A simple Meme Generator built with React.
JavaScript
1
star
10

3rfaan

Config files for my GitHub profile.
1
star
11

react-testing-library

Using React Testing Library and Jest for testing and debugging purposes
JavaScript
1
star
12

mern-webshop

A webshop built with the MERN stack and Redux Toolkit.
JavaScript
1
star
13

nextjs-sanity-ecommerce

An E-Commerce webshop built with Functional React, NextJS and Sanity (CMS) with Stripe implementation
JavaScript
1
star
14

mongodb-mflix

Course M220JS (MongoDB for JavaScript developers) on MongoDB University building a Netflix clone
JavaScript
1
star
15

redux-toolkit-tutorial

Simple tutorial for Redux Toolkit building a shopping cart
JavaScript
1
star
16

nextjs-restaurant-app

A Pizza restaurant app built with NextJS, Mongoose, Firebase with PayPal payment integration.
JavaScript
1
star
17

socket.io-tutorial-chat-app

A chat app built with Socket.io for realtime and instant communication between users
JavaScript
1
star
18

nextjs-blog

Simple personal blog tutorial from the official NextJS, learning best practices with NextJS and TypeScript
TypeScript
1
star
19

JS

JavaScript
1
star
20

react-router-6-tutorial

Tutorial for the latest React Router version 6 using best-practice routing
JavaScript
1
star
21

react-search-input-tutorial

Learning the basics of processing instant search requests and rendering instant results in React
JavaScript
1
star