My Arch Linux Setup with GNOME 3
If you have been following me on this space, you would have known by now, I am very particular about my computers, its operating systems, looks, softwares etc. Before you start getting any wrong ideas, my love for Arch Linux is still going strong.
However, I have moved on to Gnome 3 as my choice desktop. This post is an updated version of my previous post with the latest configuration of my machine. I have also update my GPU to 1080 Ti to be able to run some computer vision models at reasonable speeds. I use this desktop for some audio processing and some Kaggle-level computer vision/deep learning.
In this post, we will do a complete installation of Arch Linux with Gnome 3 as the desktop environment. Our setup will also involve encryption of the root partition that will be formatted in btrfs.


System Details
For reference, my installation system is a slightly upgraded form of my original desktop:
- i7 4790 3.6 GHz (Haswell)
- ASRock Z97 Extreme6 LGA 1150 Intel Z97 HDMI SATA USB 3.0
- ADATA XPG V1.0 DDR3 1866 4x4 GB RAM
- OCZ Vertex 460A Series 2.5" 240 GB
- WD Blue 1TB 3.5" 7200 RPM, 64MB Cache
- WD Blue 3TB 3.5" 7200 RPM, 64MB Cache
- Ultra LSP V2 650 Watt PSU
- Cooler Master - MasterCase Pro 5
- Asus BW-12B1ST/BLK/G/AS Blue Ray Burner
- Samsung U28E590D 28-Inch UHD LED-Lit 4K Monitor
- Nvidia GeForce GTX 1080 Ti GPU
Base Installation
Before beginning this guide, I would assume that you have a bootable USB of the latest Arch Linux Installer. If not, please follow the Arch wiki guide. Once you login into the installer USB, You will be logged in as the root user, and presented with a zsh shell. I will assume you have an Ethernet connection and hence will be connected to Internet by default. If you have to rely on wifi, please refer to the Wireless Network Configuration wiki page for the detailed setup. You must have Internet connection at this stage before proceeding any further.
You should boot into UEFI mode if you have a UEFI motherboard and UEFI mode enabled. To verify that you have booted in UEFI mode, please run:
This should print all set UEFI variables. Please look at the Arch Installation Guide in case you do not get any list of UEFI variables.
If you have high resolution 4K monitor like me, you will need to run following to increase fonts to a readable size:
We are all set to get started with the actual installation process.
Partitioning Hard Drives
First find the hard drive that you will be using as the main/root disk.
We will be using /dev/sda
as the main disk (with /
& /home
), /dev/sdb
as /data
and
/dev/sdc
as /media
.
Because we are creating an encrypted file system it’s a good idea to first overwrite it with random data. This can be done by filling the disk with zeros. Note that my disk is 240 GB, hence I have put a count of 250000. After filling the space with zero, we will need to recreate/overwrite the GPT.
Repeat the above procedure for /dev/sdb
and /dev/sdc
, but create just one partition with all
values as default. At the end we will have three partitions: /dev/sda1
, /dev/sda2
, /dev/sdb1
and /dev/sdc1
.
Setup Disk Encryption
Our /boot partition will be on /dev/sda1
, while the main installation will be on /dev/sda2
. In
this setup, we will be enabling full encryption on /dev/sda2
only.
In order to enable disk encryption, we will first create a root luks volume, open it and then format it.


Automatic Key Login from an USB/SD Card
If you want to automatically login the encrypted disk password from an externally attached USB or SD card, you will first need to create a random key file. Then, add this key to the luks container, so that it can be later used to open the encrypted drive.
Note that the KEYFILE here should be kept on a separate USB drive or SD card.
The recommended way of using such a disk would be as follows:
We will be later using this KEYFILE in our boot loader setup.
Format HDDs
At this point, we have following drives ready to format: /dev/sda1
, /dev/mapper/root
,
/dev/sdb1
and /dev/sdc1
. I plan to format /dev/sda1
with vfat, /dev/mapper/root
with
btrfs, /dev/sdb1
and /dev/sdc1
with xfs.
Now, we will create btrfs subvolumes and mount them properly for installation and final setup.
Now, once the sub-volumes have been created, we will mount them in appropriate locations with optimal flags.
Base System Installation
Now, we will do the actually installation of base packages. At this point, we will also save the
current /etc/resolv.conf
file for future use!
Initial System Setup
Edit the /mnt/ect/fstab
file to add following /tmp
mounts.
Finally bind root for installation.
We will also add hostname to our /etc/hosts
file:
Now, we need to update the mkinitcpio.conf
with specific modules needed for encryption and btrfs.
Finally run:
Boot Manager Setup
systemd-boot is a simple UEFI boot manager which executes configured EFI images. The default
entry is selected by a configured pattern (glob) or an on-screen menu. It is included with the
systemd that comes with the kernel. Assuming /boot
is your boot drive, first run the following
command to get started:
It will copy the systemd-boot binary to your EFI System Partition
(/boot/EFI/systemd/systemd-bootx64.efi
and /boot/EFI/Boot/BOOTX64.EFI
- both of which are
identical - on x64 systems ) and add systemd-boot
itself as the default EFI application
(default boot entry) loaded by the EFI Boot Manager.
Finally to configure out boot loader, we will need the UUID of some of our hard drives. These can
be easily done using the blkid
command.
Now, make sure that the following two files look as follows, where UUIDs is the value obtained from above commands.


Network Setup
At first we will need to figure out the Ethernet controller on which cable is connected. This can be achieved by first finding out the kernel module that is being used by the live version on Arch. Then the module can be used to track the device that is active.
In my case, the name of the device is enp0s25
. Using this name of the device, we need to
configure, and enable the systemd-networkd
service. Note that we will using the resolv.conf
that we saved from this session. Network configurations are stored as *.network in
/etc/systemd/network
. We need to create ours as below. Once the network settings file has been
created we can enable the networkd
service.
Now, start the networkd service:
Your network should be ready for the first use! We can also sync time automatically using the
timesyncd
service:
Avahi is a tool that allows programs to publish and discover services and hosts running on a local network with no specific configuration. For example you can plug into a network and instantly find printers to print to, files to look at and people to talk to. We can easily set it up it as follows:
GUI Installation with nvidia
We will now install the nvidia
drivers so that our system is ready for any GUI based desktop
installation after the first boot.
To avoid the possibility of forgetting to update your initramfs
after an nvidia
upgrade, you
have to use a pacman hook
like this:
Nvidia has a daemon that is to be run at boot. To start the persistence
daemon at boot, enable
the nvidia-persistenced.service
.
Enabling Better tty Resolution During Boot
The kernel compiled in efifb
module supports high-resolution nvidia console on EFI systems. This
can enabled by enabling the DRM kernel mode setting.
First, we will need to add following to MODULES section of the mkinitcpio.conf
file:
- nvidia
- nvidia_modeset
- nvidia_uvm
- nvidia_drm
We will also need to pass the nvidia-drm.modeset=1 kernel parameter during the boot.
First Boot Installations
Now we are ready for the first boot! Run the following command:
You should get larger fonts with the new terminal now as we are using the nvidia console now. It should have automatically unlocked your encrypted root disk, since USB with key is attached to the machine.
After your new system boots, Network should be setup at the start. Check the status of network:
If you do not get any output from ping, please follow the troubleshooting links at Arch Wiki on setting up network.
Now enable the automatic syncing of time from the ntp servers.
We can also automate the hostname
setup using the following systemd
command. Please replace
$HOSTNAME
with the hostname of your choice.
Adding New User
Choose $USERNAME
per your liking. I chose ssingh
, so in future commands whenever you see
ssingh
please replace it with your $USERNAME
.
Gnome 3 Installation and Setup
We can now proceed with the installation of Gnome 3. In the process, we will also install some
useful applications and fonts. The process very trivial, install few packages and then enable the
gdm
service.
Choose pacman Mirrors
We will now choose fastest merrors for pacman. The pacman-contrib
package provides a bash script,
/usr/bin/rankmirrors
, which can be used to rank the mirrors according to their connection and
opening speeds to take advantage of using the fastest local mirror. Finally, we can reboot to log
on to our new gnome system.
Once, we boot into the new system, we should have a basic gnome 3 desktop waiting for you. In the following section, we will be do installation and modifications to the system that I prefer.
Post Installation Setup
After rebooting, you should get the gdm login screen. Use your username and password to login. This
should give you a vanilla gnome 3 screen. We will first install few essentials, then modify our
gnome 3 to look something to my linking. In order to proceed, find the terminal
program by
pressing alt + s
and searching for terminal.
Setup AUR
AUR is a community-driven repository for Arch users. This allows you to install many popular packages that are otherwise not available through core repositories.
In order to make all types of installations uniform, I use yay as the preferred tool for installing all packages. It is blazing fast as it is written in go and used all the flags from regular pacman.
From now on, we can use yay
as a replacement for pacman
. Additionally, we can now also install
AUR packages.
Web Browsers
My preferred choice of browsers is google chrome.
Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage browser profile(s) in
tmpfs
and to periodically sync back to the physical disc (HDD/SSD). This is accomplished by an
innovative use of rsync
to maintain synchronization between a tmpfs
copy and media-bound backup
of the browser profile(s). These features of psd leads to following benefits:
- Transparent user experience
- Reduced wear to physical drives, and
- Speed
To setup. first install the profile-sync-daemon
package.
Run psd the first time which will create a configuration file at $XDG_CONFIG_HOME/psd/psd.conf
which contains all settings.
In the config file change the BROWSERS variables to google-chrome
. Also, enable the use of
overlayfs
to improve sync speed and to use a smaller memory footprint. Do this in the
USE_OVERLAYFS="yes"
variable.
::: warning USE_OVERLAYFS feature requires a Linux kernel version of 3.18.0 or greater to work. :::
In order to use the OVERLAYFS feature, you will also need to give sudo permissions to psd-helper
at the end of the sudoers file, as follows (replace $USERNAME
accordingly):
git Setup
Setup git global options as below. You will need to add the following content to $HOME/.gitconfig
file.
ssh Setup
To get started first install the openssh
package.
The ssh server can be started using the systemd
service. Before starting the service, however, we
want to generate ssh keys and setup the server for login based only on keys.
Furthermore, before enabling the sshd
service, please also ensure to copy your keys to all your
relevant other servers and places like github. We can now use systemd
to
start the ssh service.
zsh Setup
During the user creation, we already installed the zsh
shell. We have also activated a basic
setup at first login by the user.
In this section, we will be installing my variation of
zprezto package to manage zsh
configurations.
We will first install the main zprezto, then add my own modification on top of it.
And we are all setup for using zsh
!
Gnome 3 Modifications
We will modify gnome 3 by changing theme, icons and fonts. First install additional themes, fonts, icons etc.
Now you can open gnome-settings
and tweaks
tools to change themes, icons, cursors etc. to your
linking. If you have a high resolution 4K monitor like mw, you can enable the fractional upscaling
in the tweaks program. See
this link for
an example.
pcloud vs Dropbox
Recently, dropbox removed support for most of relevant file systems on linux. I was already not a fan of their higher prices. It was time to move on to something better. Then I found, pcloud. This service runs quite well on linux (as well as OSX, I really do not care about anything related to Windows!). pcloud has some interesting features:
- You can purchase space for lifetime!
- All the data actually reside on a fuse drive, so you hard disk is not used
- You can pay to have support for built-in encryption.
- The public folder gets a link, that you can use to host a static website or static contents of your webpages.
Additionally, I found some ultra- great deal over the black Friday weekend! To get support for pcloud in Arch, all you need to do is install it!
Editors
My choice of editor is neovim and sublime text. Please refer to my previous post for details on setting up Sublime Text 3. Following is the setup required to install it:
This brings us to the conclusion of this installation guide. Hope some of you find it useful. Please drop your comments below if you have any suggestions for improvements etc.
Comments