Now that you have a new Arch Linux system, we will now start performing customizations in it.
Setting Up Paru and Pacman (again)
Installing An AUR Helper
Install Paru. This is the AUR helper that we will use.
# Install the latest stable version of Rustsudo pacman -S --needed rustuprustup toolchain install stable# Clone the repo in a temp directory.export PARU_TMP_DIR=$(mktemp -d)git clone https://aur.archlinux.org/paru.git "${PARU_TMP_DIR}/paru"# build and install paru.cd "${PARU_TMP_DIR}/paru"makepkg -si# Go back home and remove the created temp directory.cd ~rm -rf $PARU_TMP_DIRunset $PARU_TMP_DIR
Hooks and Helpers
Since we have Paru now, we can configure Pacman more now. Hooks are scripts that are executed automatically at certain points during the package management process. Create the /etc/pacman.d/hooks directory by running the following command:
sudo mkdir -p /etc/pacman.d/hooks
In the newly-created directory, create a new file named orphans.hook and paste the following:
informant makes sure that you are aware of breaking changes in the updates that you’ll get. overdue lists daemons that reference outdated libraries. pacman-cleanup-hook keeps your pacman cache clean. rebuild-detector detects which Arch Linux packages need to be rebuilt. downgrade, while isn’t a pacman hook, will still help you in case you have to downgrade a package.
The dotfiles are configured to manipulate audio and video via PipeWire as well. It is not recommended to not use PipeWire, because you will have to change a lot of scripts.
I also install required Bluetooth drivers in this part, if necessary. For example, my laptop has Broadcom devices, so I also install broadcom-bt-firmware from the AUR via paru.
Printer Support
These are needed to enable printing in our machine.
I use my machine for software development so I install compilers and interpreters on my system.
# Install development toolsparu -S \ gcc go nvm \ dotnet-sdk jdk-openjdk \ php composer \ python python-pip python-uv \ android-tools android-udev# Add user to adbusers group so that you can actually use itsudo usermod -aG adbusers "$(whoami)"# Install latest version of NodeJS and NPM via NVMsource /usr/share/nvm/init-nvm.shnvm install node# Install Jupyterlab as a uv tooluv tool install jupyterlab# Other useful stuffuv tool install howdoiuv tool install magika
Flatpak Support
I use many Flatpak applications, so installing it is a must for me.
paru -S flatpak
Containers Support
I use Podman instead of Docker to manage and use containers.
paru -S podman podman-compose podman-docker
Must-Have Programs
These are packages that I always keep in my machine installed. Some of these packages, such as btop, socat, and jq are also required by the customization steps below.
Hyprland will be our tiling compositor. I chose this over other DEs/WMs because it is easy to configure, has beautiful animations, and I really like its dynamic tiling. To start, install Hyprland and the components that make up the desktop by running the following command:
If you ever need help, Hyprland has their own wiki, so read it!
To start customizing Hyprland, just copy the necessary dotfiles to ~/.config/ and start required services. Running Hyprland at this time is not yet recommended since we haven’t customized the rest of the programs yet.
Also copy your desired background image to ~/.config/background.
cp "~/Temp/ArchLinuxDotfiles/assets/wallpapers/<your desired wallpaper>" ~/.config/background# I personally use `evening-sky.png` as my wallpaper.
Now, Hyprland’s configuration files are in place, but we still need to configure
the rest of the system for it to function properly.
If you are having problems with Hyprland, see their wiki.
Setting Up The Display Manager
SDDM will be the display manager that our setup will use. It will be your
“login screen”. Install and enable the SDDM service to start the display
manager on boot.
After installing the bare minimum requirements to run the setup, go ahead and type reboot to restart the system. You will be greeted by SDDM. Log in with your credentials and press SUPER+SHIFT+T to open a new terminal. You can now continue following the guide.
Neovim is the best text editor and IDE on Linux btw (fight me). If I installed the packages from the Development Tools section, might as well use Neovim to write code. We’ll have to install some packages that are required by the plugins first.
paru -S neovim tree-sitter tree-sitter-cli# Customize Neovim using my Neovim dotfilesbash <(curl -sSf https://raw.githubusercontent.com/Chris1320/SetupGuides-Neovim/main/install)
Setting Up GPG and SSH
If you have an existing GPG and SSH keys, you can now start restoring them to your new system.
Using GNOME Keyring as Secrets Manager
Edit ~/.gnupg/gpg-agent.conf and insert the following line to use GNOME 3 pinentry when asking for GPG password:
pinentry-program /usr/bin/pinentry-gnome3
Run the following commands to use GNOME Keyring for SSH authentication.
Next, edit the key and trust it ultimately. You’ll have to get the key ID first.
# List secret keys and show their key IDs.gpg --list-secret-keys --keyid-format=SHORT# Edit the keygpg --edit-key <THE KEY ID># gpg> trust# ...# Your decision? 5# Do you really want to set this key to ultimate trust? (y/N) y# gpg> quit
Importing Your SSH keys
Copy your private and public keys to ~/.ssh, and adjust the permissions.
# Create ~/.ssh if it does not exist.mkdir -p ~/.ssh# Copy the public and private keys to the newly-created directory.# Example 1: ED25519 keyscp ~/Downloads/your_ed25519_ssh_key ~/.ssh/id_ed25519cp ~/Downloads/your_ed25519_ssh_key.pub ~/.ssh/id_ed25519.pub# Example 2: RSA keyscp ~/Downloads/your_rsa_ssh_key ~/.ssh/id_rsacp ~/Downloads/your_rsa_ssh_key.pub ~/.ssh/id_rsa.pub# Adjust permissionschmod 600 ~/.ssh/*chmod 700 ~/.ssh
Configuring SSH
You can also add a host configuration block in ~/.ssh/config so that you can clone repositories using a shorter command.
Host gh HostName github.com User git IdentityFile ~/.ssh/id_ed25519
If you add this line, all you have to do when cloning GitHub repositories is to
run git clone gh:username/repo.git. Make sure that you’ve set up your GitHub
account correctly first.
You can test your setup by running the command
ssh -T gh
It should print out something like this:
Hi Chris1320! You've successfully authenticated, but GitHub does not provide shell access.
Setting Up Git
I always sign-off my git commits so I have commit.gpgsign set to true. I also have a couple aliases on hand for my most-used commands. Also, I use GitHub CLI to manage my GitHub repositories.
There two versions of the Mpv configuration file: one for high-end devices and the other for low-end machines. If your device can handle high CPU/GPU usage for better playback quality, copy the profile-high directory to ~/.config/mpv; otherwise, copy the profile-low directory.
cp -r ~/Temp/SGDotfiles/mpv/profile-high ~/.config/mpv # For high-end devicescp -r ~/Temp/SGDotfiles/mpv/profile-low ~/.config/mpv # For low-end devices
With Mpv, I am using tomasklaen’s uosc config together with these plugins:
po5/evafast: Mpv script for hybrid fast-forward and seeking.
rofe33/mpv-copyStuff: Copy to clipboard the filename, full filename path, relative filename path, current video time, current displayed subtitle text, video duration/metadata.
po5/thumbfast: High-performance on-the-fly thumbnailer script for mpv.
paru -S everforest-gtk-theme-git gtk-engine-murrine stylepak-git# Install system and user themes to Flatpakstylepak install-systemstylepak install-user
Using Hyprcursors
Hyprland introduced a new cursor theme format, called Hyprcursor. It is supposed to be a more efficient and faster cursor theme format. The Catppuccin cursors are already set up in Hyprland’s config file, so we just need to update gsettings with the appropriate settings.
Run the following script and select/enter your preferred cursor and cursor size (I use the defaults).
~/.config/scripts/set-cursor.sh
Input Methods
As of writing this, I am learning Japanese and Korean for 5 and 4 years, respectively. (I’m still not good at both btw) Because of this, I need Fcitx5 to allow me to use the Japanese and Korean input methods in Arch Linux.
paru -S fcitx5-im fcitx5-mozc-ut fcitx5-hangul
After installing the packages, run the following commands to create the configuration files with their corresponding contents:
After that, run fcitx5-configtool and uncheck “Only Show Current Language”. Search for the following input methods and move them to the left “Current Input Method” column:
Mozc
Hangul
Go to “Global Options” tab and change the first entry of “Trigger Input Method” (should be initially set to Control+Space) to Super+, so that they won’t conflict with Hyprland’s keybindings.
I don’t play many games on my laptop since I have my desktop computer. I get my games either from Steam or GOG, use MangoHud for performance monitoring, and Bottles for running Windows applications.
We will use Snapper to create snapshots and Btrfs Assistant as the frontend. snap-pac is installed to create Btrfs snapshots before and after Pacman operations.
paru -S snapper snap-pac btrfs-assistant inotify-tools# Temporarily unmount `/.snapshots` to let snapper create the configsudo umount /.snapshotssudo rm -r /.snapshotssudo snapper -c root create-config /sudo btrfs subvolume delete /.snapshotssudo mount --mkdir -o noatime,compress-force=zstd:3,subvol=@snapshots /dev/sda4 /.snapshots # use the same options you used from Manual Customization guidecat /etc/fstabsystemctl enable snapper-boot.timer
To automatically update the GRUB menu with the latest snapper snapshots, run the following command to enable the needed service:
systemctl enable grub-btrfsd.service
Edit /etc/default/grub-btrfs/config. Uncomment/comment lines if needed.
Save the file and update GRUB’s configuration by running:
sudo grub-mkconfig -o /boot/grub/grub.cfg
You can now remove the cloned repository.
cd ~ && rm -rf ~/Temp/grub
If you are having problems with theming GRUB, you can read the FAQs section in catppuccin/grub.
Final Touches
I use LocalSend to transfer any files between my devices within the local network and GNOME Text Editor because for some reason Neovim doesn’t work properly when set as the default text editor. GNOME Disk Utility is used as a GUI front-end for disk management stuff.
paru -S cava gedit gnome-disk-utility localsend-bin imhex-bincp -r ~/Temp/SGDotfiles/cava ~/.config/cava# Ensure that GNOME Text Editor does not add newlines at the end of filesgsettings set org.gnome.gedit.preferences.editor ensure-trailing-newline false# Authenticate GitHub CLIgh auth login
Sometimes, there are things that I cannot do on Neovim, such as Live Share/Pair Programming with classmates on coding sessions. Because of this, I have to use Visual Studio Code. I use the Flatpak version because it’s what I use on my Fedora Workstation system.
flatpak install flathub com.visualstudio.code
Mod Discord and Spotify
flatpak install flathub com.discordapp.Discord# Install Vencord (https://vencord.dev/)# Run two times to install OpenAsar and Vencordsh -c "$(curl -sS https://raw.githubusercontent.com/Vendicated/VencordInstaller/main/install.sh)"