Customization
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.
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:
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.
Downloading the Dotfiles
Clone the Chris1320/SetupGuides-dotfiles and Chris1320/SetupGuides-ArchLinux repositories.
Installing Essential Packages
Install these packages to ensure that the system will work properly.
If you have an SSD, enable TRIM:
Audio and Video
PipeWire is now superseding PulseAudio when it comes to handling audio and video streams on Linux systems. We are going to install it on our system.
Regarding PipeWire and the whole setup
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.
Read more at Arch Linux Wiki > PipeWire.
Bluetooth Support
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.
Development Tools
I use my machine for software development so I install compilers and interpreters on my system.
Flatpak Support
I use many Flatpak applications, so installing it is a must for me.
Containers Support
I use Podman instead of Docker to manage and use containers.
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.
Installing The Bare Minimum
Setting Up The Desktop
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:
Additionally, this command also installs the following fonts and icons since we are going to use them:
- Primary Fonts:
ttf-jetbrains-mono-nerd ttf-noto-nerd noto-fonts-cjk ttf-opensans noto-fonts otf-apple-fonts ttf-ms-win11-auto
- Primary Icons:
papirus-icon-theme papirus-folders-catppuccin-git
- Icon Fonts:
otf-font-awesome ttf-material-icons-git
- Cursor Icons:
catppuccin-cursors-mocha
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
.
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.
I use Keyitdev’s sddm-astronaut-theme as my SDDM theme.
Currently, I use
5am_Train_1920x1080.jpg
as my SDDM background.
Edit the /usr/share/sddm/themes/sddm-astronaut-theme/Themes/theme1.conf
file
and change the following lines:
Key | Value |
---|---|
Background | /usr/share/wallpapers/sddm-bg |
FormPosition | left |
HeaderText | You can put anything here :> |
Related Links:
Entering Hyprland
You have reached a checkpoint!
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.
Setting Up ZSH
See ZSH for more information.
Neovim
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.
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:
Run the following commands to use GNOME Keyring for SSH authentication.
Importing Your GPG keys
First, import your GPG private key.
Next, edit the key and trust it ultimately. You’ll have to get the key ID first.
Importing Your SSH keys
Copy your private and public keys to ~/.ssh
, and adjust the permissions.
Configuring SSH
You can also add a host configuration block in ~/.ssh/config
so that you can clone repositories using a shorter command.
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
It should print out something like this:
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.
We haven’t set up any web browsers currently so we won’t run gh auth login
for now.
Image and Video Viewers
I use Mpv and imv to view videos and images respectively.
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.
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.
The config also comes with the following shaders:
- AMD FidelityFX Super Resolution (FSR) for mpv: Upscales content up to 4x the original size.
- AMD FidelityFX CAS: AMD FidelityFX Contrast Adaptive Sharpening (CAS) for mpv.
- SSimDownscaler: High-quality downscaling of video content. (only available on
profile-high
) - KrigBilateral: Bilateral filter. (only available on
profile-high
)
Music Player
Soon™️
Document Viewer
I use Zathura as my primary document viewer. To start, install it together with the necessary dependencies and copy the configuration file.
Which language should I select for Tesseract data?
While installing the packages, Paru asked me this:
“There are 128 providers available for tessdata”
Choose the language you need for OCR. I read mostly English documents, so I chose
tesseract-data-eng
.
For Microsoft Office documents, I use OnlyOffice.
Flatpak Manager
Theming GTK Applications
Currently, this setup uses the Everforest GTK theme. refi64/stylepak helps us automatically install our GTK+ theme as a Flatpak.
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).
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.
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.
More information is available at:
- Arch Wiki > Fcitx5
- Arch Wiki > Mozc
- Arch Wiki > Localization > Korean.
- Fcitx > Using Fcitx 5 on Wayland
Setting Up The File Explorer
I chose Yazi as my GUI file explorer. I used to use Nautilus/GNOME Files, but I found Yazi to suit my needs.
I usually hide some of the XDG directories. Follow 3. Update XDG Directories to do this.
Setting Up The Browsers
Gaming on Arch
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.
Install Proton-GE. Set Steam Settings > Compatibility > Run other titles with
to GE-Proton
.
TIP
When you are going to play a game, enable mangohud and gamemode by adding the following to the launch options:
Screen Recording
Btrfs Snapshots
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.
To automatically update the GRUB menu with the latest snapper snapshots, run the following command to enable the needed service:
Edit /etc/default/grub-btrfs/config
. Uncomment/comment lines if needed.
Key | Value |
---|---|
GRUB_BTRFS_TITLE_FORMAT | ("date" "description" "snapshot" "type") |
To boot snapshots using overlayfs, edit /etc/mkinitcpio.conf
and add grub-btrfs-overlayfs
to HOOKS
:
After saving and closing the file, run mkinitcpio -P
.
Ricing Up GRUB
Our whole system mostly uses the Catppuccin colorscheme, so we’re going to use Catppuccin’s GRUB theme to rice our bootloader.
First, clone the catppuccin/grub
repository and copy the themes to /usr/share/grub/themes
.
Edit /etc/default/grub
and edit the GRUB_THEME
variable (uncomment if needed).
Save the file and update GRUB’s configuration by running:
You can now remove the cloned repository.
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.
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.
Mod Discord and Spotify
To set the default apps for common filetypes, run set-defaults.sh
script from the ~/.config/scripts
directory:
- Previous: Automatic Customization