Arch Linux Post-Install Changes


In the last post I covered installing the base Linux system and choices I made around that. This post covers everything else, programs I like to use and different configuration ideas I implement.


It’s a good idea to store your configuration files on a git repo and organize them in the one location, ~/.config preferably. People call them dotfiles because hidden files and folders on Linux start with a dot.

I set up my dotfiles git repo by following this guide from Ackama.

SSH Configuration For Github

You may have to do this to get your dotfiles if you keep them in a private repo. Github no longer supports password authentication for git.

Generate a key with ssh-keygen

Add the public key to your Github account https://github.com/settings/keys

FInally add the following to .ssh/config

Host github.com
	IdentityFile ~/.ssh/github_key
	User git

Now you can clone using your ssh key like this:

git clone [email protected]:meme-lord/dotfiles.git

Skip Login Prompt on Boot

My system has disk encryption so having a login prompt after entering the decryption password feels redundant. I would like to do something similar to what Samuel Holland has and reduce the number of processes but it seems somewhat complicated to set up (and I’m on systemd not s6) so for now I have settled for these steps from Jack Cuthbert:

sudo mkdir -p /etc/systemd/system/[email protected]/
# /etc/systemd/system/[email protected]/autologin.conf
ExecStart=-/usr/bin/agetty --autologin YOUR_USERNAME_HERE --noclear %I $TERM

LUKS2 + Argon2ID

In my previous post I mentioned upgrading the disk encryption headers but avoided it due to lack of support. I have since done that upgrade by following this post from mjg59 Upgraded the LUKS headers from 1 to 2 and changed the key to argon2id.

Backup the header and copy to a USB stick:

sudo cryptsetup luksHeaderBackup /dev/whatever --header-backup-file /tmp/luksheader

Boot into the arch install USB stick:

sudo cryptsetup convert /dev/whatever --type luks2
sudo cryptsetup luksConvertKey /dev/whatever --pbkdf argon2id

Reboot to test the changes.

Delete the luksheader backup if changes worked successfully.



pacman -S firefox-developer-edition

I use Firefox Developer Edition as my main web browser. I don’t like Chrome because of it’s tight integration with the advertising behemoth and its inability to handle the number of tabs I use. It also doesnt have the same level of configurability as Firefox in my opinion.

First make a Firefox profile using FFprofile.com and put it into the right location, about:profiles should help. I noticed some of the options I chose in making my profile caused issues with Google Sheets and Google Docs so I just launch a seperate instance of Firefox with firefox-developer-edition --new-instance for those few cases. Quick UI changes I make after that:

enable menu bar
	remove firefox view icon
	remove firefox account icon
	remove flexible space
	remove pocket icon
	add back search bar
disable pocket recommendations in new tab
change shortcuts to 3 rows
enable open previous windows and tabs
set website appearance to dark


Some people feel very passionate about browsers and write an awful lot about them, links to some posts I found useful/interesting here:


pacman -S vivaldi vivaldi-ffmpeg-codecs

I tried using Vivaldi for a while but I had to stop because tab title text regularly gets bugged and thats too irritating for me. The tab sorting features were nice but its Chromium based 🤮

i3 Window Manager

I mentioned i3 in the other blog post but didn’t say a lot about it. It’s a tiling window manager, what this means is that it doesnt normally have floating windows, instead the first thing you open will be full screen, and the next thing will talk half the screen and so on, no screen space is wasted. You also use workspaces to switch between programs/layouts instead of reopening a window. It’s really handy as it means you don’t need to lift your hands off the keyboard to move between applications or rearrange windows.

I’ve only made a few modifications in my i3 config:

# shortcut for dmenu_run which I use as a program launcher
bindsym $mod+d exec --no-startup-id my_dmenu_run 

# I changed the exit code to allow the confirmation to be done from keyboard
# as I had an issue where my mouse would get 'stuck' and unable to move to the
# yes button
bindsym $mod+Shift+e exec sh -c '[ $(printf "yes\nno" | dmenu -i -p "Do you really want to exit i3?") = "yes" ] && i3-msg exit'

# lock screen for when I afk
bindsym $mod+l exec "i3lock_fancy"


I’m not too fussy about my fonts as long as they work. The fonts I’ve installed are:

pacman -S ttf-dejavu ttf-font-awesome noto-fonts-emoji noto-fonts-cjk

Text Editors


I use Obsidian for all my note taking. Notes use Markdown formatting and it has a nice tag system for organization. It also allows you to put in images and other files. I pay for Obsidian Sync which allows me to sync my notes across devices and the cloud backup is encrypted so I still have control of my data.

I use the Cybertron theme.

The Advanced Tables addon is a must have if you ever want to use tables in your notes.

In settings I recommend disabling the Readable line length setting under Editor>Display to fit more content in the window.


I use Geany for notes that are more “throwaway” or when I need to do some quick text mangling which Obsidian doesnt really work for.

pacman -S geany
wget https://raw.githubusercontent.com/geany/geany-themes/master/colorschemes/himbeere.conf -O ~/.config/geany/colorschemes


OpenOffice has been discontinued and LibreOffice is the Linux alternative to the MS Office suite.

pacman -S libreoffice-still

I use this instead of libreoffice-fresh as it is just stable and won’t update as often (I’m not a heavy user of word documents).


Nano is a basic but usable text editor. It has a few keyboard shortcuts that arent too hard to pick up and it’s nowhere near as complicated as vim or emacs.

One thing you should definitely do though is create a nano config to enabled code highlighting, fix tab indentation and show line numbers

Here’s my .config/nano/nanorc:

include /usr/share/nano/javascript.nanorc
include /usr/share/nano/php.nanorc
include /usr/share/nano/json.nanorc
include /usr/share/nano/html.nanorc
include /usr/share/nano/makefile.nanorc
include /usr/share/nano/python.nanorc
include /usr/share/nano/perl.nanorc
include /usr/share/nano/sh.nanorc
include /usr/share/nano/java.nanorc
include /usr/share/nano/c.nanorc
include /usr/share/nano/go.nanorc
include /usr/share/nano/sql.nanorc
include /usr/share/nano/ruby.nanorc
include /usr/share/nano/rust.nanorc
include /usr/share/nano/yaml.nanorc

set tabsize 4
set constantshow

Password Manager

I still use the old KeePass since I’m used to it but people also seem to like KeePassXC. There’s also pass but that seems like more effort to use to me.

Something I added to my i3 config to make keepass less annoying:

for_window [class="KeePass2" instance="keepass2"] floating enable, resize set 1000 600

This makes keepass a floating window by default and resizes the window.


This is basically flux for linux - it changes the screen brightness depending on the time of day so that you don’t burn your retinas and to reduce how much the screen light affects your circadian rhythm

pacman -S redshift

I add it to the end of my ~/.config/i3/config so that it autostarts:

# auto start redshift with Dublin as location
exec --no-startup-id redshift -l 53.33306:-6.24889


In the install guide we already mentioned changing these config lines in /etc/pacman.conf

ParallelDOwnloads = 10

It its also a good idea to configure the mirror list and order them by speed. Here I just check all the mirrors:

pacman -S pacman-contrib parallel
curl -s https://archlinux.org/mirrorlist/all/https/ | sed -e 's/^#Server/Server/' -e '/^#/d' > mirrors2check
rankmirrors -n 20 -p -v mirrors2check > /etc/pacman.d/mirrorlist

In the update script in my dotfiles repo I run an update on the mirrors if the file hasnt been changed in the last 30 days.


The default for make uses 2 cores which leaves a lot of cores unutilised so you can update that with this command:

sed -i "s/-j2/-j$(nproc)/;/^#MAKEFLAGS/s/^#//" /etc/makepkg.conf


I use dunst as my notification daemon, i3 is a lightweight environment so it doesn’t come bundled with its own.

You can test dunst configuration using https://www.bennish.net/web-notifications.html to pop notifications.

Mouse size

Multi monitor and games changing the resolution breaks the mouse size sometimes so I enforced it in ``~/.Xresources`

Xcursor.size: 32

Automatic i3 workspace renaming

There’s a program called i3wsr that will automatically change the i3 workspace names based on the programs running in that workspace. It’s available on the AUR so you can install with yay -S i3wsr. The config allows you to use emojis instead of program names and makes it easier to manage multiple workspaces.


I use bash, I’m too lazy to use other shells but you could consider using an alternate shell like zsh and fish

other programs I use

programs I’ve heard of but don’t use

random freezing bugfix

I’m dont think this is the right place to put this but I’m throwing it in here anyway. I was getting this random freezing issue. My logs would be spammed with lines like:

Feb 09 14:57:15 hillfort rtkit-daemon[909]: Supervising 10 threads of 5 processes of 1 users.
Feb 09 14:57:15 hillfort rtkit-daemon[909]: Supervising 10 threads of 5 processes of 1 users.
Feb 09 14:58:27 hillfort rtkit-daemon[909]: Supervising 10 threads of 5 processes of 1 users.

before I would be forced to manually reboot.

The issue was caused by PulseAudio and I fixed it with the solution from this LinuxMint thread by simply commenting out load-module module-suspend-on-idle in /etc/pulse/default.pa


Thanks for reading. Hopefully there’s some takeaway from this you can use to improve your own environment. If you spot any mistakes or improvements to be made on this let me know, you can message me on fediverse @[email protected].