In post installation we will be using a lot of sudo
. I'm not responsible if you broke your newly installed system. Remember that this guide is for future me.
We will be downloading stuff so we need an internet connection! So set-up your connection first!
It's recommended to check for updates first before installing anything so:
# pacman -Syu
We need to install a display server, a protocol or both. Normally, your desktop environment or window manager of choice will automatically install these as a dependency. But for this guide's sake we will install X
server:
# pacman -S xorg-server xorg-xrdb xorg-xinit xorg-xrandr xorg-xev xorg-xdpyinfo xorg-xprop
If you're planning to use a window manager like awesome
, bspwm
or i3
, you should install X. While if you're planning to use sway
, then wayland it is. If GNOME
, you can install both. Again, your environment of choice will automatically install these as its dependencies.
After installing the graphical server, we need to install the video drivers. I'm only using an integrated intel graphics card. Sobs. So an intel driver is what I need.
# pacman -S xf86-video-intel vulkan-intel vulkan-icd-loader libva-intel-driver
Add your (kernel) graphics driver to your initramfs. For example, if using intel
add i915
:
# sudoedit /etc/mkinitcpio.conf
Then add i915
to the MODULES
:
MODULES=(i915 ...)
# pacman -S pipewire lib32-pipewire wireplumber pipewire-audio pipewire-pulse
File system tools
# pacman -S unrar unzip p7zip unarchiver gvfs-mtp libmtp ntfs-3g \
android-udev mtpfs xdg-user-dirs
xdg-user-dirs
is a tool to help manage "well known" user directories like the desktop folder and the music folder. This will be automatically run on your next log in. Though you can manually generate XDG user directories by:
# xdg-user-dirs-update
If you didn't include git
on pacstrap
earlier, it's time to install it now. This tool will come in handy later:
# pacman -S git
The "later" is now, old man. We will now install an AUR helper, yay
.
Clone yay-bin
from the AUR using git
.
$ git clone https://aur.archlinux.org/yay-bin.git
$ cd yay-bin/
$ makepkg -sri
If you noticed, there's a warning message while running mkinitcpio -p linux
, fix this by installing these firmwares:
$ yay -S wd719x-firmware aic94xx-firmware --removemake --noconfirm
# mkinitcpio -p linux
Install your preferred desktop environment or window manager.
I'm an awesome
and KDE Plasma
guy, but right now I am using Plasma
. So in this guide, I'll include a guide to set-up both Plasma
and Awesome
.
-
KDE Plasma
-
Install the
plasma-meta
meta-package or theplasma
group. For differences betweenplasma-meta
andplasma
reference Package group. Alternatively, for a more minimal Plasma installation, install theplasma-desktop
package. Although I always installplasma-desktop
,plasma-meta
and some other programs such aslibappindicator-gtk3
,libappindicator-gtk2
,packagekit-qt5
, and etc.# pacman -S plasma-desktop plasma-meta
-
KDE Plasma provides a global menu, to have a better integration with
GTK
programs, installappmenu-gtk-module
:# pacman -S appmenu-gtk-module
-
If some programs like
Discord
has a blurry icon in the system tray, install the libappindicators:# pacman -S libappindicator-gtk3 libappindicator-gtk2
-
Discover
is the Plasma's app store, it will be automatically installed by installing theplasma-meta
package. If it doesn't show any applications, installpackagekit-qt5
:# pacman -S packagekit-qt5
-
Xorg is dying and nobody wants to maintain it anymore, while "Wayland is the future". I agree with this, although wayland needs to mature a little bit more to replace X completely. So yeah, I also want a Wayland session to test things out:
# pacman -S qt5-wayland plasma-wayland-session
-
Some of the plasmoids uses
qdbus
, so also intallqt5-tools
that will provide it:# pacman -S qt5-tools
-
I need a dock and I will be using
latte-dock
from the AUR:$ yay -S latte-dock-git
-
-
Awesome Window Manager
-
I always use the latest version of
awesomewm
because the devs are doing an amazing job by maintaining this treasure of a program and I also want to get the latest fixes and features ASAP (one of the reason I use arch btw). So install it from the AUR:$ yay -S awesome-git --noconfirm --removemake
-
Of course, just a window manager is not enough to get the experience I want. So I need to install a compositor and some utilities to achieve it.
-
I will be using
light
as the backlight control tool:$ yay -S light-git
-
Picom as the compositor:
$ yay -S picom-git --noconfirm --removemake
-
Rofi as the application launcher:
# pacman -S rofi
-
Authentication Managers
Polkit is used for controlling system-wide privileges. It provides an organized way for non-privileged processes to communicate with privileged ones. In contrast to systems such as sudo, it does not grant root permission to an entire process, but rather allows a finer level of control of centralized system policy.
-
Install
polkit-kde-agent
/lxqt-policykit
/polkit-gnome
, andgnome-keyring
:I'm using Qt apps with awesome, so I'll install lxqt-policykit for UI consistency. Note that you only need one authentication manager and gnome-keyring.
# pacman -S polkit lxqt-policykit gnome-keyring
-
Run it:
For lxqt-policykit, run:
$ /usr/bin/lxqt-policykit-agent
For polkit-kde-agent, run:
$ /usr/lib/polkit-kde-authentication-agent-1
For polkit-gnome:
$ /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
-
-
-
After installing an environment, we need a terminal emulator. Every linux user's first partner. Note that we're still on the TTY
.
-
KDE Plasma
Konsole
is the best terminal emulator for KDE Plasma due to its integration to the environment. Whileyakuake
will be our drop-down terminal.# pacman -S konsole yakuake
-
Awesome Window Manager
For me,
kitty
is the best terminal emulator for my awesome wm setups as it's easy to configure and fast. I will also installxterm
as a backup emulator.# pacman -S kitty xterm
GTK, or the GIMP Toolkit, is a multi-platform toolkit for creating graphical user interfaces.
If not yet installed:
# pacman -S gtk3
Install GTK engines
# pacman -S gtk-engine-murrine gtk-engines gnome-theme-extra
KDE's dolphin
is the best file manager in the Linux world, imho. So I always use this no matter what environment I'm using. We will also install ranger
, a CLI-based file manager.
# pacman -S dolphin dolphin-plugins kde-cli-tools ranger
To generate thumbnails, I'll also install these:
- kdegraphics-thumbnailers: Image files and PDFs
- kimageformats: Gimp
.xcf
files - qt5-imageformats :
.webp
,.tiff
,.tga
,.jp2
files - kdesdk-thumbnailers: Plugins for the thumbnailing system
- ffmpegthumbs: Video files (based on ffmpeg)
- raw-thumbnailer:
.raw
files - taglib : Audio files
# pacman -S kdegraphics-thumbnailers kimageformats qt5-imageformats kdesdk-thumbnailers \
ffmpegthumbs raw-thumbnailer taglib
Enable preview showing of required file type in Settings > Configure Dolphin... > General > Previews.
There's a lot more thumbnail generators that can be found from the AUR (like a generator to create a thumbnail for APK
files), but I don't really use them.
vim
is my text editor of choice, but sublime Text 3 is my go-to GUI text editor as it's lighter than the bloated chromium-based counterparts like atom
and vscode
.
$ yay -S sublime-text-dev
Note that Sublime is not "free" and needs a license.
Firefox
and w3m
are my trusty web browsers.
# pacman -S firefox w3m
I also install google-chrome
as my back up web browser:
$ yay -S google-chrome
If you're using KDE Plasma, you don't need to do these:
# pacman -S bluez
But make sure to install bluez-utils
and enable bluetooth manually:
# pacman -S bluez-utils
# systemctl enable bluetooth.service
The generic Bluetooth driver is the btusb
Kernel module. Check whether that module is loaded. If it's not, then load it.
If you're not using Plasma, install blueman
. The best GTK bluetooth manager.
# pacman -S blueman
Blueman automatically enables Bluetooth adapter when certain events (on boot, laptop lid is opened, etc.) occur. This can be disabled with the auto-power-on
in org.blueman.plugins.powermanager
:
$ gsettings set org.blueman.plugins.powermanager auto-power-on false
Plymouth provides a flicker-free graphical boot process. In short, a splash screen.
-
Install plymouth.
$ yay -S plymouth
-
Add
plymouth
to the HOOKS array in mkinitcpio.conf. It must be added afterbase
andudev
/systemd
for it to work:# sudoedit /etc/mkinitcpio.conf
-
Unencrypted partition
Put
plymouth
after base and udev:HOOKS=(base udev plymouth ...)
-
Encrypted partition and
systemd
-based initramfs.Again, you need a
systemd
-based initramfs for theplymouth
HOOK to work.Put
sd-plymouth
after thebase
andsystemd
hooks:HOOKS=(base systemd sd-plymouth ...)
-
-
Set the theme.
List all the installed plymouth theme:
# plymouth-set-default-theme -l
I have my own theme btw, and you can found it on the AUR. It is called
arch10
. So install it:$ yay -S plymouth-theme-arch10
Choose a theme by running the command below, then it will rebuild the initramfs image:
# plymouth-set-default-theme -R arch10
Replace
arch10
with your choice. -
You now need to append
splash
in the kernel parameters in your boot entry options.# sudoedit /boot/loader/enable/arch.conf
Example:
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options rd.luks.name=/DEV/SDA2/UUID/HERE=volume root=/dev/mapper/volume-root rw options quiet splash fbcon=nodefer
A display manager, or login manager, is typically a graphical user interface that is displayed at the end of the boot process in place of the default shell.
-
KDE Plasma
The
plasma-meta
package will include and installsddm
. So there's no need to install one. Enable it by:If you installed and using
plymouth
, enable this to have a smooth transition:# systemctl enable sddm-plymouth
If not:
# systemctl enable sddm
-
Awesome Window Manager
I'm using
lightdm
withlightdm-webkit2-greeter
, so this guide will cover that.-
First, install it:
# pacman -S lightdm lightdm-webkit2-greeter
-
To enable graphical login, enable the appropriate systemd service. For example, for Lightdn, enable
lightdm.service
. Just because we're using plymouth, we will enablelightdm-plymouth.service
to have a smooth transition from plymouth to lightdm.# systemctl enable lightdm-plymouth
-
Install a theme. I create my own lightdm-webkit2 theme and it's called glorious.
$ yay -S lightdm-webkit2-theme-glorious
-
Configure the lightdm to use lightdm-webkit2-greeter by:
-
Set lightdm greeter session to webkit2.
# sudoedit /etc/lightdm/lightdm.conf
Find
greeter-session
under the[Seat:*]
section, uncomment it, then set its value tolightdm-webkit2-greeter
. -
Set it as the lightdm-webkit2 theme then enable
debug_mode
by setting it totrue
. Why do we need to enabledebug_mode
? Sometimes you will be greeted by an error. And this error is due to a race condition where the theme is trying to access thelightdm
object even though it doesn't exist yet. Debug mode will allow you toright-click
andreload
the greeter just like a webpage.# sudoedit /etc/lightdm/lightdm-webkit2-greeter.conf
Find
webkit_theme
then set its value toglorious
. Finddebug_mode
then set it to true. If you encountered an error, right-click then reload.
-
-
This is for who prefer to limit the verbosity of their system to a strict minimum, either for aesthetics or other reasons. For me, it's aesthetics.
Edit boot loader kernel parameters:
# sudoedit /boot/loader/entries/arch.conf
Add these parameters (options ... loglevel=3 vga=current rd.udev.log_priority=3 fbcon=nodefer ...)
in the options
:
options quiet loglevel=3 vga=current rd.udev.log_priority=3 fbcon=nodefer
If you're using plymouth
and its splash
kernel parameter, put splash
after the quiet
parameter.
If you have an encrypted partition, quiet
and fbcon=nodefer
is enough. For example:
options quiet splash fbcon=nodefer
Remove splash
if you're not using plymouth
.
As of now, we're using iwd
if we're using wireless connection and dhcpcd
if we're on wired connection.
Network Manager is recommended if you're on a Plasma environment. So make sure to enable it and disable the other networking tools. While if you're using awesome, you can just continue using iwd
and dhcpcd
. I mean it's your choice.
-
Install network manager and its utilities.
plasma-meta
will include and install networkmanager. But just to be safe:# pacman -S networkmanager network-manager-applet dhclient modemmanager usb_modeswitch mobile-broadband-provider-info
-
Disable
iwd
ordhcpcd
.-
iwd
# iwctl station wlan0 disconnect # systemctl disable --now iwd
-
dhcpcd
# systemctl disable --now dhcpcd
-
-
Enable Network Manager service.
# systemctl enable --now NetworkManger
The system's fully functional! You can now login to you system with all the configuration we've done so far.
$ reboot
TLP brings you the benefits of advanced power management for Linux without the need to understand every technical detail. This is for laptops.
Install and enable it now:
# pacman -S tlp
# systemctl enable --now tlp.service
Install upower
, acpid
and acpi_call
:
# pacman -S acpid acpi_call upower
Enable acpid
# systemctl enable acpid.service
For thinkpad users, install thinkfan
here.
$ yay -S thinkfan
Note that the thinkfan package installs /usr/lib/modprobe.d/thinkpad_acpi.conf
, which contains:
options thinkpad_acpi fan_control=1
So fan control is enabled by default. Alternatively, you can enable fan control as follows:
# echo "options thinkpad_acpi fan_control=1" > /etc/modprobe.d/thinkfan.conf
Now, load the module:
# modprobe thinkpad_acpi
# cat /proc/acpi/ibm/fan
You should see that the fan level is "auto" by default, but you can echo a level command to the same file to control the fan speed manually. The thinkfan daemon will do this automatically.
For Lenovo x230 users:
Open or create /etc/thinkfan.conf
. Then use the following configuration:
sensors:
- hwmon: /sys/devices/virtual/thermal/thermal_zone0/temp
fans:
- tpacpi: /proc/acpi/ibm/fan
levels:
- [0, 0, 60]
- [1, 53, 65]
- [2, 55, 66]
- [3, 57, 68]
- [4, 61, 70]
- [5, 64, 71]
- [7, 68, 75]
- ["level full-speed", 72, 32767]
To find the best thinkfan configuration for you, search it on the internet.
Make sure to have a configuration file before enabling the thinkfan service!
# systemctl enable thinkfan.service
If you encounter an error about missing module, add this to your kernel parameters:
options thinkpad_acpi.fan_control=1
MAC randomization can be used for increased privacy by not disclosing your real MAC address to the network.
-
Randomization for iwd
Create and edit
/etc/iwd/main.conf
. Then add the following lines:[General] AddressRandomization=once AddressRandomizationRange=nic
-
Randomization for network-manager
-
Install macchanger.
# pacman -S macchanger
-
Create
30-mac-randomization.conf
in your/etc/NetworkManager/conf.d/
. Add this:[device-mac-randomization] # "yes" is already the default for scanning wifi.scan-rand-mac-address=yes [connection-mac-randomization] ethernet.cloned-mac-address=random wifi.cloned-mac-address=stable
-
We'll use Uncomplicated Firewall
or ufw
for short.
-
Install the
ufw
package. Start and enableufw.service
to make it available at boot. Note that this will not work ifiptables.service
is also enabled (and same for its ipv6 counterpart).# pacman -S ufw
-
Configuration
Here's some basic configuration. A very simplistic configuration which will deny all by default, allow any protocol from inside a 192.168.0.1-192.168.0.255 LAN, and allow incoming Deluge and rate limited SSH traffic from anywhere:
# ufw default deny # ufw allow from 192.168.0.0/24 # ufw allow Transmission # ufw limit ssh
-
The next line is only needed once the first time you install the package:
# ufw enable # systemctl enable --now ufw.service
Adding other applications. The PKG comes with some defaults based on the default ports of many common daemons and programs. Inspect the options by looking in the /etc/ufw/applications.d
directory or by listing them in the program itself:
# ufw app list
Improve fonts.
Install these fonts. Inter will be my system font no matter what the environment.
# pacman -S ttf-dejavu ttf-liberation noto-fonts noto-fonts-emoji inter-font ttf-roboto
Additional fonts to support Asian characters
# pacman -S noto-fonts-cjk noto-fonts-extra
Enable font presets by creating symbolic links:
# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d
# ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d
# ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d
The above will disable embedded bitmap for all fonts, enable sub-pixel RGB rendering, and enable the LCD filter which is designed to reduce colour fringing when subpixel rendering is used.
For font consistency, all applications should be set to use the serif
, sans-serif
, and monospace
aliases, which are mapped to particular fonts by fontconfig.
Create /etc/fonts/local.conf
, then add:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<edit mode="prepend" name="family">
<string>Inter</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>Noto Serif</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>Noto Sans</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>Noto Mono</string>
</edit>
</match>
</fontconfig>
Update and set your font of choice on settings.