Since you are here, I would assume that you have a minimal working Arch (vanilla) system. You are able to login and are connected to the internet.
Otherwise, I would highly recommend checking my previous post about installing Arch Linux, from scratch, with Disk Encryption (LUKS) and systemd-boot.
Alright then. Let’s make it functional and productive!
Install Core Packages
I prefer to keep things minimal and simple. As such, I will try to divide the steps in logical sections, so that you have the liberty to choose alternatives whenever you feel like.
To begin with, let’s start with some core packages:
sudo pacman -Sy base-devel git nvim alacritty
- Installing
yayrequires multiple steps as listed below:
# clone the repository
git clone https://aur.archlinux.org/yay-bin.git
# change directory and build yay
cd yay
makepkg -si
# clean up
cd ..
rm -rf yay-bin
Install Fonts
- Download the
Hack Nerd Fontfrom the official page. - Install:
# unzip
mkdir -p ~/.local/share/fonts/HackNerdFont/
sudo unzip $HOME/Downloads/Hack.zip -d ~/.local/share/fonts/HackNerdFont
# update cache
fc-cache -fv
# verify
fc-list | grep "Hack Nerd Font"
- The only other font we need is
noto-fonts-emoji:
sudo pacman -Sy noto-fonts-emoji
mkdir -p $HOME/.config/fontconfig/conf.d
# create emoji.conf under the above directory, with the following content
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>monospace</family>
<prefer>
<family>Noto Color Emoji</family>
</prefer>
</alias>
</fontconfig>
Web Browser
The next critical piece is a web browser. Below are the steps for the two most common browsers:
- Firefox
sudo pacman -Sy firefox
- Google Chrome
yay -Sy google-chrome
However, at this point if you try launching the browser you will get an error like:
Error: no DISPLAY environment variable specified
So, let’s fix that next.
Window Manager
I prefer to use Hyprland as my window manager. It is a dynamic tiling Wayland compositor which is highly configurable.
sudo pacman -Sy hyprland
Once installed, execute the command hyprland to verify everything is good.
You can exit using SUPER+M. Here SUPER is the window or the command key
on your keyboard. Unless you already configured it to something else.
In most cases, the Hyprland config maps to ~/.config/hypr/hyprland.conf.
At this point you have two options:
- customize the default config on your own and continue with next steps. Or,
- use the minimal yet productive Hyprland config that I have prepared over time. And, I use it on a daily basis.
For option 2, I would suggest you clone my dotfiles GitHub repository. It has
multiple things that we will be using along the way.
Again, I like to keep things to minimal so you could very much clone my repository and change it to your taste.
DIR=$HOME/dotfiles
mkdir -p $DIR
git clone https://github.com/gauravgahlot/dotfiles.git $DIR
Use the new config:
cp $DIR/.config/hypr/hyprland.conf ~/.config/hypr/
The three most important key bindings that you need to remember going forward are:
SUPER + RETURN- starts a terminal sessionSUPER + B- launches the (configured) browserSUPER + SHIFT + Q- exit the hyprland session
Note: By default the config uses Firefox as the
browser. If you want to use Google Chrome, you will need to update the Hyprland config.
At this point if you start a new hyprland session (which you should), you will see a blank screen. However, you should be able to launch the terminal, and browser.
Install utility packages for Hyprland
- rofi - application launcher
- waybar - a status bar
- hyprpaper - a wallpaper utility
- hyprlock - a multi-threaded and GPU-accelerated screen lock
- hypridle - idle management daemon
sudo pacman -Sy rofi waybar hyprpaper hyprlock hypridle
Copy over the config from the dotfiles:
cp $DIR/.config/hypr/*.conf $HOME/.config/hypr/
cp -a $DIR/.config/waybar $HOME/.config/
Let’s set a wallpaper. You can download some free beautiful 4K wallpers from pexels.com.
Put things in place for hyprpaper:
mkdir -p $HOME/pictures/wallpapers/
cp $HOME/Downloads/<your-wallpaper-of-choice> $HOME/pictures/wallpapers/art.jpg
Note: In case you change the wallpaper file name or location, don’t forget to update the same in
hyprlockandhyprpaperconfig.
(Optional) Set a theme for rofi:
# get themes
git clone https://github.com/newmanls/rofi-themes-collection
mkdir -p ~/.local/share/rofi/
cp -a themes ~/.local/share/rofi/
# select a theme by executing
rofi-theme-selector
Exit and restart the hyprland session.
Display Manager
While there are multiple options, I found sddm to be the one that works well
out of the box. And that is why I never felt like configuring it.
sudo pacman -Sy sddm
sudo systemctl enable sddm.service
Now, when you restart your system sddm will show you a login screen, and after
login it automatically start Hyprland.
File Manager
It is always helpful to have a graphical file manager, and for that I really like thunar.
It’s very light-weight and does the job well for me.
sudo pacman -Sy thunar
Other than thunar you can also cosider dolphin. I used it for a while, but
didn’t really like it much.
If you are interested in a TUI based file manager, you must checkout yazi.
Unfortunately, it doesn’t integrate very well with - alacritty and neovim -
tools that I use all day long.
Sound and Bluetooth
This one is trick. It may work for you as is or you may have to change a few packages depending on the hardware.
# install core packages
sudo pacman -Sy bluez bluez-utils pipewire pipewire-bluetooth pipewire-alsa pipewire-jack wireplumber pipewire-pulse pipewire-audio sof-firmware playerctl xdg-desktop-portal-hyprland
# install volume/profile controller
yay -Sy pwvucontrol
# start the bluetooth service
sudo systemctl enable bluetooth
At this point, I would suggest you reboot your system and try:
- playing an audio/video
- connecting a bluetooth headset
- using a player and volume controls on your keyboard
It worked for me, and I hope it works for you too.
Development Environment
Setup default shell
- Install
zshandoh-my-zsh:
sudo pacman -Sy zsh
# install oh-my-zsh
# when prompted change shell to zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
- Setup a shell prompt (starship)
# for detailed documentation - https://starship.rs/
# install
curl -sS https://starship.rs/install.sh | sh
# Add the following to the end of ~/.zshrc:
eval "$(starship init zsh)"
# restart shell
- Install plugins -
zsh-autosuggestionsandzsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
At last, you should now copy over the .zshrc, and config files for alacritty:
cp $DIR/.zshrc ~/
cp $DIR/.oh-my-zsh/custom/alias.zsh ~/.oh-my-zsh/custom/
cp -a $DIR/.config/alacritty ~/.config/
And finally, log out and log back in (or simply reboot).
Setup a terminal multiplexer
- Install
tmux
sudo pacman -Sy tmux
- Copy over the
tmuxconfig:
cp $DIR/tmux/.tmux.conf ~/
- Install
tpm- a plugin manager fortmux
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
- In order to install plugins, start a session by executing
tmuxcommand. - Once tmux starts, press
prefix+I(capitali, as in Install) to fetch the plugins. - Prefix is
CTRL + a.
Setup Neovim
- Install Neovim, if not already
sudo pacman -Sy nvim
- We also need to install Go ,
npm, andripgrep:
sudo pacman -Sy go npm ripgrep
- Copy over the config files
cp -a $DIR/.config/nvim ~/.config/
- Start Neovim by executing the command
nvim, and it will install the required plugins. - Type
:Masonto launch mason, which will install the required LSP servers, linters, formatters etc.
Setup Git
# set editor
git config --global core.editor "nvim"
# set git to use the credential store helper
git config --global credential.helper store
# set user details
git config --global user.email "<your-email-address>"
git config --global user.name "<your-full-name>"
# generate personal token for authentication with GitHub
# https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token#creating-a-token
# generate GPG key
# https://docs.github.com/en/github/authenticating-to-github/generating-a-new-gpg-key
Notifications
dunst works flawlessly for displaying notifications.
sudo pacman -Sy dunst
Copy over the config file:
cp -a $DIR/.config/dunst/ ~/.config/
You can verify if everything is working as expected by publishing a notification:
notify-send 'Hello!'
dunst is already present in the Hyprland startup apps so nothing else to do.
Other useful packages
brightnessctl- to control the built-in display brightnessbat- alternative to classiccatcommandsublime-text-4- a text editorcode- VS Codejqpacman-contribrancher-k3d-bin- k3d for K8s cluster managementgrim,slurp,wl-clipboardandswappy- for screenshot
sudo pacman -Sy brightnessctl bat jq pacman-contrib code
yay -Sy sublime-text-4 rancher-k3d-bin
External Display
Skip this section if you are not using an old Dell Display dock.
➜ yay -S displaylink evdi
:: There are 3 providers available for evdi:
:: Repository AUR
1) evdi-amd-vmap-texture 2) evdi-dkms 3) evdi-dkms-git
Enter a number (default=1):
==> 2
Make sure to use evdi-dkms repository. It won’t work otherwise.
Install Slack
cd ~/aur
git clone https://aur.archlinux.org/slack-desktop.git && cd slack-desktop
makepkg -s
sudo pacman -U slack-desktop-*.pkg.tar.xz
Install Zoom
wget https://zoom.us/client/latest/zoom_x86_64.pkg.tar.xz
sudo pacman -U zoom_x86_64.pkg.tar.xz
# to uninstall
sudo pacman -Rns zoom
Setup Docker
# install docker
sudo pacman -Sy docker
# enable and start docker service
sudo systemctl enable --now docker
# add user to docker group
sudo usermod -aG docker $USER
# reboot the system (or logout)
sudo reboot 0
Remove Unrequired Packages
# list unrequired packages
pacman -Qdt
# remove all unrequired packages
pacman -Rns $(pacman -Qdtq)