About
For those seeking documentation, the ArchWiki is the best resource available. In fact, it's so good that it can be a perfect trap for a curious mind. My goal here is to gather the information I find relevant for my own use case, allowing me to setup and maintain a simple and aesthetic Arch Linux Wayland environment while minimizing the chances of falling down a rabbit hole.
it's called "dotfiles" because that folder ".config" starts with a dot and is therefor hidden
and we customize these hidden text files for ~20 programs because we're neurotic lovers of beauty 🤷
-- from a Reddit user on r/unixporn
Components
The main building blocks, a.k.a packages1
System
- Boot Manager: rEFInd
- Dotfile Manager: Chezmoi
- Initramfs Generator: Booster
- UKI Generator: systemd-ukify
Desktop
- App Launcher: Fuzzel
- Wayland Compositor: Niri
- Display Manager: Ly
- Notification: Mako
- Screen Locker Swaylock
- Status Bar: Waybar
Theme
- Cursor: Breeze
- Fonts and Glyphs: FiraMono Nerd Font
- Gtk: Materia-dark
- Icons: Papirus
- Palette: Catppuccin Mocha
Terminal
Tools
Clients
- BitTorrent: Transmission
- Discord: WebCord
- Spotify: Ncspot
Utilities and Quality of Life
- Bat: Cat clone with syntax highlighting and git integration
- Bob: A version manager for neovim
- Bottom: A graphical process/system monitor
- Cava: Console-based Audio Visualizer for Alsa
- Delta: A syntax-highlighting pager for git, diff, grep, and blame output
- Eza: A modern replacement for ls (community fork of exa)
- Fastfetch: Like Neofetch, but much faster because written in C
- Fd: Simple, fast and user-friendly alternative to find
- Fzf: Command-line fuzzy finder
- Gitui: Blazing fast terminal-ui for git written in Rust
- Ripgrep: A search tool that combines the usability of ag with the raw speed of grep
- Yay: Yet another yogurt. Pacman wrapper and AUR helper written in go
- Zoxide: A smarter cd command for your terminal
For the exhaustive package list, you can check the packages.toml
Live USB
The steps to create a bootable USB containing the Arch Linux ISO.
Download the ISO
Download the ISO file from https://archlinux.org/download/.
Note: the BitTorrent Download is the recommended option and the file will look
like this archlinux-version-x86_64.iso.torrent
.
USB Drive Name
Find out the name of your USB drive:
ls -l /dev/disk/by-id/usb-*
To make sure it is not mounted, run lsblk
and search for the MOUNTPOINTS
column, you should see an empty space:
lsblk
Write the ISO
Write the ISO to the USB drive using pv
:
sudo pv path/to/archlinux-version-x86_64.iso -Yo /dev/disk/by-id/usb-My_flash_drive-0:0
Note: the USB drive name should look something like
/dev/disk/by-id/usb-SanDisk_Cruzer_Blade_4C530000100920118104-0:0
.
Make sure to not append any partition number like My_flash_drive-0:0-part1
.
For more information about this topic, check the Arch Linux wiki
Live Environment
Console Configuration
Font
First of all, improve the default font size using setfont
:
setfont ter-222b
Keyboard
To change the default keyboard layout:
# for example, to set a brazilian keyboard layout
loadkeys br-abnt2
Some Verification
UEFI Mode
To make sure the system is booted in UEFI mode, check the output of the
following command. It should return 64
, for a 64-bit system:
cat /sys/firmware/efi/fw_platform_size
Internet Connection
To check the internet connection:
ping archlinux.org
System Clock
To ensure the system clock is synchronized, run:
timedatectl
Partitions
Partitioning the Disk
Device Identification
To identify available disks, the fdisk -l
command will give you all the
necessary information, but lsblk
can also be used. My favorite flags are
lsblk -o NAME,SIZE
for a concise output and lsblk --fs
when I need to check
file system information.
Otherwise, the following steps may result in unintended data loss.
Optimal Logical Sector Size (exclusive for NVMe devices)
To check the formatted logical block address (LBA) size of your NVMe drive:
nvme id-ns -H /dev/nvme0n1 | grep "Relative Performance"
LBA Format 0 : Metadata Size: 0 bytes - Data Size: 512 bytes - Relative Performance: 0x2 Good (in use)
LBA Format 1 : Metadata Size: 0 bytes - Data Size: 4096 bytes - Relative Performance: 0x1 Better
You can confirm it by running lsblk -td
and looking at the LOG-SEC
column value.
Note: On the example above the sector size in use (512 bytes) is not the optimal one.
To change the logical block address size, you can use the nvme format
command
specifying the preferred value with the --lbaf
parameter:
nvme format --lbaf=1 /dev/nvme0n1
Partition Tables
To write the partition tables using cfdisk
:
cfdisk /dev/the_disk_to_be_partitioned
Example Layout:
Mount point | Purpose | Suggested size | Partition type |
---|---|---|---|
/efi | efi | 1 GiB | EFI System |
[SWAP] | swap | 8 GiB | Linux filesystem |
/ | root | Remainder | Linux filesystem |
To verify the partitions using fdisk
:
fdisk -l /dev/partitioned_disk
Formatting Partitions
To create an Ext4 file system for the root:
mkfs.ext4 /dev/root_partition
To initialize the swap partition:
mkswap /dev/swap_partition
To format the EFI partition:
mkfs.fat -F 32 /dev/efi_system_partition
Filesystem Label
Now is a good time to add a label to the efi partition.
This will be useful later to set the rEFInd
configuration.
Using dosfslabel
:
dosfslabel /dev/efi_system_partition ARCHIE
You can verify it using lsblk
:
lsblk -o NAME,LABEL
Mounting the File Systems
Mount the root volume to /mnt
:
mount /dev/root_partition /mnt
Mount the EFI partition:
mount --mkdir /dev/efi_system_partition /mnt/efi
Enable the swap
volume:
swapon /dev/swap_partition
Installation
Mirror List
To update the mirrorlist
using reflector
:
reflector --protocol https --verbose --latest 25 --sort rate --save /etc/pacman.d/mirrorlist
Install Essential Packages
To install the essential packages to the new root:
pacstrap -K /mnt base linux linux-firmware base-devel git nano networkmanager
Fstab
To generate an fstab
file:
genfstab -U /mnt >> /mnt/etc/fstab
Chroot
To change root into the new system:
arch-chroot /mnt
Time
To set the time zone:
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
Note: You can verify it using the command date
:
date
To generate the /etc/adjtime
file:
hwclock --systohc
To set up time synchronization with systemd-timesyncd
:
systemctl enable systemd-timesyncd.service
Localization
Uncomment the #en_US.UTF-8 UTF-8
line editing the /etc/locale.gen
file:
nano /etc/locale.gen
To generate the locales:
locale-gen
Create the locale.conf
file, setting the LANG variable accordingly:
nano /etc/locale.conf
LANG=en_US.UTF-8
Hostname
To set a hostname create a hostname
file, adding its name, e.g. desktop:
nano /etc/hostname
desktop
Root password
To set the root password, run:
passwd
Creating New User
To create new user, adding it to the wheel
group:
useradd -m -G wheel username
To add a password to the user, run:
passwd username
Edit the sudoers configuration file, uncommenting the # %wheel ALL=(ALL:ALL) ALL
line:
EDITOR=nano visudo
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
Enable Network
To enable NetworkManager
service:
systemctl enable NetworkManager
Boot Loader
Install systemd-boot
bootctl install
Edit the /efi/loader/loader.conf
file:
nano /efi/loader/loader.conf
default arch.conf
timeout 4
console-mode auto
Create the /efi/loader/entries/arch.conf
file:
nano /efi/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
To make it easy to set the UUID you can use the blkid
command and append the
output to the arch.conf
file.
blkid -s UUID /dev/root_partition >> /efi/loader/entries/arch.conf
Copy everything that is inside the /boot
path to /efi
.
Reboot
To exit the chroot environment:
exit
To unmount all the partitions and reboot:
umount -R /mnt
reboot
That's it. Good luck!
By the Way
If you have succeeded, there's one last thing to be done.
First download fastfetch
:
sudo pacman -S fastfetch
Now run it and enjoy your new achievement:
fastfetch
Note: jokes aside, this last step is a simple and efficient way to verify your installation.
Pos-Installation
Double Checking
To check the timesyncd
service, run:
timedatectl status
To refresh the entire system:
sudo pacman -Syyu
Make sure to have some basic system packages installed:
sudo pacman -S --needed base-devel bash curl gcc git ncurses xz zstd
Installing Some Compilers
Install clang
:
sudo pacman -S clang
Install go
:
sudo pacman -S go
Install lua
:
sudo pacman -S lua
Install rustup
:
sudo pacman -S rustup
rustup update stable
Graphic Drivers
OpenGL
Install mesa
:
sudo pacman -S mesa
AMD
For Vulkan support:
sudo pacman -S vulkan-radeon
Nvidia
Install the nvidia
package:
sudo pacman -S nvidia
UKI
Busybox
Install busybox
to enable an emergency shell in case of a panic during the
boot process:
sudo pacman -S busybox
Microcode
Install amd-ucode
or intel-ucode
according with your CPU.
sudo pacman -S amd-ucode
sudo pacman -S intel-ucode
Booster
Install booster
:
sudo pacman -S booster
Set the configuration file accordingly:
sudo nano /etc/booster.yaml
extra_files: busybox,fsck,fsck.ext4
modules_force_load: amdgpu,hid_generic,usbhid
Note: the modules_force_load: amdgpu,hid_generic,usbhid
line is not obligatory.
For NVIDIA
you can replace amdgpu
with the following:
modules_force_load: nvidia,nvidia_modeset,nvidia_uvm,nvidia_drm
Ukify
Install systemd-ukify
:
sudo pacman -S systemd-ukify
Set the configuration accordingly:
sudo nano /etc/ukify.conf
[UKI]
Linux=/boot/vmlinuz-linux
Initrd=/boot/amd-ucode.img /boot/booster-linux.img
Cmdline=@/etc/kernel/cmdline
OSRelease=@/etc/os-release
Splash=/usr/share/systemd/bootctl/splash-arch.bmp
Note: probably this configuration isn't required because it will be replaced by
the kernel-install
one.
Kernel-install
Set the install.conf
file:
sudo nano /etc/kernel/install.conf
layout=uki
uki_generator=ukify
Set the ukify
configuration in the uki.conf
file:
sudo nano /etc/kernel/uki.conf
[UKI]
Linux=/boot/vmlinuz-linux
Initrd=/boot/amd-ucode.img /boot/booster-linux.img
Cmdline=@/etc/kernel/cmdline
OSRelease=@/etc/os-release
Splash=/usr/share/systemd/bootctl/splash-arch.bmp
To verify the current kernel-install
paths and parameters configuration, run:
kernel-install inspect
Kernel Command Line
To check the parameters your system was booted up with, run:
cat /proc/cmdline
To include new kernel parameters to the UKI
, for example nvme_load=YES
, nowatchdog
, quiet
, splash
, etc. use the /etc/kernel/cmdline
file:
sudo nano /etc/kernel/cmdline
rEFInd
Install refind
package:
sudo pacman -S refind
Install it with the refind-install
script:
refind-install
Note: for comfort I will use the su
command that launches an interactive shell
as root.
To add the catppuccin theme, create a
themes
directory inside refind installation path:
cd /efi/EFI/refind
mkdir themes
Clone the repo inside the themes
folder:
cd themes
git clone https://github.com/catppuccin/refind.git catppuccin
It requires a include themes/catppuccin/mocha.conf
line to be appended to the
end of refind.conf
file.
To go back to the refind
directory:
cd /efi/EFI/refind
We can now customize the refind.conf
by adding a new menuentry
for the
systemd-boot
boot loader. Although it might seem a bit contradictory to use
rEFInd to launch systemd-boot, rEFInd's role here is to provide a simple and
customizable interface that can handle a dual-boot scenario for different
available distros.
nano refind.conf
menuentry "Arch Linux" {
icon /EFI/refind/themes/catppuccin/assets/mocha/icons/os_arch.png
volume "ARCHIE"
loader /EFI/systemd/systemd-bootx64.efi
}
include themes/catppuccin/mocha.conf
Note the catppuccin theme being included in the last line.
For more info, check rEFInd official documentation
To exit the interactive shell simply run exit
.
Package Manager
Pacman
Update pacman
configuration file:
sudo nano /etc/pacman.conf
# Misc options
#UseSyslog
Color
ILoveCandy
#NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
An example can be found on EndeavourOS repo
Yay
First, create and cd
into an apps
directory:
mkdir apps && cd apps
To install yay
:
git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si
Additional Pacman Hooks
Install extra pacman hooks for the kernel-install
:
yay -S pacman-hook-kernel-install
Pacman Utilities
Install the pacman-contrib
package:
sudo pacman -S pacman-contrib
Enable the paccache.timer
to periodically clean the pacman
cache:
systemctl enable paccache.timer
Generating the UKI
Reinstall the kernel package to trigger the kernel-install
in order to
generate the unified kernel image:
sudo pacman -S linux
To list the current available boot entries which have been configured, run:
sudo bootctl list
If everything seems correct, reboot the system:
reboot
Home Sweet Home
Bootstrap
To install chezmoi
:
sudo pacman -S chezmoi
To initialize it:
chezmoi init https://github.com/<user>/dotfiles.git
To apply it:
chezmoi apply
Note: a lot of packages will be installed. Probably would be a good idea to reboot the system after it.
For the exhaustive list of packages, you can check the packages.toml file from the repo.
Hint: A good reference for essential packages is to check the ones available in the Arch Linux live system (ISO). You can find them here. Another good source is to check the packages available in the EndeavourOS ISO. You can find them in their repo.
Graphical Interface
To launch niri
from the tty
:
niri-session
Shell
To check if Nushell is in the valid shells list:
cat /etc/shells
To set Nushell as login shell:
chsh -s /usr/bin/nu <user>
Note: Reboot the system to check if everything is ok
Font
To refresh the font cache:
sudo fc-cache -fv
SSH
To generate a new SSH key:
ssh-keygen -t ed25519 -C "your_email@example.com"
To check the public key:
cat ~/.ssh/id_ed25519.pub
To test the SSH connection:
ssh -T git@github.com
Neovim
To install and set Neovim nightly using bob
:
bob install nightly
sudo bob use nightly
To increase the maximum number of inotify
watches and queued events. Edit the
/etc/sysctl.conf
file:
sudo nano /etc/sysctl.conf
fs.inotify.max_queued_events=524288
fs.inotify.max_user_watches=524288
Pandoc
Download Pandoc
latest release from the
repo
To install it:
sudo tar xvzf /path/to/pandoc-version-linux-amd64.tar.gz --strip-components 1 -C /usr/local
Display Manager
To enable the ly
service:
systemctl enable ly
To edit ly
default configuration:
sudo nano /etc/ly/config.ini
Reboot the system (I'm neurotic):
reboot
# there's no place like home
Finishing
Catppuccin
Bat
To include the new syntax highlighting theme, rebuild bat's cache:
bat cache --build
To check if the Catppuccin theme is now available:
# the output should be Catppuccin Mocha
bat --list-themes | rg "Catppuccin"
Firefox
To apply Catppuccin Mocha Mauve color theme to firefox simply click here
Neovim
To fetch Neovim configuration, simply launch it:
nvim
To include the api-key for the WakaTime plugin:
# launch the website and copy the api key
start https://wakatime.com/api-key
# run the following cmd inside neovim and paste the key
WakaTimeApiKey
Yazi
To fetch the plugins using Yazi package manager:
ya pack -i
ya pack -u
Note: This will install and update the plugins according to the
yazi/package.toml
file.
Dev Stuff
Rust
Toolchains
To install the nightly
channel:
rustup toolchain install nightly
To check the installed toolchains:
rustup toolchain list
Targets
To include support for the Wasm
target:
rustup target add wasm32-unknown-unknown
To check the installed targets:
rustup target list --installed
Fly.io
Update the DNS
To get the list of the current active profiles:
nmcli connection show --active
To check the current DNS values
nmcli connection show 'NAME' | rg dns
To update the DNS:
nmcli connection modify 'NAME' ipv4.dns "8.8.8.8 1.1.1.1"
To reconnect:
nmcli connection down 'NAME'
nmcli connection up 'NAME'
flyctl
To installing flyctl
:
curl -L https://fly.io/install.sh | sh
To sign in using flyctl
:
fly auth login
Miscellaneous
Profile-sync-daemon
To generate the configuration file and check the current status:
psd preview
To edit the sudoers adding the necessary rights
sudo visudo
<username> ALL=(ALL) NOPASSWD: /usr/bin/psd-overlay-helper
To edit the psd.conf configuration file:
sudo nvim .config/psd/psd.conf
# Uncomment and set to "yes" to use overlayfs instead of a full copy to reduce
# the memory costs and to improve sync/unsync operations. Note that your kernel
# MUST have this module available in order to use this mode.
#
USE_OVERLAYFS="yes"
#
BROWSERS=(firefox)
To enable the psd service:
systemctl --user enable psd.service
NetworkManager
Wi-Fi Connection
To get the list of available Wi-Fi networks
nmcli device wifi list
To connect to a Wi-Fi
nmcli device wifi connect <SSID_or_BSSID> password <password>
Update the DNS
To get the list of the current active profiles:
nmcli connection show --active
To check the current DNS values
nmcli connection show 'NAME' | rg dns
To update the DNS:
nmcli connection modify 'NAME' ipv4.dns "8.8.8.8 1.1.1.1"
To reconnect:
nmcli connection down 'NAME'
nmcli connection up 'NAME'
Tlp
To enable the service:
systemctl enable tlp.service
To mask the rfkill:
systemctl mask systemd-rfkill.service
systemctl mask systemd-rfkill.socket
Virtual Machine
To check if virtualization is enabled:
grep -Ec '(vmx|svm)' /proc/cpuinfo
To install necessary packages:
sudo pacman -Syu virt-manager qemu-desktop dnsmasq iptables-nft
To enable libvirtd service:
sudo systemctl enable --now libvirtd.service
To add the user to the libvirt group:
sudo usermod -aG libvirt $env.USER
To restart the libvirtd service:
systemctl restart libvirtd.service
Live USB
- Download the ISO file from the Arch Linux website
-
Find the USB drive name:
ls -l /dev/disk/by-id/usb-*
-
Make sure it is not mounted:
lsblk
- Write the ISO to the USB drive:
sudo pv path/to/archlinux-version-x86_64.iso -Yo /dev/disk/by-id/usb-My_flash_drive-0:0
Live Environment
Console Configuration
-
Improve the default font size:
setfont ter-222b
- Change the default keyboard layout, if necessary:
# for example, to set a brazilian keyboard layout
loadkeys br-abnt2
- Make sure the system is booted in UEFI mode:
# the output should be 64 for 64-bit system
cat /sys/firmware/efi/fw_platform_size
-
Check the internet connection:
ping archlinux.org
-
Ensure the system clock is synchronized:
timedatectl
Partitions
Partitioning the Disk
-
Identify available disks:
lsblk -o NAME,SIZE
- Create the partitions:
cfdisk /dev/the_disk_to_be_partitioned
Purpose | Suggested size | Partition type | Mount point |
---|---|---|---|
efi | 1 GiB | EFI System | /efi |
swap | 8 GiB | Linux filesystem | [SWAP] |
root | Remainder | Linux filesystem | / |
-
Verify the partitions:
fdisk -l /dev/partitioned_disk
Formatting the Partitions
-
Create an Ext4 fs for the root:
mkfs.ext4 /dev/root_partition
-
Initialize the swap:
mkswap /dev/swap_partition
-
Format the efi to FAT32:
mkfs.fat -F 32 /dev/efi_system_partition
- Add a label to the efi partition:
dosfslabel /dev/efi_system_partition ARCHIE
-
Verify the result:
lsblk /dev/partioned_disk -o NAME,FSTYPE,LABEL
Mounting the File System
-
Mount the root partition to /mnt:
mount /dev/root_partition /mnt
-
Mount the efi partition to /mnt/efi:
mount --mkdir /dev/efi_system_partition /mnt/efi
-
Enable the swap:
swapon /dev/swap_partition
Installation
- Update the mirrorlist:
reflector --protocol https --verbose --latest 25 --sort rate --save /etc/pacman.d/mirrorlist
- Install the essential packages to the new root:
pacstrap -K /mnt base linux linux-firmware base-devel git nano networkmanager
Configuring the System
-
Generate an fstab file:
genfstab -U /mnt >> /mnt/etc/fstab
-
Change root into the new system:
arch-chroot /mnt
-
Set the time zone:
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
-
Verify the new local time:
date
-
Generate the /etc/adjtime:
hwclock --systohc
- Set up time synchronization:
systemctl enable systemd-timesyncd.service
- Edit the locale.gen file:
nano /etc/locale.gen
# Uncomment this line
en_US.UTF-8 UTF-8
-
Generate the locales:
locale-gen
- Create the locale.conf file, setting the LANG variable accordingly:
nano /etc/locale.conf
LANG=en_US.UTF-8
- Create the hostname file:
nano /etc/hostname
desktop
-
Set the root password:
passwd
Creating New User
- Create new user, adding it to the wheel group:
useradd -m -G wheel <username>
-
Add a password to the user:
passwd <username>
- Edit the sudoers configuration file:
EDITOR=nano visudo
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
Set the Boot Loader
-
Install systemd-boot:
bootctl install
- Edit the loader.conf file:
nano /efi/loader/loader.conf
default arch.conf
timeout 4
console-mode auto
- Create the arch.conf entry:
nano /efi/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rw
- Append the UUID number:
blkid -s UUID /dev/root_partition >> /efi/loader/entries/arch.conf
- Copy everything that is inside /boot to /efi directory:
cd /efi
cp /boot/* .
-
Enable the NetworkManager service:
systemctl enable NetworkManager
Finishing
-
Exit the chroot environment:
exit
-
Unmount all the partitions:
umount -R /mnt
-
Reboot:
reboot
# good luck!
Verifying the Installation
-
Download fastfetch:
sudo pacman -S fastfetch
-
Run it:
fastfetch
# enjoy your new achievement!
Pos-Installation
Double Checking
# sorry I'm neurotic
-
Check the timesyncd service:
timedatectl status
-
Refresh the system, including the package database:
sudo pacman -Syyu
- Make sure some basic system packages are installed:
sudo pacman -S --needed base-devel bash curl gcc git ncurses xz zstd
Installing Some Compilers
-
clang:
sudo pacman -S clang
-
go:
sudo pacman -S go
-
lua:
sudo pacman -S lua
- rustup:
sudo pacman -S rustup
rustup update stable
Graphic Drivers
OpenGL
- Install mesa:
sudo pacman -S mesa
AMD
- For Vulkan support:
sudo pacman -S vulkan-radeon
Nvidia
- Install the nvidia package:
sudo pacman -S nvidia
UKI
Busybox
- Install busybox:
sudo pacman -S busybox
Microcode
- Install amd-ucode or intel-ucode according with your CPU.
sudo pacman -S amd-ucode
sudo pacman -S intel-ucode
Booster
- Install booster:
sudo pacman -S booster
- Set the configuration file accordingly:
sudo nano /etc/booster.yaml
extra_files: busybox,fsck,fsck.ext4
modules_force_load: amdgpu,hid_generic,usbhid
- For NVIDIA you can replace amdgpu with the following:
modules_force_load: nvidia,nvidia_modeset,nvidia_uvm,nvidia_drm
Ukify
- Install systemd-ukify:
sudo pacman -S systemd-ukify
- Set the configuration accordingly:
sudo nano /etc/ukify.conf
[UKI]
Linux=/boot/vmlinuz-linux
Initrd=/boot/amd-ucode.img /boot/booster-linux.img
Cmdline=@/etc/kernel/cmdline
OSRelease=@/etc/os-release
Splash=/usr/share/systemd/bootctl/splash-arch.bmp
Kernel-install
- Set the install.conf file:
sudo nano /etc/kernel/install.conf
layout=uki
uki_generator=ukify
- Set the ukify configuration:
sudo nano /etc/kernel/uki.conf
[UKI]
Linux=/boot/vmlinuz-linux
Initrd=/boot/amd-ucode.img /boot/booster-linux.img
Cmdline=@/etc/kernel/cmdline
OSRelease=@/etc/os-release
Splash=/usr/share/systemd/bootctl/splash-arch.bmp
- Verify the current kernel-install configuration:
kernel-install inspect
Kernel Command Line
- Check the parameters your system was booted up with:
cat /proc/cmdline
- Include new kernel parameters to the UKI:
sudo nano /etc/kernel/cmdline
rEFInd
-
Install refind package:
sudo pacman -S refind
-
Install it with the refind-install script:
refind-install
-
Start an interactive shell as root:
su
- Create the themes directory inside refind installation path:
cd /efi/EFI/refind
mkdir themes
- Clone the catppuccin repo inside the themes directory:
cd themes
git clone https://github.com/catppuccin/refind.git catppuccin
- Go back to the refind directory:
cd /efi/EFI/refind
- Edit the refind.conf, adding a new menuentry for the systemd-boot and also including the mocha.conf file:
nano refind.conf
menuentry "Arch Linux" {
icon /EFI/refind/themes/catppuccin/assets/mocha/icons/os_arch.png
volume "ARCHIE"
loader /EFI/systemd/systemd-bootx64.efi
}
include themes/catppuccin/mocha.conf
-
Exit the interactive shell:
exit
Package Manager
Pacman
- Update pacman configuration file:
sudo nano /etc/pacman.conf
# Misc options
#UseSyslog
Color
ILoveCandy
#NoProgressBar
#CheckSpace
VerbosePkgLists
ParallelDownloads = 5
Yay
- Create and cd into the apps directory:
mkdir apps && cd apps
- Install yay:
git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si
# I'm not sure about this one
yay -Y --gendb
Additional Pacman Hooks
Install extra pacman hooks for the kernel-install
:
yay -S pacman-hook-kernel-install
Generating the UKI
- Reinstall the kernel package to generate the unified kernel image:
sudo pacman -S linux
- Check the current available boot entries:
sudo bootctl list
If everything seems correct, reboot the system: reboot
Home Sweet Home
Bootstrap
-
Install chezmoi:
sudo pacman -S chezmoi
- Initialize it:
chezmoi init https://github.com/<user>/dotfiles.git
-
Apply the changes:
chezmoi apply
-
Reboot the system:
reboot
Not Far From Home
- Refresh the font cache:
sudo fc-cache -fv
-
Launch niri from the tty:
niri-session
-
Check if Nushell is in the valid shells list:
cat /etc/shells
- Set Nushell as login shell:
chsh -s /usr/bin/nu <user>
SSH
- Generate a new SSH key:
ssh-keygen -t ed25519 -C "your_email@example.com"
- Check the public key:
cat ~/.ssh/id_ed25519.pub
- Test the SSH connection:
ssh -T git@github.com
Neovim
- Install and set Neovim nightly using bob:
bob install nightly
sudo bob use nightly
- Increase inotify maximum numbers:
sudo nano /etc/sysctl.conf
fs.inotify.max_queued_events=524288
fs.inotify.max_user_watches=524288
Pandoc
- Download and install Pandoc latest release
sudo tar xvzf /path/to/pandoc-version-linux-amd64.tar.gz --strip-components 1 -C /usr/local
Display Manager
-
Enable the ly service:
systemctl enable ly
Reboot the system: reboot
# there's no place like home
Finishing
Catppuccin
-
Rebuild bat's cache to add the new syntax highlighting:
bat cache --build
- Check if Catppuccin is available:
bat --list-themes | rg "Catppuccin"
- Apply Catppuccin Mocha Mauve color theme to firefox: simply click here
Neovim
-
Launch Neovim to fetch its configuration:
nvim
- Include the api-key for WakaTime plugin:
# launch the website and copy the api key
start https://wakatime.com/api-key
# run the following cmd inside neovim and paste the key
WakaTimeApiKey
Yazi
- Fetch the plugins using Yazi package manager:
ya pack -i
ya pack -u
Dev Stuff
Rust
- Install the nightly channel:
rustup toolchain install nightly
- Include support for the Wasm target:
rustup target add wasm32-unknown-unknown
- Check the installation:
rustup toolchain list
rustup target list --installed
Miscellaneous
Profile-sync-daemon
- Generate the configuration file and check the current status:
psd preview
- Edit the sudoers adding the necessary rights
sudo visudo
<username> ALL=(ALL) NOPASSWD: /usr/bin/psd-overlay-helper
- Edit the psd.conf configuration file:
sudo nvim .config/psd/psd.conf
# Uncomment and set to "yes" to use overlayfs instead of a full copy to reduce
# the memory costs and to improve sync/unsync operations. Note that your kernel
# MUST have this module available in order to use this mode.
#
USE_OVERLAYFS="yes"
#
BROWSERS=(firefox)
- Enable the psd service:
systemctl --user enable psd.service
NetworkManager
Wi-Fi Connection
- Get the list of available Wi-Fi networks
nmcli device wifi list
- Connect to a Wi-Fi
nmcli device wifi connect <SSID_or_BSSID> password <password>
Update the DNS
- Get the list of the current active profiles:
nmcli connection show --active
- Check the current DNS values
nmcli connection show 'NAME' | rg dns
- Update the DNS:
nmcli connection modify 'NAME' ipv4.dns "8.8.8.8 1.1.1.1"
- Reconnect:
nmcli connection down 'NAME'
nmcli connection up 'NAME'
Tlp
- Enable the service:
systemctl enable tlp.service
- Mask the rfkill:
systemctl mask systemd-rfkill.service
systemctl mask systemd-rfkill.socket
Virtual Machine
- Check if virtualization is enabled:
grep -Ec '(vmx|svm)' /proc/cpuinfo
- Install necessary packages:
sudo pacman -Syu virt-manager qemu-desktop dnsmasq iptables-nft
- Enable libvirtd service:
sudo systemctl enable --now libvirtd.service
- Adding the user to the libvirt group:
sudo usermod -aG libvirt $env.USER
- Restarting the libvirtd service:
systemctl restart libvirtd.service
System Maintenance
- Update the mirrorlist:
sudo reflector --protocol https --verbose --latest 25 --sort rate --save /etc/pacman.d/mirrorlist
- Refresh the entire system:
yay -Syyu
# work in progress